檢視原始碼 執行應用程式

執行應用程式 章節描述如何設定和啟動應用程式。主題包括:

  • 組態目錄和參數
  • 修改組態檔
  • 啟動應用程式(代理程式和/或管理器)
  • 除錯應用程式(代理程式和/或管理器)

另請參閱 代理程式組態檔定義管理器組態檔定義 章節,其中包含有關代理程式和管理器組態檔的更多詳細資訊。

設定應用程式

系統中必須存在以下兩個目錄才能執行代理程式:

  • 組態目錄 儲存代理程式使用的所有組態檔(有關更多資訊,請參閱 代理程式組態檔定義 章節)。
  • 資料庫目錄 儲存內部資料庫檔案。

系統中必須存在以下目錄才能執行管理器:

  • 組態目錄 儲存管理器使用的所有組態檔(有關更多資訊,請參閱 管理器組態檔定義 章節)。
  • 資料庫目錄 儲存內部資料庫檔案。

代理程式和管理器使用(應用程式)組態參數來找出這些目錄的位置。這些參數應在 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 - 一個工作程序專用於「設定請求」,一個(主要)工作程序用於所有其他請求(「get 請求」和通知)。

      如果「主要」工作程序忙碌,則會產生一個臨時程序來處理該工作(「get 請求」或通知)。

    • extended - 一個工作程序專用於「設定請求」,一個工作程序專用於通知,一個(主要)工作程序用於所有「get 請求」。

      如果「主要」工作程序忙碌,則會產生一個臨時程序來處理該「get 請求」。

    注意

    即使將多執行緒設定為 extended,在傳送需要回應的 inform 請求時,仍然存在「重新排序」的風險(因此可能需要重新傳送)。

    此外,當然無法保證封包在網路上的順序。

    預設值為 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 通訊端。如果此操作失敗,則網路介面(和代理程式)無法啟動(崩潰)。此(篩選器)清單包含會使網路介面「順利」失敗的錯誤(原因)。此(篩選器)清單應包含 gen_udp:open/1,2 可能傳回的錯誤。效果是 gen_udp:open 傳回的任何錯誤在此清單中,將被視為「非致命性」錯誤,只會導致資訊訊息,而不是錯誤訊息。網路介面和代理程式仍然會崩潰,但會產生較不令人反感的訊息。

  • agent_mibs() = [string()] <選用> - 指定定義哪些 MIB 最初載入到 SNMP 主代理程式中的 MIB 清單(包括路徑)。

    請注意,始終會載入以下內容:

    • 版本 v1: STANDARD-MIB
    • 版本 v2: SNMPv2
    • 版本 v3: SNMPv2SNMP-FRAMEWORK-MIBSNMP-MPD-MIB

    預設值為 []

  • mib_storage() = [mib_storage_opt()] <選用> - mib_storage_opt() = {module, mib_storage_module()} | {options, mib_storage_options()}

    此選項指定如何儲存基本 MIB 資料。snmp 代理程式的兩個部分使用此選項:mib-server 和 symbolic-store。

    預設值為 [{module, snmpa_mib_storage_ets}]

  • mib_storage_module() = snmpa_mib_data_ets | snmpa_mib_data_dets | snmpa_mib_data_mnesia | module() - 定義由 snmpa_mib_storage 行為定義的 SNMP 代理程式的 mib 儲存模組。

    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() <optional> - 這是實作相關的選項。也就是說,它取決於模組。對於每個模組,都有特定的一組有效選項。對於應用程式提供的模組,支援以下選項

    • 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()] <optional> - 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() <optional> - 如果此值為 false,則當載入 mib 時,會在安裝 mib 之前檢查每個 mib 項目。檢查的目的是防止相同的符號 mib 項目名稱用於不同的 oid。

    預設值為 false

  • trapentry_override() = bool() <optional> - 如果此值為 false,則當載入 mib 時,會在安裝 mib 之前檢查每個 trap。檢查的目的是防止相同的符號 trap 名稱用於不同的 trap。

    預設值為 false

  • mib_server_data_module() = snmpa_mib_data_tttn | module() <optional> - 定義 SNMP 代理 mib 伺服器的後端資料模組,如 snmpa_mib_data 行為所定義。

    目前,只有預設模組與代理一起提供,即 snmpa_mib_data_tttn

    預設模組為 snmpa_mib_data_tttn

  • mibs_cache() = bool() | mibs_cache_opts() <optional> - 代理是否應使用 mib 伺服器查詢快取。

    預設值為 true (在這種情況下,mibs_cache_opts() 預設值適用)。

  • mibs_cache_opts() = [mibs_cache_opt()] <optional> - mibs_cache_opt() = {autogc, mibs_cache_autogc()} | {gclimit, mibs_cache_gclimit()} | {age, mibs_cache_age()}

    定義 SNMP 代理 mib 伺服器快取特定的選項。

    有關預設值,請參閱 mibs_cache_opt() 中的選項。

  • mibs_cache_autogc() = bool() <optional> - 定義 mib 伺服器是否應自動執行快取 gc,或將其留給使用者(請參閱 gc_mibs_cache/0,1,2,3)。

    預設值為 true

  • mibs_cache_age() = integer() > 0 <optional> - 定義快取中的項目在被 GC(假設執行 GC)之前允許存在多久。每當存取快取中的項目時,都會「觸摸」它。

    此 age 以毫秒為單位定義。

    預設值為 10 分鐘

  • mibs_cache_gclimit() = infinity | integer() > 0 <optional> - 執行 GC 時,這將是從快取中刪除的最大快取項目數。

    可以設定限制的原因是,如果快取很大,GC 可能會花費很長時間,在此期間代理會「忙碌」。但是,在負載很重的系統上,我們也可能面臨無法刪除快取中足夠元素的風險,反而導致快取隨著時間推移而增長。這就是預設值為 infinity 的原因,它將確保所有候選項盡快被刪除。

    預設值為 infinity

  • error_report_mod() = atom() <optional> - 定義一個錯誤報告模組,實作 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()] <mandatory> - agent_config_opt() = {dir, agent_config_dir()} | {force_load, force_load()} | {verbosity, verbosity()}

    定義 SNMP 代理的特定組態相關選項。

    有關預設值,請參閱 agent_config_opt() 中的選項。

  • agent_config_dir = dir() <mandatory> - 定義 SNMP 代理組態檔案的儲存位置。

  • force_load() = bool() <optional> - 如果 true,則在啟動期間會重新讀取組態檔案,並忽略組態資料庫的內容。因此,如果 true,則在代理重新啟動後,對組態資料庫的變更會遺失。

    預設值為 false

管理員特定的組態選項和類型

  • server() = [server_opt()] <optional> - server_opt() = {timeout, server_timeout()} | {verbosity, verbosity()} | {cbproxy, server_cbproxy()} | {netif_sup, server_nis()}

    指定管理員伺服器程序的選項。

    預設值為 silence

  • server_timeout() = integer() <optional> - 非同步請求清理時間。對於每個請求,都會在內部儲存一些資訊,以便能夠將回覆(當它到達時)傳送到正確的目的地。如果回覆到達,此資訊將被刪除。但是,如果沒有(及時)回覆,則必須在超過最佳期限時間後刪除資訊。此清理將按 server_timeout() 時間定義的定期間隔執行。該資訊將具有一個最佳期限時間,由呼叫請求函式時給出的 Expire 時間定義(請參閱 async_getasync_get_nextasync_set)。

    時間以毫秒為單位。

    預設值為 30000

  • server_cbproxy() = temporary (default) | permanent <optional> - 此選項指定伺服器將如何處理回呼呼叫。

    • temporary (default) - 將為每個回呼呼叫建立一個臨時程序。

    • permanent - 使用此選項,伺服器將建立一個永久(命名)程序,該程序實際上會序列化所有回呼呼叫。

    預設值為 temporary

  • server_nis() = none (default) | {PingTO, PongTO} <optional> - 此選項指定伺服器是否應主動監管 net-if 程序。請注意,這僅在使用的 net-if 程序實際支援該協定時才有效。有關詳細資訊,請參閱 snmpm_network_interface 行為。

    • none (default) - 不主動監管 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()] <mandatory> - 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() <mandatory> - 定義 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> - 任意 Socket 選項的清單。

    此清單不會由 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,則只會記錄 set 請求。
    • 如果指定 read,則只會記錄 get 請求。
    • 如果 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

偵錯應用程式

可以偵錯應用程式的每個(非監督者)程序(代理程式和管理器),但 net_if 模組除外,該模組可能是應用程式的使用者提供的。這可以透過呼叫 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/0snmpa:print_mib_tables/0snmpa:print_mib_variables/0