Loading...

Test thử giám sát thiết bị mạng bằng SNMP từ Prometheus/Grafana sử dụng docker

Để giám sát các thiết bị mạng, các hệ thống khác sẽ dựa vào snmp để thu thập metric. Prometheus cũng không ngoại lệ, nó sử dụng snmp_exporter để thu thập metric trên các thiết bị mạng. Do vậy những gì có hỗ trợ snmp thì prometheus sẽ thu thập metric được. Tuy nhiên prometheus không trực quan nên sử dụng Grafana để hiển thị

Như vậy bài test này sẽ gồm 5 thành phần:

  • Snmp_exporter
  • Prometheus
  • Grafana
  • Thiết bị mạng cần giám sát (đã enable snmp); ở đây là AP Ruckus R700 (192.168.0.11).
  • Máy tính có cài docker; ở đây tôi dùng docker trên windows

Các bước thực hiện

1. Cài docker desktop trên windows 10 (IP: 192.168.0.17) theo guide docker for windows install  với WSL 2 backend

2. Khởi động docker desktop

  Start docker app desktop

3. Pull 3 image: snmp_exporter, prometheus, grafana

Chạy cmd, gõ docker pull prom/snmp-exporter

C:\Users\Tuan>docker pull prom/snmp-exporter

và tương tự

  • docker pull prom/prometheus
  • docker pull grafana/grafana

Kiểm tra 3 image có chưa bằng lệnh: docker image ls

C:\Users\Tuan>docker image ls

REPOSITORY           TAG       IMAGE ID       CREATED        SIZE

grafana/grafana      latest    e511606aee56   4 weeks ago    206MB

prom/prometheus      latest    9dfc442be98c   6 weeks ago    189MB

prom/snmp-exporter   latest    2a81c3a85a13   6 months ago   19.7MB
 
4. Tạo project grafana và docker-compose.yml
 

docker-compose yml

và tạo file docker-compose.yml; với nội dung thí dụ như:

 
version: '3.9'
volumes:

  snmp:

  grafa:

  prome:

  prome-data:

services:

  prometheus:

    image: prom/prometheus

    volumes:

      - prome:/etc/prometheus

      - prome-data:/prometheus

    expose:

      - 9090

    ports:

      - 9090:9090

    depends_on:

      - snmp-exporter


  snmp-exporter:

    image: prom/snmp-exporter

    volumes:

      - snmp:/etc/snmp_exporter

    expose:

      - 9116

    ports:

      - 9116:9116


  grafana:

    image: grafana/grafana

    depends_on:

      - prometheus

    expose:

      - 3000

    ports:

      - 3000:3000

    volumes:

      - grafa:/var/lib/grafana

 
5. Chạy docker-compose bằng lệnh docker-compose up 
 
C:\Users\Tuan\.docker\grafana>docker-compose up

Starting grafana_snmp-exporter_1 ... done

Starting grafana_prometheus_1    ... done

Starting grafana_grafana_1       ... done

Attaching to grafana_snmp-exporter_1, grafana_prometheus_1, grafana_grafana_1

prometheus_1     | level=info ts=2021-08-13T02:21:58.713Z caller=main.go:389 msg="No time or size retention was set so using the default time retention" duration=15d

prometheus_1     | level=info ts=2021-08-13T02:21:58.714Z caller=main.go:443 msg="Starting Prometheus" version="(version=2.28.1, branch=HEAD, revision=b0944590a1cdc5a696869f75f422b107a1)"

prometheus_1     | level=info ts=2021-08-13T02:21:58.714Z caller=main.go:448 build_context="(go=go1.16.5, user=root@2915dd495090, date=20210701-15:20:10)"

prometheus_1     | level=info ts=2021-08-13T02:21:58.714Z caller=main.go:449 host_details="(Linux 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 93b2a752f299 localdomain)"

prometheus_1     | level=info ts=2021-08-13T02:21:58.714Z caller=main.go:450 fd_limits="(soft=1048576, hard=1048576)"

prometheus_1     | level=info ts=2021-08-13T02:21:58.714Z caller=main.go:451 vm_limits="(soft=unlimited, hard=unlimited)
 
Có thể xảy ra lỗi khi khởi tạo container promethues do chưa có file prometheus.yml; lúc đó ta vào volume grafana_prome do docker vừa tạo
Dừng docker compose bằng tổ hợp "Ctrl + C"
 
 
và tạo file prometheus.yml với nội dung cơ bản sau
# my global config

global:

  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).


# Alertmanager configuration

alerting:

  alertmanagers:

  - static_configs:

    - targets:

      # - alertmanager:9093


# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

  # - "first_rules.yml"

  # - "second_rules.yml"


# A scrape configuration containing exactly one endpoint to scrape:

# 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: 'snmp'

    static_configs:

      - targets:

        - 192.168.0.11 # địa chỉ của thiết bị cần giám sát

    metrics_path: /snmp

    params:

      module: [if_mib]

    relabel_configs:

      - source_labels: [__address__]

        target_label: __param_target

      - source_labels: [__param_target]

        target_label: instance

      - target_label: __address__

        replacement: 192.168.0.17:9116 # địa chỉ IP của máy host

Sau đó chạy lại docker-compose up
 
6. Kiểm tra và chạy thử
Kiểm tra thử snmp_exporter đã hoạt động chưa bằng cách dùng trình duyệt gõ http://192.168.0.17:9116 sau đó điền địa chỉ snmp device (192.168.0.11) rồi Submit
 
Test snmp exporter
 
Kiểm tra thử prometheus
 
Test prometheus
 
Khởi chạy Grafana với user/ pass defaut: admin
 
 
Add data source chọn prometheus
 
Add data source
 
Điền địa chỉ của prometheus server và apply/save
 
 
Hiển thị trên Dashboards Grafana

Tạo mới Dashboards hoặc import từ cái có sẵn https://grafana.com/grafana/dashboards về rồi chỉnh sửa cho phù hợp

Kết quả 

Dashboard Grafana


Liên hệThỏa thuận sử dụng | Chính sách bảo mật