建議使用此匯出器以 Prometheus 可以攝取的格式公開 SNMP 資料。
為了簡單開始,建議將if_mib
模組與使用public_v2
auth 模組的交換器、存取點或路由器一起使用,該模組應該是目標裝置上的唯讀存取社群。
請注意,SNMP 中的團體字串不被視為秘密,因為它們在 SNMP v1 和 v2c 中以未加密的方式發送。為了安全訪問,需要 SNMP v3。
雖然 SNMP 使用分層資料結構,而 Prometheus 使用 n 維矩陣,但這兩個系統完美映射,無需手動遍歷資料。 snmp_exporter
為您映射資料。
Prometheus 能夠將 SNMP 索引實例對應到標籤。例如, ifEntry
指定ifIndex
的 INDEX 。這成為 Prometheus 中的ifIndex
標籤。
如果 SNMP 條目有多個索引值,則每個值都會對應到單獨的 Prometheus 標籤。
SNMP 採用 OID 樹結構,由 MIB 描述。 OID 子樹在樹中的不同位置具有相同的順序。 1.3.6.1.2.1.2.2.1.1
( ifIndex
) 下的順序與1.3.6.1.2.1.2.2.1.2
( ifDescr
)、 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
) 這些順序中的相同順序中的相同順序。數字是OID,括號中的名稱是來自MIB 的名稱,在本例中是IF-MIB。
給定一個介面為 2 的設備,部分snmpwalk
回傳如下所示:
1.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2 # ifIndex for '2' is literally just '2'
1.3.6.1.2.1.2.2.1.2.2 = STRING: "eth0" # ifDescr
1.3.6.1.2.1.31.1.1.1.1.2 = STRING: "eth0" # IfName
1.3.6.1.2.1.31.1.1.1.10.2 = INTEGER: 1000 # ifHCOutOctets, 1000 bytes
1.3.6.1.2.1.31.1.1.1.18.2 = STRING: "" # ifAlias
snmp_exporter
將所有這些資料合併為:
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
snmp_exporter
的單一實例可以為數千個裝置運行。
二進位檔案可以從 Github 發布頁面下載,無需特殊安裝。
我們也提供了一個範例 systemd 單元檔案。
作為守護程式或從 CLI 啟動snmp_exporter
:
./snmp_exporter
造訪 http://localhost:9116/snmp?target=192.0.0.8,其中192.0.0.8
是要從中取得指標的 SNMP 設備的 IP 或 FQDN。請注意,這將使用預設傳輸 ( udp
)、預設連接埠 ( 161
)、預設驗證 ( public_v2
) 和預設模組 ( if_mib
)。身份驗證和模組必須在snmp.yml
檔案中定義。
例如,如果您有一個名為my_secure_v3
的驗證用於執行ddwrt
,則 URL 將類似於 http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8。
若要設定不同的傳輸和/或端口,請使用語法[transport://]host[:port]
。
例如,要在連接埠1161
上使用tcp
抓取設備,URL 將類似於 http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161。
請注意,由於:
和/
字符,應該對target
使用 URL 編碼。 Prometheus 會自動對查詢參數進行編碼,無需在 Prometheus 設定檔中手動編碼。
有關導出器本身操作的指標可在端點 http://localhost:9116/metrics 上取得。
可選的snmp_context
參數,如下所示:http://localhost:9116/snmp context_name
auth=my_secure_v3&module=ddwrt&target snmp.yml
192.0.0.8&snmp_context=vrf-mgmt URL 中的snmp_context
參數將覆寫文件中的參數。
多模組功能可讓您指定多個模組,從而能夠在一次抓取中從多個模組檢索資訊。可以使用 snmp-exporter 選項--snmp.module-concurrency
指定並發度(預設值為 1)。
注意:此實作不會對不同模組之間的遍歷執行任何重複資料刪除。
有兩種方法可以指定多個模組。您可以用逗號分隔它們或定義多個 params_module。 URL 看起來像這樣:
對於逗號分隔:
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
對於多個 params_module:
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
預設設定檔名為snmp.yml
,不應手動編輯。如果您需要更改它,請參閱生成配置。
預設的snmp.yml
檔案涵蓋了使用 SNMP v2 GETBULK 運行的各種常見硬體。
--config.file
參數可以多次使用以載入多個檔案。它還支援 glob 檔案名稱匹配,例如snmp*.yml
。
--config.expand-environment-variables
參數允許將環境變數傳遞到設定檔的某些欄位。支援 auths 部分中的username
、 password
和priv_password
欄位。預設為禁用。
重複的module
或auth
條目將被視為無效且無法載入。
URL 參數target
、 auth
和module
可以透過重新標記來控制。
設定範例:
scrape_configs :
- job_name : ' snmp '
static_configs :
- targets :
- 192.168.1.2 # SNMP device.
- switch.local # SNMP device.
- tcp://192.168.1.3:1161 # SNMP device using TCP transport and custom port.
metrics_path : /snmp
params :
auth : [public_v2]
module : [if_mib]
relabel_configs :
- source_labels : [__address__]
target_label : __param_target
- source_labels : [__param_target]
target_label : instance
- target_label : __address__
replacement : 127.0.0.1:9116 # The SNMP exporter's real hostname:port.
# Global exporter-level metrics
- job_name : ' snmp_exporter '
static_configs :
- targets : ['localhost:9116']
您可以透過您選擇的環境變數以以下格式傳遞username
、 password
和priv_password
。如果環境中存在變量,則會動態解析它們,否則設定檔中的字串將按原樣傳遞。
這需要設定--config.expand-environment-variables
標誌。
auths :
example_with_envs :
community : mysecret
security_level : SomethingReadOnly
username : ${ARISTA_USERNAME}
password : ${ARISTA_PASSWORD}
auth_protocol : SHA256
priv_protocol : AES
priv_password : ${ARISTA_PRIV_PASSWORD}
與 blackbox_exporter 類似, snmp_exporter
旨在在一些中央計算機上運行,並且可以被視為“Prometheus 代理”。
SNMP 導出器支援 TLS 和基本驗證。這可以更好地控制各種 HTTP 端點。
若要使用 TLS 和/或基本驗證,您需要使用--web.config.file
參數傳遞設定檔。文件的格式在匯出工具包儲存庫中進行了描述。
請注意,TLS 和基本驗證設定會影響所有 HTTP 端點:用於抓取的 /metrics、用於抓取 SNMP 裝置的 /snmp 以及 Web UI。
我們的預設配置應該涵蓋大多數用例。如果您需要從 MIB 產生自己的配置,可以使用生成器。
如果您需要自訂遍歷哪些物件或使用非公共 MIB,請使用生成器。
為了為較大的 Counter64 值提供準確的計數器,導出器將自動每隔 2^53 換行該值,以避免 64 位元浮點舍入。普羅米修斯會為您優雅地處理這個問題,您不會注意到任何負面影響。
如果需要對非 Prometheus 系統停用此功能,請使用命令列標誌--no-snmp.wrap-large-counters
。
開始使用這一切可能是不透明的,但根據我們自己的經驗,snmp_exporter 確實是與 SNMP 互動的最佳方式。為了讓其他人更容易,請考慮將您的配置回饋給我們。 snmp.yml
配置應附帶生成器配置。對於您的儀表板、警報和記錄規則,請考慮將它們貢獻到 https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin。