使用Prometheus进行SNMP监视

文件结构

.
├── docker-compose.yml
├── prometheus
│   └── prometheus.yml
└── snmp-exporter
    ├── generator.yml
    ├── mibs
    │   ├── ACCOUNTING-CONTROL-MIB.my
    │   (省略)
    │   └── XGCP-MIB.my
    └── snmp.yml

docker-compose.yml 的翻译可以是「容器组.yml」。

version: '3'
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - '9090:9090'

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    hostname: grafana
    ports:
      - 3000:3000
    user: "$PID:$GID"
    volumes:
      - ./grafana:/var/lib/grafana

  snmp-expoter:
    image: prom/snmp-exporter
    container_name: snmp-exporter
    ports:
      - '9116:9116'
    volumes:
      - './snmp-exporter/snmp.yml:/etc/snmp_exporter/snmp.yml'

生成用于SNMP的文件

由于笔者的环境是Ubuntu,所以需要下载MIB文件。

apt -y update
apt -y install snmp snmp-mibs-downloader
download-mibs

从这里开始,可以参考所需的MIB的OID:
https://qiita.com/Mabuchin/items/d435c0afb4f0ca17ad25

主机信息管理数据库(SNMPv2-MIB)

OIDMIB説明1.3.6.1.2.1.1.5.0sysName機器のホスト名1.3.6.1.2.1.1.1.0sysDescr機器に関する説明(機種情報やOSバージョン等)1.3.6.1.2.1.1.6.0sysLocationsnmp locationで登録されている文字列

接口管理信息库(IF-MIB)

OIDMIB説明1.3.6.1.2.1.2.1.0ifNumber機器に存在するInterfaceの数(Loopback等の論理も含む)1.3.6.1.2.1.2.2.1.1ifIndexInterfaceのifIndexの番号(snmpwalkで一覧確認)1.3.6.1.2.1.2.2.1.2.(ifIndex)ifDescrインタフェース名(Eth0/0等)1.3.6.1.2.1.31.1.1.1.18.(ifIndex)ififAliasインタフェースのDescription1.3.6.1.2.1.2.2.1.7.(ifIndex)ifAdminStatus論理的なインタフェースの状態(1:up 2:down)1.3.6.1.2.1.2.2.1.8.(ifIndex)ifOperStatus物理的なインタフェースの状態(1:up 2:down)1.3.6.1.2.1.2.2.1.4.(ifIndex)ifMtuインタフェースのMTU値1.3.6.1.2.1.2.2.1.5.(ifIndex)ifSpeedインタフェースの帯域(~~bps)1.3.6.1.2.1.31.1.1.1.15.(ifIndex)ifHighSpeedインタフェースの帯域(~~Mbps)1.3.6.1.2.1.2.2.1.10.(ifIndex)ifInOctetsインタフェースで受信したパケットの総バイト数(32bitカウンタ)1.3.6.1.2.1.2.2.1.16.(ifIndex)ifOutOctetsインタフェースで送信したパケットの総バイト数(32bitカウンタ)1.3.6.1.2.1.31.1.1.1.6.(ifIndex)ifHCInOctetsインタフェースで受信したパケットの総バイト数(64bitカウンタ こちらを推奨)1.3.6.1.2.1.31.1.1.1.10.(ifIndex)ifHCOutOctetsインタフェースで送信したパケットの総バイト数(64bitカウンタ こちらを推奨)1.3.6.1.2.1.31.1.1.1.7.(ifIndex)ifHCInUcastPktsインタフェースで受信したUnicastパケットの総数1.3.6.1.2.1.31.1.1.1.11.(ifIndex)ifHCOutUcastPktsインタフェースで送信したUnicastパケットの総数1.3.6.1.2.1.31.1.1.1.8.(ifIndex)ifHCInMulticastPktsインタフェースで受信したMulticastパケットの総数1.3.6.1.2.1.31.1.1.1.12.(ifIndex)ifHCOutMulticastPktsインタフェースで送信した総Unicastパケット数1.3.6.1.2.1.31.1.1.1.9.(ifIndex)ifHCInBroadcastPktsインタフェースで受信したBroadcastパケットの総数1.3.6.1.2.1.31.1.1.1.13.(ifIndex)ifHCOutBroadcastPktsインタフェースで送信したBroadcastパケットの総数1.3.6.1.2.1.2.2.1.13.(ifIndex)ifInDiscards破棄した受信パケットの総数1.3.6.1.2.1.2.2.1.19.(ifIndex)ifOutDiscards破棄した送信パケットの総数1.3.6.1.2.1.2.2.1.14.(ifIndex)ifInErrors受信したパケットのエラー総数1.3.6.1.2.1.2.2.1.20.(ifIndex)ifOutErrors送信したパケットのエラー総数1.3.6.1.2.1.2.2.1.14.(ifIndex)ifInUnknownProtos受信したパケットのうちプロトコルが不明で破棄したパケット(送信は無し)

通信系的管理信息库(IP-MIB)

OIDMIB説明1.3.6.1.2.1.4.3.0ipInReceives受信したパケットの総数1.3.6.1.2.1.4.4.0ipInHdrErrorsヘッダのエラーにより破棄した受信パケットの総数1.3.6.1.2.1.4.5.0ipInAddrErrors無効なIPアドレスで破棄した受信パケットの総数1.3.6.1.2.1.4.12.0ipOutNoRoutes経路が存在しないため破棄した送信パケットの総数1.3.6.1.2.1.4.8.0ipInDiscards破棄した受信パケットの総数1.3.6.1.2.1.4.11.0ipOutDiscards破棄した送信パケットの総数1.3.6.1.2.1.4.9.0ipInDeliversフォワードしたパケットの総数(32bitなのであまり信用できません)1.3.6.1.2.1.4.14.0ipReasmReqdsIP Fragmentによって分割された、連結する必要のあるパケット総数1.3.6.1.2.1.4.15.0ipReasmOKsIP Fragmentから再構成に成功したパケットの総数1.3.6.1.2.1.4.16.0ipReasmFailsIP Fragmentから再構成に失敗したパケットの総数1.3.6.1.2.1.4.19.0ipFragCreates機器自体がフラグメントを実施したパケットの総数1.3.6.1.2.1.4.34.1.3.1.4.(IPv4Addr)ipAddressIfIndex.ipv4IPv4からIFindex値を算出1.3.6.1.2.1.4.34.1.3.2.16.(IPv6Addr)ipAddressIfIndex.ipv6IPv6からIFindex値を算出

创建 generator.yml

modules:
  snmpnet_basic:                # モジュール名(任意)
    walk:                       # 取得するOIDリスト
      - ifNumber
      - ifDescr
      - ifOperStatus
      - ifSpeed
    version: 2
    max_repetitions: 60
    retries: 3
    timeout: 60s
    auth:
      community: communityname  # コミュニティ名

把MIBS复制过来

cp /usr/share/snmp/mibs/ietf/* ./mibs
cp /usr/share/snmp/mibs/iana/* ./mibs
cp /usr/share/snmp/mibs/* ./mibs

请执行以下操作

$ docker run -it -v "${PWD}:/opt/" prom/snmp-generator generate

生成的snmp.yml

snmpnet_basic:
  walk:
  - 1.3.6.1.2.1.2.2.1.2
  - 1.3.6.1.2.1.2.2.1.5
  - 1.3.6.1.2.1.2.2.1.8
  get:
  - 1.3.6.1.2.1.2.1.0
  metrics:
  - name: ifNumber
    oid: 1.3.6.1.2.1.2.1
    type: gauge
    help: The number of network interfaces (regardless of their current state) present
      on this system. - 1.3.6.1.2.1.2.1
  - name: ifDescr
    oid: 1.3.6.1.2.1.2.2.1.2
    type: DisplayString
    help: A textual string containing information about the interface - 1.3.6.1.2.1.2.2.1.2
    indexes:
    - labelname: ifIndex
      type: gauge
  - name: ifSpeed
    oid: 1.3.6.1.2.1.2.2.1.5
    type: gauge
    help: An estimate of the interface's current bandwidth in bits per second - 1.3.6.1.2.1.2.2.1.5
    indexes:
    - labelname: ifIndex
      type: gauge
  - name: ifOperStatus
    oid: 1.3.6.1.2.1.2.2.1.8
    type: gauge
    help: The current operational state of the interface - 1.3.6.1.2.1.2.2.1.8
    indexes:
    - labelname: ifIndex
      type: gauge
    enum_values:
      1: up
      2: down
      3: testing
      4: unknown
      5: dormant
      6: notPresent
      7: lowerLayerDown
  version: 2
  max_repetitions: 60
  retries: 3
  timeout: 1m0s
  auth:
    community: communityname

创建prometheus.yml文件

global:
  scrape_interval: 15s # デフォルトの監視対象にpullする間隔
  external_labels: # 外部と通信するときのラベル
    monitor: 'codelab-monitor'

scrape_configs: # 監視対象ごとの設定
  - job_name: 'prometheus' # Prometheus自身の監視
    scrape_interval: 5s # デフォルトの間隔を上書き
    static_configs:
      - targets: ['prometheus:9090']


###### SNMP
  - job_name: 'cisco_ncs_snmp'
    static_configs:
      - targets: ['10.254.0.1']

    metrics_path: /snmp
    params:
      module: ['snmpnet_basic']   #先ほど設定したモジュール名
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: snmp-exporter:9116

Grafana的配置

image-4.png

文献引用

    • https://amemo.hatenablog.jp/entry/2018/07/20/212116

 

    • https://qiita.com/Mabuchin/items/d435c0afb4f0ca17ad25

 

    • https://hogem.hatenablog.com/entry/20100622/1277215889

 

    • https://qiita.com/gzock/items/0794898cd3ed68350e9b

 

    • https://techstep.hatenablog.com/entry/2019/01/13/190707

 

    • https://amateur-engineer-blog.com/getting-started-prometheus/#toc5

 

    https://www.zabbix.com/documentation/6.0/jp/manual/config/items/itemtypes/snmp/mibs
广告
将在 10 秒后关闭
bannerAds