背景
公司有自己的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中查看监控值
参考文档: