在閱讀了 SNMP 和一些問題後,我認為理解代理角色作為設備的 SNMP 服務(像 SQL 一樣,它是一個儲存 API)。
當您執行 SQL 查詢時,SQL 引擎會完成所有工作並傳回結果 - 您無需了解儲存方式以及儲存位置。
但MIB並不是實際的存儲,那麼我的代理的作用是什麼?
如果代理商只像我這樣註冊 MIB教學,所以它根本不用作處理程序,這意味著您可以設置並到達那裡而無需繞過處理程序的物理存儲。在本教程中,您所做的一切都是這樣的:
netsnmp_register_int_instance("my example int variable",
my_registration_oid,
OID_LENGTH(my_registration_oid),
&example1, NULL);
不需要處理程序來處理呼叫。
假設我想監視應用程式的待處理請求佇列,因此我需要一個代理,所有針對 application_pending_request 的 SNMP 請求都會被觸發,並且它將返回佇列深度。當我需要輪詢應用程式隊列才能獲得結果時,為什麼我需要一個實際的 MIB?
答案1
您對 SNMP 的工作原理存在根本性的誤解。快速和骯髒的比較:SNMP MIB 類似主機名。 MIB 將 OID 對應到友善名稱-例如
.1.3.6.1.2.1.1.1.0
=> SNMPv2-MIB::sysDescr.0
=> Host Description
(uname 輸出)。
為了從 SNMP 伺服器(代理)檢索訊息,該信息必須在特定的 OID 上發布。
為了讓 SNMP 守護程式發布訊息,它(通常)需要兩件事:
- 取得該資訊的方法(腳本、程式等)
- 放置該資訊的位置(OID)
(某些 SNMP 守護程序可能還需要映射 OID 的 MIB 檔案)
為了檢索訊息,您必須知道 OID - 這可以是數字 OID,也可以是您的 MIB 檔案中的「友善」名稱。簡單網路管理協議 客戶。
SNMP「瀏覽器」通常需要 MIB 文件,因為如果沒有 MIB 文件,它們向您呈現的只是一堆毫無意義的數字清單。
所以你的問題的答案是「你不需要MIB 文件,它們只是對需要與 SNMP 互動的人有幫助」。
以您的範例(報告佇列長度)為例,這聽起來來自您喜歡的教學net-snmp
(UCD-SNMP)。
net-snmp
包括用於此類事情的內建設施—通讀手冊頁和範例設定檔(特別注意exec
執行外部腳本的指令:通常您會執行一個列印佇列長度的腳本,並在您的監控軟體/SNMP 用戶端)