SNMP 导出器 (prometheus) + 扩展 OID

SNMP Exporter (prometheus) + Extend OID

我是 Prometheus 的新手,我正在尝试监视我使用 snmp_exporter 创建的一些扩展 OID,但它没有按预期工作。

我的脚本只执行 "echo $VALUE"(值是整数或字符串)。

我有这个 snmpd.conf :

extend value-return-test /usr/local/bin/script.sh

我生成了他的 OID :

snmpwalk -v2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendResult.\"value-return-test\" -On

现在我可以将所有 snmp 扩展 link 到我的配置中:

snmpwalk -v2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendObjects |grep value-return-test

现在,这是我的普罗米修斯配置 prometheus.yml :

global:
  scrape_interval: 5s

  - job_name: 'snmp'
    metrics_path: /snmp
    params:
      module: [tests]
    static_configs:
      - targets:
        - 127.0.0.1  # SNMP device - add your IPs here
    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  # SNMP exporter.

和我的 snmp.yaml :

tests:
  walk:
  - 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.1
  - 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.2
  metrics:
  - name: snmp_test1
    oid: 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.1
    type: DisplayString
    indexes:
    - labelname: ifIndex
      type: Integer32
  - name: snmp_test2
    oid: 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.2
    type: DisplayString
    indexes:
    - labelname: ifIndex
      type: Integer32

使用该配置我无法在页面上获取我的值 http://localhost:9116/snmp?target=127.0.0.1&module=tests :

# HELP snmp_scrape_duration_seconds Total SNMP time scrape took (walk and processing).
# TYPE snmp_scrape_duration_seconds gauge
snmp_scrape_duration_seconds 0.004676028
# HELP snmp_scrape_pdus_returned PDUs returned from walk.
# TYPE snmp_scrape_pdus_returned gauge
snmp_scrape_pdus_returned 0
# HELP snmp_scrape_walk_duration_seconds Time SNMP walk/bulkwalk took.
# TYPE snmp_scrape_walk_duration_seconds gauge
snmp_scrape_walk_duration_seconds 0.004477656

但是,如果我将配置放入 if_mib 之类的其他块中,我可以获取值,但它们放在了错误的位置:

如您所见,我得到的值是“1”而不是“6”。

我也试过 snmp 导出器生成器,但我无法构建它:

$ go build
# github.com/prometheus/snmp_exporter/generator
./net_snmp.go:6:38: fatal error: net-snmp/net-snmp-config.h: No such file or directory
compilation terminated.

感谢您的帮助

如果您能够将 snmpd.conf 更改为 node exporter,则意味着您对机器有足够的控制权 运行。我建议使用节点导出器的文本文件收集器来公开这些数据,而不是花时间弄清楚 SNMP 和 MIB 的工作原理。

一般来说,您应该尽可能使用 Node/WMI 导出器而不是使用 SNMP。

使用 get 参数而不是 walk 对我有用。

tests:
  get:
  - 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.1
  - 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.2
  metrics:
  - name: snmp_test1
    oid: 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.1
    type: DisplayString
    indexes:
    - labelname: ifIndex
      type: Integer32
  - name: snmp_test2
    oid: 1.3.6.1.4.1.8072.1.3.2.4.1.2.23.109.97.105.108.45.113.117.101.117.101.45.115.101.110.100.105.110.103.45.114.97.116.101.2
    type: DisplayString
    indexes:
    - labelname: ifIndex
      type: Integer32