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
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
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
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)
# 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 hostSau đó chạy lại docker-compose up
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ả