Prometheus監控之SNMP Exporter介紹和資料展現

十畝菠蘿地發表於2023-04-26

由於技術能力有限,文章僅能進行簡要分析和說明,如有不對的地方,請指正,謝謝?。

1 SNMP協議介紹

SNMP協議全稱是:Simple Network Management Protocol,譯為簡單網路管理協議,是作為TCP/IP網路管理標準協議,為不同的裝置提供統一介面,實現了網路裝置之間的統一管理。

SNMP協議分為三個版本:

  1. SNMPv1是最初版本,基於團體名認證,安全性較差,返回報文的錯誤碼較少。
  2. SNMPv2c也採用團體名認證,引入了GetBulk和Inform操作,支援更多的標準錯誤碼資訊和更多的資料型別。
  3. SNMPv3主要在安全性方面進行了增強,提供了基於USM(User Security Module)的認證加密和基於VACM(View-based Access Control Model)的訪問控制。

不管哪個版本,SNMP協議由外部的網路管理系統NMS和執行在被管裝置內部的SNMP Agent、被管物件和管理資訊庫MIB組成:

Prometheus監控之SNMP Exporter介紹和資料展現

MIB資料庫中的OID樹狀儲存結構:樹的節點表示被管理物件,它可以用從根開始的一條路徑唯一地識別,這條路徑就稱為OID,如system的OID為1.3.6.1.2.1.1,interfaces的OID為1.3.6.1.2.1.2

Prometheus監控之SNMP Exporter介紹和資料展現

可以從OID(如system的OID為1.3.6.1.2.1.1,interfaces的OID為1.3.6.1.2.1.2)中獲取到被管理裝置的當前執行狀態。

2 SNMP Exporter介紹

SNMP Exporter是Prometheus的官方Exporter專案之一,可以容器執行或者二進位制執行,專案地址:snmp_exporter。Exporter透過snmp.yml配置檔案,將SNMP Agent的資料暴露在SNMP Exporter中,供Prometheus監控被管理裝置的執行狀態。

例如一個最簡單的snmp.yml配置檔案:

Linux:
  version: 2
  auth:
    community: snmpexport
  walk:
  - 1.3.6.1.4.1.2021.11
  get:
  - 1.3.6.1.2.1.1.3
  metrics:
  - name: sysUpTime
    oid: 1.3.6.1.2.1.1.3
    type: gauge
    help: The time (in hundredths of a second) since the network management portion
      of the system was last re-initialized. - 1.3.6.1.2.1.1.3
  - name: ssCpuUser
    oid: 1.3.6.1.4.1.2021.11.9
    type: gauge
    help: The percentage of CPU time spent processing user-level code, calculated
      over the last minute - 1.3.6.1.4.1.2021.11.9
  - name: ssCpuSystem
    oid: 1.3.6.1.4.1.2021.11.10
    type: gauge
    help: The percentage of CPU time spent processing system-level code, calculated
      over the last minute - 1.3.6.1.4.1.2021.11.10
  - name: ssCpuIdle
    oid: 1.3.6.1.4.1.2021.11.11
    type: gauge
    help: The percentage of processor time spent idle, calculated over the last minute
      - 1.3.6.1.4.1.2021.11.11

這個配置檔案中有一個模組為Linux,SNMP版本為v2c,團體名稱為snmpexporter,監控的OID有:1.3.6.1.4.1.2021.11和1.3.6.1.2.1.1.3,根據OID所在的樹狀級別,採用不同方式的查詢操作(walk或get),被監控的物件有sysUpTime、ssCpuUser、ssCpuSystem、ssCpuIdle

  • walk:實際上是SNMP GETNEXT,從SNMP Agent中獲取一個或多個引數的下一個引數值。
  • get:從SNMP Agent中獲取一個或多個引數值。

實際上還有GetBulk操作(SNMPv1不支援),基於GETNEXT實現,相當於執行多次GetNext,但是SNMP Exporter中不具備該查詢操作。

3 使用SNMP Exporter監控Linux作業系統

被監控裝置作業系統版本:Oracle Linux 7.9,SELinux狀態:Permissive

3.1 監控裝置安裝和配置SNMP

  1. 安裝net-snmp
    yum install -y net-snmp
  2. 配置SNMP團體名稱
    echo 'rocommunity snmpexport 192.168.1.200'>/etc/snmp/snmpd.conf
  3. 重啟snmpd服務
    systemctl restart snmpd
  4. 檢查snmpd服務
    systemctl status snmpd|grep -E "Active"
    輸出結果參考:
    Active: active (running) since Fri 2022-05-06 10:23:56 CST; 2min 4s ago
  5. 防火牆放通snmp服務
    firewall-cmd --permanent --add-service=snmp

    firewall-cmd --add-port=161/udp --permanent

3.2 docker部署SNMP Exporter

  1. docker中下載snmp exporter映象
    docker pull prom/snmp-exporter
  2. 建立snmp.yml配置檔案目錄
    mkdir /home/samroot/exporter/snmp
  3. 手動建立snmp.yml配置檔案,參考《2 SNMP Exporter介紹》章節中的snmp.yml示例檔案
  4. 根據snmp exporter映象建立容器
    docker create --name snmp_to_117 -v /home/samroot/exporter/snmp/:/etc/snmp_exporter/ -p 9116:9116 prom/snmp-exporter
  5. 啟動容器
    docker container start snmp_to_117
  6. 檢查容器執行情況
    docker container ps|grep snmp
    輸出結果參考
    f06810ffa6d6 prom/snmp-exporter "/bin/snmp_exporter …" 8 days ago Up 3 days 0.0.0.0:9116->9116/tcp snmp_to_117
  7. 防火牆放通9116埠
    firewall-cmd --permanent --add-port=9116/tcp

3.3 http訪問snmp exporter,檢視暴露出來的監控資料

  1. 瀏覽器訪問snmp exporter的http埠,輸入被監控裝置的IP地址和模組名稱,點選Submit

Prometheus監控之SNMP Exporter介紹和資料展現

  1. SNMP Exporter已經從被監控裝置的SNMP Agent中獲取到一些裝置的執行狀態

Prometheus監控之SNMP Exporter介紹和資料展現

4 將收集到的資料存到Prometheus中

在Prometheus的配置檔案中新增SNMP Exporter的地址,即可將收集到的資料存到Prometheus中。

  1. 修改prometheus配置檔案prometheus.yml
   # Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
   #採集snmp exporter監控資料
  - job_name: 'snmp'
    static_configs:
      - targets:
        - 192.168.1.117
    metrics_path: /snmp
    params:
      module: [Linux]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.1.200:9116
  1. 使配置檔案生效
    curl -XPOST http://localhost:9090/-/reload
  2. 確認Prometheus能夠正常採集到snmp exporter的資料

Prometheus監控之SNMP Exporter介紹和資料展現

5 配合Grafana實現視覺化

  1. 配置dashboard的的名稱和host變數:

    Prometheus監控之SNMP Exporter介紹和資料展現

    Prometheus監控之SNMP Exporter介紹和資料展現

  2. 新建plane,配置CPU使用率監控

    Prometheus監控之SNMP Exporter介紹和資料展現

  3. 儲存退出 

6 參考文章

什麼是SNMP:https://support.huawei.com/enterprise/zh/doc/EDOC1100087025

SNMP_Exporter:https://github.com/prometheus/snmp_exporter

 

相關文章