查看源代码 运行应用程序

运行应用程序 章节描述了如何配置和启动应用程序。主题包括:

  • 配置目录和参数
  • 修改配置文件
  • 启动应用程序(代理和/或管理器)
  • 调试应用程序(代理和/或管理器)

另请参阅 代理配置文件定义管理器配置文件定义 章节,其中包含有关代理和管理器配置文件的更详细信息。

配置应用程序

系统中必须存在以下两个目录才能运行代理:

  • 配置目录 存储代理使用的所有配置文件(有关更多信息,请参阅 代理配置文件定义 章节)。
  • 数据库目录 存储内部数据库文件。

系统中必须存在以下目录才能运行管理器:

  • 配置目录 存储管理器使用的所有配置文件(有关更多信息,请参阅 管理器配置文件定义 章节)。
  • 数据库目录 存储内部数据库文件。

代理和管理器使用(应用程序)配置参数来确定这些目录的位置。这些参数应在 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: ""
  • agent_originating_discovery_opts() = [agent_originating_discovery_opt()] <可选> - agent_originating_discovery_opt() = {enable, boolean()}

    这些选项会影响此代理中 originating 的发现。

    originating 发现选项的默认值为:

    • enable: true
  • 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-MIBSNMP-MPD-MIB

    默认为 []

  • 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_etssnmpa_mib_storage_detssnmpa_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_loggersnmpa_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_getasync_get_nextasync_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_interfacehandle_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 模块用于维护环绕日志。如果存在,则 dirsize 选项是必需的。

    如果不存在,则不使用审计跟踪日志。

  • 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/2snmpm: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:print_mib_info/0

有关更多信息,请参阅 snmpa:print_mib_info/0, snmpa:print_mib_tables/0snmpa:print_mib_variables/0