Prometheus で SNMP 監視
Prometheus を使って Cisco ルータを SNMP 監視するための手順の備忘録です。
Prometheus / snmp-exporter / snmp-generator それぞれ Docker コンテナを使用します。
ディレクトリ構成
. ├── docker-compose.yml ├── prometheus │ └── prometheus.yml └── snmp-exporter ├── generator.yml ├── mibs │ ├── ACCOUNTING-CONTROL-MIB.my │ (省略) │ └── XGCP-MIB.my └── snmp.yml
prometheus..yml
scrape_configs: - job_name: 'snmp' static_configs: - targets: - 【Router IP Address】 metrics_path: /snmp params: module: [cisco] relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 【snmp-exporter IP Address】:9116
Prometheus と snmp-exporter を同じサーバで動かしているのに、 【snmp-exporter IP Address】 を localhost
にすると動かなかった。
snmp-generator
prom/snmp-generator
コンテナを使って snmp.yml
を作成する。用意するものは generator.yml
と mibs
ディレクトリ。
https://github.com/prometheus/snmp_exporter/tree/master/generator
generator.yml
上記リンクを参考に generator.yml
を作成する。
modules: cisco: # モジュール名(任意) walk: # 取得する OID リスト - sysName - sysUpTime - interfaces version: 2 max_repetitions: 25 retries: 3 timeout: 5s auth: community: public
mibs
ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
から Cisco 用の MIBs を取得して、中身の my ファイルを mibs ディレクトリ配下に格納する。
generate
コンテナの generate
コマンドを実行すると、snmp.yml
が出力される。
$ cd snmp-exporter $ docker run -it -v "${PWD}:/opt/" prom/snmp-generator generate level=info ts=2020-08-18T20:59:39.702Z caller=net_snmp.go:142 msg="Loading MIBs" from=mibs level=warn ts=2020-08-18T20:59:40.642Z caller=main.go:120 msg="NetSNMP reported parse error(s)" errors=510 level=warn ts=2020-08-18T20:59:41.025Z caller=tree.go:83 msg="Can't find augmenting node" augments=tokenRingMLStatsEntry node=tokenRingMLStats2Entry level=warn ts=2020-08-18T20:59:41.025Z caller=tree.go:83 msg="Can't find augmenting node" augments=tokenRingPStatsEntry node=tokenRingPStats2Entry level=warn ts=2020-08-18T20:59:41.028Z caller=tree.go:83 msg="Can't find augmenting node" augments=rptrPortEntry node=ciscoRptrPortEntry level=info ts=2020-08-18T20:59:41.040Z caller=main.go:52 msg="Generating config for module" module=cisco level=info ts=2020-08-18T20:59:41.116Z caller=main.go:67 msg="Generated metrics" module=cisco metrics=25 level=info ts=2020-08-18T20:59:41.118Z caller=main.go:92 msg="Config written" file=/opt/snmp.yml
TODO: parse error の確認
snmp-exporter
https://github.com/prometheus/snmp_exporter
$ docker run -d --name snmp-exporter \ -p 9116:9116 \ -v "/home/nnstt1/snmp-exporter/snmp.yml:/etc/snmp_exporter/snmp.yml" \ prom/snmp-exporter