背景
公司有自己的IDC,需要對所有的機器進行監控。爲了採集服務器的度量值,我們在服務器上開通SNMP,然後通過snmp_exporter去抓取數據。
基礎知識:
如果你對SNMP是零基礎,請先閱讀一下參考文章https://my.oschina.net/yjwxh/blog/476454 ,老鳥請自動跳過
數據流:
服務器(SNMP Agent) -> snmp_exporter -> Prometheus
雖然上面的數據流是從底層到上層,但是其實數據拉取的請求是從上至下的,也就是說Prometheus向exporter取數據,exporter再向snmp agent取數據。
基礎組件:
Prometheus
snmp_exporter
net-snmp-utils
步驟:
1. 安裝net-snmp-utils
yum install -y net-snmp-utils
2. 獲取MIB,我這裏是找DELL廠商要的,也可以在下面的github裏面找。這個裏面有很多基礎的MIB
https://github.com/librenms/librenms/tree/master/mibs
3. 下載snmp_exporter
wget https://github.com/prometheus/snmp_exporter/releases/download/v0.15.0/snmp_exporter-0.15.0.linux-amd64.tar.gz
tar -zxvf snmp_exporter-0.15.0.linux-amd64.tar.gz
4. 查看BIM裏面OID對應的名字。(我的MIB文件叫iDRAC-SMIv2.mib)已經上傳到服務器上了
#MIB文件目錄爲 generator/mibs/iDRAC-SMIv2.mib
cd generator
snmptranslate -Tz -m ./mibs/iDRAC-SMIv2.mib
如輸出裏面說有的MIB沒有找到,就到上面的github下載,然後放到mibs目錄中
比如: Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none),直接在github上下載這個文件放入目錄中,再次運行上面的命令,直到輸出下面的內容:
5. 用snmp_exporter generator生成 配置文件
cd generator
vi generator.yml #文件內容在後面
docker run -it -v "${PWD}:/opt/" prom/snmp-generator:master generate
[root@ai-test-k8s01 generator]# docker run -it -v "${PWD}:/opt/" prom/snmp-generator:master generate
level=info ts=2019-11-22T09:05:06.147Z caller=net_snmp.go:142 msg="Loading MIBs" from=mibs
level=warn ts=2019-11-22T09:05:06.457Z caller=main.go:120 msg="NetSNMP reported parse error(s)" errors=12
level=info ts=2019-11-22T09:05:06.800Z caller=main.go:52 msg="Generating config for module" module=dell
level=info ts=2019-11-22T09:05:06.908Z caller=main.go:67 msg="Generated metrics" module=dell metrics=1
level=info ts=2019-11-22T09:05:06.909Z caller=main.go:92 msg="Config written" file=/opt/snmp.yml
generator.yml
modules:
# we need to generate hwCpuDevTable metrics.
# and the module name in the `snmp.yml` will be `dell`.
dell:
walk: [batteryState] #這個batteryState就是在snmptranslate的輸出中查看,這裏我想查看電池狀態
version: 2 #SNMP版本
timeout: 30s #抓取超時時間
auth:
community: "*****" #SNMP配置的密碼
6. 運行snmp_export
cp generator/snmp.yml snmp_exporter-0.15.0.linux-amd64/snmp.yml
cd snmp_exporter-0.15.0.linux-amd64
./snmp_exporter
[root@ai-test-k8s01 snmp_exporter-0.15.0.linux-amd64]# ./snmp_exporter
INFO[0000] Starting snmp exporter (version=0.15.0, branch=HEAD, revision=92a3da4467f8bc6759cf197e7442b8c43e890b13) source="main.go:139"
INFO[0000] Build context (go=go1.11.5, user=root@8c3a7c03d455, date=20190212-13:40:02) source="main.go:140"
INFO[0000] Listening on :9116 source="main.go:226"
7. 通過瀏覽器訪問服務器的9116端口,填寫需要被監控服務器的IP地址
8. 在prometheus裏面添加配置,抓取這個度量值
#vi prometheus.yml
- job_name: 'dell'
scrape_interval: 180s
scrape_timeout: 180s
static_configs:
- targets:
- 10.128.29.1
labels:
adGroup: 'ai-bp'
adUser: '12455'
metrics_path: /snmp
params:
module: [dell]
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
9. reload prometheus配置
curl -X POST 127.0.0.1:9090/-/reload
10. prometheus中查看監控值
參考文檔:
http://devopstarter.info/snmp-exporter-generator-tutorial/