查看源代码 运行应用程序
运行应用程序 章节描述了如何配置和启动应用程序。主题包括:
- 配置目录和参数
- 修改配置文件
- 启动应用程序(代理和/或管理器)
- 调试应用程序(代理和/或管理器)
另请参阅 代理配置文件定义 和 管理器配置文件定义 章节,其中包含有关代理和管理器配置文件的更详细信息。
配置应用程序
系统中必须存在以下两个目录才能运行代理:
- 配置目录 存储代理使用的所有配置文件(有关更多信息,请参阅 代理配置文件定义 章节)。
- 数据库目录 存储内部数据库文件。
系统中必须存在以下目录才能运行管理器:
- 配置目录 存储管理器使用的所有配置文件(有关更多信息,请参阅 管理器配置文件定义 章节)。
- 数据库目录 存储内部数据库文件。
代理和管理器使用(应用程序)配置参数来确定这些目录的位置。这些参数应在 Erlang 系统配置文件中定义。为 SNMP 应用程序定义了以下配置参数:
agent_options() = [agent_option()]
agent_option() = {restart_type, restart_type()} |
{agent_type, agent_type()} |
{agent_verbosity, verbosity()} |
{versions, versions()} |
{discovery, agent_discovery()} |
{gb_max_vbs, gb_max_vbs()} |
{priority, priority()} |
{multi_threaded, multi_threaded()} |
{db_dir, db_dir()} |
{db_init_error, db_init_error()} |
{local_db, local_db()} |
{net_if, agent_net_if()} |
{mibs, mibs()} |
{mib_storage, mib_storage()} |
{mib_server, mib_server()} |
{audit_trail_log, audit_trail_log()} |
{error_report_mod, error_report_mod()} |
{note_store, note_store()} |
{symbolic_store, symbolic_store()} |
{target_cache, target_cache()} |
{config, agent_config()}
manager_options() = [manager_option()]
manager_option() = {restart_type, restart_type()} |
{net_if, manager_net_if()} |
{server, server()} |
{note_store, note_store()} |
{config, manager_config()} |
{inform_request_behaviour, manager_irb()} |
{mibs, manager_mibs()} |
{priority, priority()} |
{audit_trail_log, audit_trail_log()} |
{versions, versions()} |
{def_user_mod, def_user_module() |
{def_user_data, def_user_data()}
代理特定的配置选项和类型
agent_type() = master | sub <可选>
- 如果为master
,则启动一个主代理。否则,不启动任何代理。默认为
master
。agent_discovery() = [agent_discovery_opt()] <可选>
-agent_discovery_opt() = {terminating, agent_terminating_discovery_opts()} | {originating, agent_originating_discovery_opts()}
terminating
选项影响由管理器发起的发现。originating
选项影响由此代理发起的发现。有关默认值,请参阅
agent_discovery_opt()
中的选项。agent_terminating_discovery_opts() = [agent_terminating_discovery_opt()] <可选>
-agent_terminating_discovery_opt() = {enable, boolean()} | {stage2, discovery | plain} | {trigger_username, string()}
这些选项会影响此代理中
terminating
的发现(即,由管理器发起)。terminating
发现选项的默认值为:- enable:
true
- stage2:
discovery
- trigger_username:
""
- enable:
agent_originating_discovery_opts() = [agent_originating_discovery_opt()] <可选>
-agent_originating_discovery_opt() = {enable, boolean()}
这些选项会影响此代理中
originating
的发现。originating
发现选项的默认值为:- enable:
true
- enable:
multi_threaded() = bool() | extended<可选>
- 如果为true
(或extended
),则代理是多线程的,每个 get 请求一个线程。值
extended
表示还会创建一个特殊的“进程”,用于处理所有通知。true
- 一个工作线程专门用于“set-requests”,一个(主)工作线程用于所有其他请求(“get-request”和通知)。如果“主”工作线程正忙,则会生成一个临时进程来处理该作业(“get-request”或通知)。
extended
- 一个工作线程专门用于“set-requests”,一个工作线程专门用于通知,一个(主)工作线程用于所有“get-requests”。如果“主”工作线程正忙,则会生成一个临时进程来处理该“get-request”。
注意:
即使将多线程设置为
extended
,在发送 inform-requests 时仍然存在“重新排序”的风险,这需要响应(因此可能需要重新发送)。此外,一旦数据包在网络上,当然无法保证顺序。
默认为
false
。db_dir() = string() <强制>
- 定义 SNMP 代理内部数据库文件的存储位置。gb_max_vbs() = pos_integer() | infinity <可选>
- 定义 Get-BULK 响应中允许的最大变量绑定数。默认为
1000
。local_db() = [local_db_opt()] <可选>
-local_db_opt() = {repair, agent_repair()} | {auto_save, agent_auto_save()} | {verbosity, verbosity()}
定义 SNMP 代理本地数据库特定的选项。
有关默认值,请参阅
local_db_opt()
中的选项。agent_repair() = false | true | force <可选>
- 启动 snmpa_local_db 时,它始终尝试打开现有数据库。如果为false
并且发生某些错误,则会创建一个新数据库。如果为true
,将修复现有文件。如果为force
,即使表已正确关闭,也会对其进行修复。默认为
true
。agent_auto_save() = integer() | infinity <可选>
- 自动保存间隔。只要在此时间段内未访问表,就会将其刷新到磁盘。默认为
5000
。agent_net_if() = [agent_net_if_opt()] <可选>
-agent_net_if_option() = {module, agent_net_if_module()} | {verbosity, verbosity()} | {options, agent_net_if_options()}
定义 SNMP 代理网络接口实体特定的选项。
有关默认值,请参阅
agent_net_if_opt()
中的选项。agent_net_if_module() = atom() <可选>
- 处理 SNMP 代理网络接口部分的模块。必须实现snmpa_network_interface
行为。默认为
snmpa_net_if
。agent_net_if_options() = [agent_net_if_option()] <可选>
-agent_net_if_option() = {bind_to, bind_to()} | {sndbuf, sndbuf()} | {recbuf, recbuf()} | {no_reuse, no_reuse()} | {req_limit, req_limit()} | {filter, agent_net_if_filter_options()} | {open_err_filters, agent_net_if_open_err_filters()} | {extra_sock_opts, extra_socket_options()} | {inet_backend, inet_backend()}
这些选项实际上特定于所使用的模块。此处显示的选项适用于默认的
agent_net_if_module()
。注意:
如果用户配置了带有选项的传输,则这些选项将优先于这些选项。有关更多信息,请参阅 代理信息。
有关默认值,请参阅
agent_net_if_option()
中的选项。req_limit() = integer() | infinity <可选>
- 代理处理的最大并发请求数。默认为
infinity
。agent_net_if_filter_options() = [agent_net_if_filter_option()] <可选>
-agent_net_if_filter_option() = {module, agent_net_if_filter_module()}
这些选项实际上特定于所使用的模块。此处显示的选项适用于默认的
agent_net_if_filter_module()
。有关默认值,请参阅
agent_net_if_filter_option()
中的选项。agent_net_if_filter_module() = atom() <可选>
- 处理 SNMP 代理网络接口过滤器部分的模块。必须实现 snmpa_network_interface_filter 行为。默认为
snmpa_net_if_filter
。agent_net_if_open_err_filters() = [agent_net_if_open_err_filter()] <可选>
-agent_net_if_open_err_filter() = atom()
在代理启动期间,会打开传输 UDP 套接字。如果此操作失败,则 net-if(和代理)将无法启动(崩溃)。此(过滤器)列表包含将使 net-if “正常”失败的错误(原因)。此(过滤器)列表应包含 gen_udp:open/1,2 可能返回的错误。效果是,如果 gen_udp:open 返回的任何错误在此列表中,都将被视为“非致命”的,并且只会导致信息消息,而不是错误消息。Net If 和代理仍会崩溃,但会生成不那么令人讨厌的消息。
agent_mibs() = [string()] <可选>
- 指定一个 MIB 列表(包括路径),该列表定义最初加载到 SNMP 主代理中的 MIB。请注意,始终会加载以下内容:
- 版本 v1:
STANDARD-MIB
- 版本 v2:
SNMPv2
- 版本 v3:
SNMPv2
,SNMP-FRAMEWORK-MIB
和SNMP-MPD-MIB
默认为
[]
。- 版本 v1:
mib_storage() = [mib_storage_opt()] <可选>
-mib_storage_opt() = {module, mib_storage_module()} | {options, mib_storage_options()}
此选项指定如何存储基本的 MIB 数据。snmp 代理的两个部分使用此选项:MIB 服务器和符号存储。
默认为
[{module, snmpa_mib_storage_ets}]
。mib_storage_module() = snmpa_mib_data_ets | snmpa_mib_data_dets | snmpa_mib_data_mnesia | module()
- 定义 SNMP 代理的 MIB 存储模块,由snmpa_mib_storage
行为定义。snmp 代理的几个实体(
mib-server
通过其数据模块和symbolic-store
)使用此选项来存储加载 MIB 时检索到的各种 MIB 相关数据。代理程序提供了几种实现方式:
snmpa_mib_storage_ets
、snmpa_mib_storage_dets
和snmpa_mib_storage_mnesia
。默认模块是
snmpa_mib_storage_ets
。mib_storage_options() = list() <可选>
- 这是依赖于实现的。也就是说,它取决于模块。每个模块都有一组特定的有效选项。对于应用程序提供的模块,支持以下选项snmpa_mib_storage_ets
:{dir, filename()} | {action, keep | clear}, {checksum, boolean()}
dir
- 如果存在,则指向一个目录,该目录用于“同步” ets 表中的所有数据的文件。此外,当打开表时,如果该文件存在,则会读取该文件。
默认情况下,不会使用此功能。
action
- 指定当找到非空文件时的行为:保留其内容或清除它。默认值为
keep
。checksum
- 定义是否对文件进行校验和计算。默认为
false
。
snmpa_mib_storage_dets
:{dir, filename()} | {action, keep | clear}, {auto_save, default | pos_integer()} | {repair, force | boolean()}
dir
- 此必需选项指向用于放置 dets 表文件的目录。action
- 指定当找到非空文件时的行为:保留其内容或清除它。默认值为
keep
。auto_save
- 定义 dets 自动保存频率。默认值为
default
。repair
- 定义 dets 修复行为。默认为
false
。
snmpa_mib_storage_mnesia
:{action, keep | clear}, {nodes, [node()]}
action
- 指定当存在非空且已存在的表时的行为:保留其内容或清除它。默认值为
keep
。nodes
- 定义在何处打开表的节点名称列表(或描述节点列表的原子)。用户有责任确保 mnesia 实际上在指定的节点上运行。识别以下不同的值
[]
- 转换为自身节点的列表:[node()]
all
-erlang:nodes()
visible
-erlang:nodes(visible)
connected
-erlang:nodes(connected)
db_nodes
-mnesia:system_info(db_nodes)
默认值是调用的结果:
erlang:nodes()
。
mib_server() = [mib_server_opt()] <可选>
-mib_server_opt() = {mibentry_override, mibentry_override()} | {trapentry_override, trapentry_override()} | {verbosity, verbosity()} | {cache, mibs_cache()} | {data_module, mib_server_data_module()}
定义 SNMP 代理 mib 服务器特定的选项。
有关默认值,请参见
mib_server_opt()
中的选项。mibentry_override() = bool() <可选>
- 如果此值为 false,则在加载 mib 时,在安装 mib 之前会检查每个 mib 条目。检查的目的是防止将相同的符号 mib 条目名称用于不同的 oid。默认为
false
。trapentry_override() = bool() <可选>
- 如果此值为 false,则在加载 mib 时,在安装 mib 之前会检查每个 trap。检查的目的是防止将相同的符号 trap 名称用于不同的 trap。默认为
false
。mib_server_data_module() = snmpa_mib_data_tttn | module() <可选>
- 定义由snmpa_mib_data
行为定义的 SNMP 代理 mib 服务器的后端数据模块。目前,只有默认模块随代理一起提供,
snmpa_mib_data_tttn
。默认模块是
snmpa_mib_data_tttn
。mibs_cache() = bool() | mibs_cache_opts() <可选>
- 代理是否应使用 mib 服务器查找缓存。默认值为
true
(在这种情况下,适用mibs_cache_opts()
默认值)。mibs_cache_opts() = [mibs_cache_opt()] <可选>
-mibs_cache_opt() = {autogc, mibs_cache_autogc()} | {gclimit, mibs_cache_gclimit()} | {age, mibs_cache_age()}
定义 SNMP 代理 mib 服务器缓存特定的选项。
有关默认值,请参见
mibs_cache_opt()
中的选项。mibs_cache_autogc() = bool() <可选>
- 定义 mib 服务器是否应自动执行缓存 gc,或将其留给用户(请参阅 gc_mibs_cache/0,1,2,3)。默认为
true
。mibs_cache_age() = integer() > 0 <可选>
- 定义缓存中的条目在被 GC 之前允许存在多长时间(假设执行 GC)。每次访问缓存中的条目时,都会“触摸”该条目。年龄以毫秒为单位定义。
默认值为
10 分钟
。mibs_cache_gclimit() = infinity | integer() > 0 <可选>
- 执行 GC 时,这是将从缓存中删除的最大缓存条目数。可以设置限制的原因是,如果缓存很大,则 GC 可能需要很长时间,在此期间代理将“繁忙”。但是,在负载很重的系统上,我们还面临着无法删除缓存中足够元素的风险,反而导致其随时间增长。这就是默认值为
infinity
的原因,这将确保所有候选项都尽快删除。默认为
infinity
。error_report_mod() = atom() <可选>
- 定义一个错误报告模块,该模块实现snmpa_error_report
行为。工具包提供了两个模块:snmpa_error_logger
和snmpa_error_io
。默认值为
snmpa_error_logger
。symbolic_store() = [symbolic_store_opt()]
-symbolic_store_opt() = {verbosity, verbosity()}
定义 SNMP 代理符号存储特定的选项。
有关默认值,请参见
symbolic_store_opt()
中的选项。target_cache() = [target_cache_opt()]
-target_cache_opt() = {verbosity, verbosity()}
定义 SNMP 代理目标缓存特定的选项。
有关默认值,请参见
target_cache_opt()
中的选项。agent_config() = [agent_config_opt()] <必需>
-agent_config_opt() = {dir, agent_config_dir()} | {force_load, force_load()} | {verbosity, verbosity()}
定义 SNMP 代理特定的配置相关选项。
有关默认值,请参见
agent_config_opt()
中的选项。agent_config_dir = dir() <必需>
- 定义 SNMP 代理配置文件的存储位置。force_load() = bool() <可选>
- 如果为true
,则在启动期间会重新读取配置文件,并且会忽略配置数据库的内容。因此,如果true
,则在重新启动代理时,对配置数据库所做的更改会丢失。默认为
false
。
管理器特定的配置选项和类型
server() = [server_opt()] <可选>
-server_opt() = {timeout, server_timeout()} | {verbosity, verbosity()} | {cbproxy, server_cbproxy()} | {netif_sup, server_nis()}
指定管理器服务器进程的选项。
默认值为
silence
。server_timeout() = integer() <可选>
- 异步请求清理时间。对于每个请求,会在内部存储一些信息,以便能够将答复(到达时)传递到正确的目的地。如果答复到达,则将删除此信息。但是,如果没有(及时)收到答复,则必须在经过最佳期限时间后删除该信息。此清理将以固定的时间间隔执行,由server_timeout()
时间定义。该信息将具有一个最佳期限时间,该时间由调用请求函数时给出的Expire
时间定义(请参阅 async_get、async_get_next 和 async_set)。时间以毫秒为单位。
默认值为
30000
。server_cbproxy() = temporary (默认) | permanent <可选>
- 此选项指定服务器将如何处理回调调用。temporary (默认)
- 将为每个回调调用创建一个临时进程。permanent
- 使用此选项,服务器将创建一个永久的(命名的)进程,该进程实际上会序列化所有回调调用。
默认值为
temporary
。server_nis() = none (默认) | {PingTO, PongTO} <可选>
- 此选项指定服务器是否应主动监视 net-if 进程。请注意,这仅在使用网络接口进程实际支持该协议时才有效。有关更多信息,请参见snmpm_network_interface
行为。none (默认)
- 不主动监视 net-if 进程。{PingTO :: pos_integer(), PongTO :: pos_integer()}
-PingTO
时间指定成功 ping(或启动)和将 ping 消息发送到 net-if 进程的时间之间的时间(基本上是 ping 之间的时间)。PongTO
时间指定 net-if 进程使用 pong 消息响应 ping 消息的最长时间。它从 ping 消息发送时开始计数。这两个时间都以毫秒为单位。
默认值为
none
。manager_config() = [manager_config_opt()] <必需>
-manager_config_opt() = {dir, manager_config_dir()} | {db_dir, manager_db_dir()} | {db_init_error, db_init_error()} | {repair, manager_repair()} | {auto_save, manager_auto_save()} | {verbosity, verbosity()}
定义 SNMP 管理器特定的配置相关选项。
有关默认值,请参见
manager_config_opt()
中的选项。manager_config_dir = dir() <必需>
- 定义 SNMP 管理器配置文件的存储位置。manager_db_dir = dir() <mandatory>
- 定义 SNMP 管理器存储持久化数据的位置。manager_repair() = false | true | force <optional>
- 定义持久化数据库的修复选项(打开时如何以及是否修复表)。默认为
true
。manager_auto_save() = integer() | infinity <optional>
- 自动保存间隔。当表在此时间段内未被访问时,将刷新到磁盘。默认为
5000
。manager_irb() = auto | user | {user, integer()} <optional>
- 此选项定义管理器如何处理对接收到的 inform-request 发送响应(确认)。auto
- 管理器将自动向 inform-request 消息发送响应(确认)。{user, integer()}
- 当 handle_inform 函数完成时,管理器将向 inform-request 消息发送响应(确认)。整数是以毫秒为单位的时间,管理器将认为存储的 inform-request 信息有效。user
- 与{user, integer()}
相同,只是使用默认时间 15000 毫秒。
有关详细信息,请参阅
snmpm_network_interface
、handle_inform 和 管理器网络接口的定义。默认值为
auto
。manager_mibs() = [string()] <optional>
- 指定 MIB(包括路径)列表,并定义哪些 MIB 最初加载到 SNMP 管理器中。默认为
[]
。manager_net_if() = [manager_net_if_opt()] <optional>
-manager_net_if_opt() = {module, manager_net_if_module()} | {verbosity, verbosity()} | {options, manager_net_if_options()}
定义 SNMP 管理器网络接口实体特定的选项。
有关默认值,请参阅
manager_net_if_opt()
中的选项。manager_net_if_options() = [manager_net_if_option()] <optional>
-manager_net_if_option() = {bind_to, bind_to()} | {sndbuf, sndbuf()} | {recbuf, recbuf()} | {no_reuse, no_reuse()} | {filter, manager_net_if_filter_options()} | {extra_sock_opts, extra_socket_options()} | {inet_backend, inet_backend()}
这些选项实际上是特定于所使用的模块的。此处显示的选项适用于默认的
manager_net_if_module()
。有关默认值,请参阅
manager_net_if_option()
中的选项。manager_net_if_module() = atom() <optional>
- 处理 SNMP 管理器的网络接口部分的模块。它必须实现snmpm_network_interface
行为。默认值为
snmpm_net_if
。manager_net_if_filter_options() = [manager_net_if_filter_option()] <optional>
-manager_net_if_filter_option() = {module, manager_net_if_filter_module()}
这些选项实际上是特定于所使用的模块的。此处显示的选项适用于默认的
manager_net_if_filter_module()
。有关默认值,请参阅
manager_net_if_filter_option()
中的选项。manager_net_if_filter_module() = atom() <optional>
- 处理 SNMP 管理器的网络接口过滤部分的模块。必须实现snmpm_network_interface_filter
行为。默认值为
snmpm_net_if_filter
。def_user_module() = atom() <optional>
- 实现默认用户的模块。请参阅snmpm_user
行为。默认值为
snmpm_user_default
。def_user_data() = term() <optional>
- 默认用户的数据。在调用回调函数时传递给用户。默认值为
undefined
。
常用配置类型
restart_type() = permanent | transient | temporary
- 有关详细信息,请参阅 supervisor 文档。代理的默认值为
permanent
,管理器的默认值为transient
。db_init_error() = terminate | create | create_db_and_dir
- 定义如果代理无法打开现有数据库文件时该怎么办。terminate
表示代理/管理器将终止,create
表示代理/管理器将删除错误的文件并创建新文件,而create_db_and_dir
表示代理/管理器将创建数据库文件以及数据库文件缺少的所有父目录。默认值为
terminate
。priority() = atom() <optional>
- 定义所有 SNMP 进程的 Erlang 优先级。默认值为
normal
。versions() = [version()] <optional>
-version() = v1 | v2 | v3
应接受/使用的 SNMP 版本。
默认值为
[v1,v2,v3]
。verbosity() = silence | info | log | debug | trace <optional>
- SNMP 进程的详细程度。这指定了打印多少调试信息。默认值为
silence
。bind_to() = bool() <optional>
- 如果为true
,则 net_if 绑定到 IP 地址。如果为false
,则 net_if 监听运行它的主机上的任何 IP 地址。默认为
false
。no_reuse() = bool() <optional>
- 如果为true
,则 net_if 不指定 IP 和端口地址应可重用。如果为false
,则地址设置为可重用。默认为
false
。recbuf() = integer() <optional>
- 接收缓冲区大小。默认值由
gen_udp
定义。sndbuf() = integer() <optional>
- 发送缓冲区大小。默认值由
gen_udp
定义。extra_socket_options() = list() <optional>
- 任意套接字选项的列表。此列表不由 snmp 检查(除了检查它是否为列表)。用户有责任确保这些是有效选项,并且不与“正常”选项冲突。
默认为
[]
。inet_backend() = inet | socket <optional>
- 选择 inet 后端。此选项使可以使用具有不同 inet 后端('inet' 或 'socket')的 net_if (gen_udp)。
默认值为
inet
。note_store() = [note_store_opt()] <optional>
-note_store_opt() = {timeout, note_store_timeout()} | {verbosity, verbosity()}
指定 SNMP 注释存储的选项。
有关默认值,请参阅
note_store_opt()
中的选项。note_store_timeout() = integer() <optional>
- 注释清理时间。当在注释存储中存储注释时,每个注释都有一个生命周期。每个timeout
注释存储进程都会执行 GC 来删除过期的注释。时间以毫秒为单位。默认值为
30000
。audit_trail_log() [audit_trail_log_opt()] <optional>
-audit_trail_log_opt() = {type, atl_type()} | {dir, atl_dir()} | {size, atl_size()} | {repair, atl_repair()} | {seqno, atl_seqno()}
如果存在,此选项指定 _审计跟踪日志_的选项。
disk_log
模块用于维护环绕日志。如果存在,则dir
和size
选项是必需的。如果不存在,则不使用审计跟踪日志。
atl_type() = read | write | read_write <optional>
- 指定应使用哪种类型的审计跟踪日志。该类型对代理和管理器的影响实际上是不同的。对于代理
- 如果指定了
write
,则仅记录设置请求。 - 如果指定了
read
,则仅记录获取请求。 - 如果
read_write
,则记录所有请求。
对于管理器
- 如果指定了
write
,则仅记录发送的消息。 - 如果指定了
read
,则仅记录接收到的消息。 - 如果
read_write
,则记录传出和传入的消息。
默认值为
read_write
。- 如果指定了
atl_dir = dir() <mandatory>
- 指定审计跟踪日志应存储的位置。如果
audit_trail_log
指定应进行日志记录,则 _必须_定义此参数。atl_size() = {integer(), integer()} <mandatory>
- 指定审计跟踪日志的大小。此参数将发送到disk_log
。如果
audit_trail_log
指定应进行日志记录,则 _必须_定义此参数。atl_repair() = true | false | truncate | snmp_repair <optional>
- 指定打开时是否以及如何修复审计跟踪日志。除非此参数的值为snmp_repair
,否则会将其发送到disk_log
。另一方面,如果值为snmp_repair
,则 snmp 尝试自行处理某些故障。即使它无法修复该文件,也不会直接截断该文件,而是 _将其移到一边_ 以便稍后进行脱机分析。默认为
true
。atl_seqno() = true | false <optional>
- 指定审计跟踪日志条目是否将被(序列)编号。序列号的范围根据 RFC 5424,即 1 到 2147483647。默认为
false
。
修改配置文件
要启动应用程序(代理和/或管理器),必须修改配置文件,有两种方法可以执行此操作。手动编辑文件,或者运行配置工具,如下所示。
如果使用身份验证或加密(仅限 SNMPv3),请启动 crypto
应用程序。
1> snmp:config().
Simple SNMP configuration tool (version 4.0)
------------------------------------------------
Note: Non-trivial configurations still has to be
done manually. IP addresses may be entered
as dront.ericsson.se (UNIX only) or
123.12.13.23
------------------------------------------------
Configure an agent (y/n)? [y]
Agent system config:
--------------------
1. Agent process priority (low/normal/high) [normal]
2. What SNMP version(s) should be used (1,2,3,1&2,1&2&3,2&3)? [3] 1&2&3
3. Configuration directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/agent/conf
4. Config verbosity (silence/info/log/debug/trace)? [silence]
5. Database directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/agent/db
6. Mib storage type (ets/dets/mnesia)? [ets]
7. Target cache verbosity (silence/info/log/debug/trace)? [silence]
8. Symbolic store verbosity (silence/info/log/debug/trace)? [silence]
9. Local DB verbosity (silence/info/log/debug/trace)? [silence]
10. Local DB repair (true/false/force)? [true]
11. Local DB auto save (infinity/milli seconds)? [5000]
12. Error report module? [snmpa_error_logger]
13. Agent type (master/sub)? [master]
14. Master-agent verbosity (silence/info/log/debug/trace)? [silence] log
15. Shall the agent re-read the configuration files during startup
(and ignore the configuration database) (true/false)? [true]
16. Multi threaded agent (true/false)? [false] true
17. Check for duplicate mib entries when installing a mib (true/false)? [false]
18. Check for duplicate trap names when installing a mib (true/false)? [false]
19. Mib server verbosity (silence/info/log/debug/trace)? [silence]
20. Mib server cache (true/false)? [true]
21. Note store verbosity (silence/info/log/debug/trace)? [silence]
22. Note store GC timeout? [30000]
23. Shall the agent use an audit trail log (y/n)? [n] y
23b. Audit trail log type (write/read_write)? [read_write]
23c. Where to store the audit trail log? [/ldisk/snmp] /ldisk/snmp/agent/log
23d. Max number of files? [10]
23e. Max size (in bytes) of each file? [10240]
23f. Audit trail log repair (true/false/truncate)? [true]
24. Which network interface module shall be used? [snmpa_net_if]
25. Network interface verbosity (silence/info/log/debug/trace)? [silence] log
25a. Bind the agent IP address (true/false)? [false]
25b. Shall the agents IP address and port be not reusable (true/false)? [false]
25c. Agent request limit (used for flow control) (infinity/pos integer)? [infinity] 32
25d. Receive buffer size of the agent (in bytes) (default/pos integer)? [default]
25e. Send buffer size of the agent (in bytes) (default/pos integer)? [default]
25f. Do you wish to specify a network interface filter module (or use default) [default]
Agent snmp config:
------------------
1. System name (sysName standard variable) [bmk's agent]
2. Engine ID (snmpEngineID standard variable) [bmk's engine]
3. Max message size? [484]
4. The UDP port the agent listens to. (standard 161) [4000]
5. IP address for the agent (only used as id
when sending traps) [127.0.0.1]
6. IP address for the manager (only this manager
will have access to the agent, traps are sent
to this one) [127.0.0.1]
7. To what UDP port at the manager should traps
be sent (standard 162)? [5000]
8. Do you want a none- minimum- or semi-secure configuration?
Note that if you chose v1 or v2, you won't get any security for these
requests (none, minimum, semi_des, semi_aes) [minimum]
making sure crypto server is started...
8b. Give a password of at least length 8. It is used to generate
private keys for the configuration: kalle-anka
9. Current configuration files will now be overwritten. Ok (y/n)? [y]
- - - - - - - - - - - - -
Info: 1. SecurityName "initial" has noAuthNoPriv read access
and authenticated write access to the "restricted"
subtree.
2. SecurityName "all-rights" has noAuthNoPriv read/write
access to the "internet" subtree.
3. Standard traps are sent to the manager.
4. Community "public" is mapped to security name "initial".
5. Community "all-rights" is mapped to security name "all-rights".
The following agent files were written: agent.conf, community.conf,
standard.conf, target_addr.conf, target_params.conf,
notify.conf, vacm.conf and usm.conf
- - - - - - - - - - - - -
Configure a manager (y/n)? [y]
Manager system config:
----------------------
1. Manager process priority (low/normal/high) [normal]
2. What SNMP version(s) should be used (1,2,3,1&2,1&2&3,2&3)? [3] 1&2&3
3. Configuration directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/manager/conf
4. Config verbosity (silence/info/log/debug/trace)? [silence] log
5. Database directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/manager/db
6. Database repair (true/false/force)? [true]
7. Database auto save (infinity/milli seconds)? [5000]
8. Inform request behaviour (auto/user)? [auto]
9. Server verbosity (silence/info/log/debug/trace)? [silence] log
10. Server GC timeout? [30000]
11. Note store verbosity (silence/info/log/debug/trace)? [silence]
12. Note store GC timeout? [30000]
13. Which network interface module shall be used? [snmpm_net_if]
14. Network interface verbosity (silence/info/log/debug/trace)? [silence] log
15. Bind the manager IP address (true/false)? [false]
16. Shall the manager IP address and port be not reusable (true/false)? [false]
17. Receive buffer size of the manager (in bytes) (default/pos integer)? [default]
18. Send buffer size of the manager (in bytes) (default/pos integer)? [default]
19. Shall the manager use an audit trail log (y/n)? [n] y
19b. Where to store the audit trail log? [/ldisk/snmp] /ldisk/snmp/manager/log
19c. Max number of files? [10]
19d. Max size (in bytes) of each file? [10240]
19e. Audit trail log repair (true/false/truncate)? [true]
20. Do you wish to assign a default user [yes] or use
the default settings [no] (y/n)? [n]
Manager snmp config:
--------------------
1. Engine ID (snmpEngineID standard variable) [bmk's engine]
2. Max message size? [484]
3. IP address for the manager (only used as id
when sending requests) [127.0.0.1]
4. Port number (standard 162)? [5000]
5. Configure a user of this manager (y/n)? [y]
5b. User id? kalle
5c. User callback module? snmpm_user_default
5d. User (callback) data? [undefined]
5. Configure a user of this manager (y/n)? [y] n
6. Configure an agent handled by this manager (y/n)? [y]
6b. User id? kalle
6c. Target name? [bmk's agent]
6d. Version (1/2/3)? [1] 3
6e. Community string ? [public]
6f. Engine ID (snmpEngineID standard variable) [bmk's engine]
6g. IP address for the agent [127.0.0.1]
6h. The UDP port the agent listens to. (standard 161) [4000]
6i. Retransmission timeout (infinity/pos integer)? [infinity]
6j. Max message size? [484]
6k. Security model (any/v1/v2c/usm)? [any] usm
6l. Security name? ["initial"]
6m. Security level (noAuthNoPriv/authNoPriv/authPriv)? [noAuthNoPriv] authPriv
6. Configure an agent handled by this manager (y/n)? [y] n
7. Configure an usm user handled by this manager (y/n)? [y]
7a. Engine ID [bmk's engine]
7b. User name? hobbes
7c. Security name? [hobbes]
7d. Authentication protocol (no/sha/md5)? [no] sha
7e Authentication [sha] key (length 0 or 20)? [""] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, \
17,18,19,20]
7d. Priv protocol (no/des/aes)? [no] des
7f Priv [des] key (length 0 or 16)? [""] 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
7. Configure an usm user handled by this manager (y/n)? [y] n
8. Current configuration files will now be overwritten. Ok (y/n)? [y]
- - - - - - - - - - - - -
The following manager files were written: manager.conf, agents.conf , users.conf and usm.conf
- - - - - - - - - - - - -
--------------------
Configuration directory for system file (absolute path)? [/ldisk/snmp]
ok
启动应用程序
使用以下命令启动 Erlang
erl -config /tmp/snmp/sys
如果使用身份验证或加密(仅限 SNMPv3),请启动 crypto
应用程序。如果忘记此步骤,代理将不会启动,但会报告 {config_error,{unsupported_crypto,_}}
错误。
1> application:start(crypto).
ok
2> application:start(snmp).
ok
调试应用程序
可以调试应用程序(代理和管理器)的每个(非 supervisor)进程,可能除了 netif 模块(这些模块可能由应用程序的用户提供)。这可以通过调用 snmpa:verbosity/2
和 snmpm:verbosity/2
函数和/或使用 配置参数 来完成。详细程度本身具有几个 _级别:silence | info | log | debug | trace
。对于最低详细程度 silence
,不打印任何内容。详细程度越高,打印的内容就越多。默认值始终为 silence
。
3> snmpa:verbosity(master_agent, log).
ok
5> snmpa:verbosity(net_if, log).
ok
6>
%% Example of output from the agent when a get-next-request arrives:
** SNMP NET-IF LOG:
got packet from {147,12,12,12}:5000
** SNMP NET-IF MPD LOG:
v1, community: all-rights
** SNMP NET-IF LOG:
got pdu from {147,12,12,12}:5000 {pdu, 'get-next-request',
62612569,noError,0,
[{varbind,[1,1],'NULL','NULL',1}]}
** SNMP MASTER-AGENT LOG:
apply: snmp_generic,variable_func,[get,{sysDescr,persistent}]
** SNMP MASTER-AGENT LOG:
returned: {value,"Erlang SNMP agent"}
** SNMP NET-IF LOG:
reply pdu: {pdu,'get-response',62612569,noError,0,
[{varbind,[1,3,6,1,2,1,1,1,0],
'OCTET STRING',
"Erlang SNMP agent",1}]}
** SNMP NET-IF INFO: time in agent: 19711 mysec
其他用于调试代理的有用函数是
snmpa:info/0,1
- info 用于检索各种代理信息的列表。snmpa:which_aliasnames/0
- which_aliasnames 用于检索代理已知的所有别名名称的列表。snmpa:which_tables/0
- which_tables 用于检索代理已知的所有 (MIB) 表的列表。snmpa:which_variables/0
- which_variables 用于检索代理已知的所有 (MIB) 变量的列表。snmpa:which_notifications/0
- which_notifications 用于检索代理已知的所有 (MIB) 通知/陷阱的列表。snmpa:restart_worker/0,1
- restart_worker 用于重启多线程代理的工作进程。snmpa:restart_set_worker/0,1
- restart_set_worker 用于重启多线程代理的 set-worker 进程。snmpa_local_db:print/0,1,2
- 例如,此函数可以显示计数器snmpInPkts
和snmpOutPkts
。
另一种调试代理的有用方法是漂亮地打印代理直接处理的所有表和/或变量的内容。这可以通过简单地调用来实现
有关更多信息,请参阅 snmpa:print_mib_info/0
, snmpa:print_mib_tables/0
或 snmpa:print_mib_variables/0
。