Cần có kiến thức cơ bản về docker như image, container docker-compose, volumes, port, service,... và nắm được file mib, snmp, lệnh linux căn bản
OS: Centos 8
- Cài đặt Prometheus và Grafana
- Cài đặt SNMP Exporter (Prometheus) để giám sát các thiết bị mạng
- Cài đặt Alert Manager (Prometheus) để gửi mail khi có cảnh báo
1. Tổng quan
Các thiết bị mạng sẽ bắn ra các gói tin snmp.
Prometheus Server sử dụng Snmp Exporter để thu thập metrics qua các gói tin snmp nhận được, sau đó đẩy qua Grafana để hiển thị.
Network Device => SNMP Exporter => Prometheus Server => Grafana
Snmp Exporter là mã nguồn mở, dùng để cung cấp các gói SNMP theo định dạng Prometheus Server có thể hiểu được. SNMP Exporter sử dụng file snmp.yml để làm việc. Theo như SNMP Exporter thì không nên tạo hay chỉnh sửa file này bằng tay, mà phải dùng SNMP Exporter Generator để xuất ra. Để sử dụng SNMP Exporter Generator thì cần phải định nghĩa file generator.yml.
2. SNMP Generator
Pull image
docker pull snmp-generator
Tạo một thư mục nào đó (trong ví dụ này là /etc/snmp_exporter), rồi tạo file generator.yml và 1 thư mục mibs. Thư mục mibs này sẽ chứa các file mib để SNMP Generator sử dụng.
Điền nội dung vào file generator.yml. Ví dụ dưới đây sử dụng snmp version 2, cho thiết bị Cisco. Phần Community phải để ý chỉnh sửa.
modules:
########### Cisco. Module name là cisco
cisco:
# walk: [sysUpTime, interfaces, ifXTable]
walk:
- 1.3.6.1.2.1.2.2.1.1
- 1.3.6.1.2.1.2.2.1.2
- 1.3.6.1.2.1.2.2.1.10
- 1.3.6.1.2.1.2.2.1.13
- 1.3.6.1.2.1.2.2.1.14
- 1.3.6.1.2.1.2.2.1.16
- 1.3.6.1.2.1.2.2.1.19
- 1.3.6.1.2.1.2.2.1.2
- 1.3.6.1.2.1.2.2.1.20
- 1.3.6.1.2.1.2.2.1.5
- 1.3.6.1.2.1.2.2.1.7
- 1.3.6.1.2.1.2.2.1.8
- 1.3.6.1.2.1.31.1.1.1.1
- 1.3.6.1.2.1.31.1.1.1.18
- 1.3.6.1.4.1.9.9.48.1.1.1.5
- 1.3.6.1.4.1.9.9.48.1.1.1.6
- 1.3.6.1.2.1.1.5
lookups:
- source_indexes: [ifIndex]
lookup: ifAlias
- source_indexes: [ifIndex]
lookup: ifDescr
- source_indexes: [ifIndex]
# Use OID to avoid conflict with Netscaler NS-ROOT-MIB.
lookup: 1.3.6.1.2.1.31.1.1.1.1 # ifName
version: 2
max_repetitions: 25
retries: 3
timeout: 10s
auth:
community: dhxd
3. File mibs
Có thể download như trong hướng dẫn trên github của SNMP Exporter, sau đó đưa vào thư mục mibs.
Nếu trong quá trình sinh file snmp.yml bị lỗi, thì có thể làm theo hướng dẫn Building và Running trên github của SNMP Exporter để lấy file mibs khác. (Người viết đã dính lỗi này, cụ thể là snmp generator cannot find oid to walk)
Building
Due to the dynamic dependency on NetSNMP, you must build the generator yourself.
# Debian-based distributions. sudo apt-get install unzip build-essential libsnmp-dev p7zip-full # Debian-based distros # Redhat-based distributions. sudo yum install gcc gcc-g++ make net-snmp net-snmp-utils net-snmp-libs net-snmp-devel # RHEL-based distros go get github.com/prometheus/snmp_exporter/generator cd ${GOPATH-$HOME/go}/src/github.com/prometheus/snmp_exporter/generator go build make mibs
Running
export MIBDIRS=mibs ./generator generate
4, Sinh snmp.yml
docker run -ti -v "${PWD}:/opt/" snmp-generator generate
Nếu chạy thành công sẽ sinh ra file snmp.yml nằm ngang cấp với generator.yml và mibs.
5. prometheus.yml
Cập nhật file với nội dung bên dưới, để scrape được thông tin được SNMP Exporter xuất ra. Cần để ý điền các Target là IP của thiết bị mạng, và Replacement là IP của máy host SNMP Exporter
- job_name: snmp
scrape_interval: 5s
static_configs:
- targets:
- "10.0.0.17"
metrics_path: /snmp
params:
module: [cisco]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.100.27:9116 # địa chỉ IP của máy host
6. docker-compse.yml
Copy file snmp.yml vừa sinh vào thư mục /etc/prometheus-docker/snmp_exporter. SNMP Exporter sẽ sử dụng file này. Sau đó cập nhật file docker-compse để start SNMP Exporter
snmp-exporter:
image: prom/snmp-exporter
user: "0"
volumes:
- /etc/prometheus-docker/snmp_exporter:/etc/snmp_exporter
ports:
- 9116:9116
Sau đó chạy cả stack
docker-compose up -d
Chạy xong thì kiểm tra [IP]:9116, hoặc vào Prometheus Server > Target để kiểm tra. Nếu thành công thì sẽ hiển thị như bên dưới:
7. Grafana
Truy cập https://grafana.com/grafana/dashboards/ và tìm mã dashboard thích hợp.
Nếu không có dashboard nào ưng ý thì có thể tự tùy biến thêm. Trong ví dụ đã tìm được 2 mã 12492, 3159.
Các hình dưới đây minh họa cho việc import dashboard
8. Kết quả
Vào grafana xem dashboard vừa tạo