Bài viết hướng dẫn quy trình giám sát và quản lý thiết bị mạng như Switch, Router, Firewall thông qua snmp_exporter, Prometheus và Grafana.
Cài đặt snmp_exporter trên Ubuntu.
Các bước thực hiện:
Để snmp_exporter hoạt động được, cần phải file snmp.yml. Với snmp_exporter nó cung cấp cho chúng ta 1 tool để generate ra file snmp.yml. Nội dung trong file snmp.yml này chính là các tham số walk và oid của mibs.
Trước tiên cần cài đặt các gói hỗ trợ cho việc build SNMP Generator:
sudo apt-get install build-essential -y
sudo apt-get install libevent-dev -y
sudo apt-get install libncurses5-dev -y
sudo apt install make-guile -y
sudo apt install make -y
sudo apt install libsnmp-dev -y
sudo apt-get install unzip -y
Cài đặt GoLang, truy cập vào https://go.dev/dl/ để lựa chọn phiên bản cài đặt.
wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
Giải nén file vừa tải về:
tar -xvzf go*
Di chuyển thư mục go vào /usr/local:
sudo mv go /usr/local
Tạo biến môi trường:
sudo nano ~/.bashrc
Thêm đoạn sau vào cuối file:
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
Áp dụng biến môi trường vừa tạo:
source ~/.bashrc
Kiểm tra version GoLang:
go version
Kết quả như sau:
Kiểm tra biến môi trường của GoLang:
go env
Tạo thư mục github.com/prometheus/
trong thư mục src
trong đường dẫn ${GOPATH-$HOME/go}
(đường dẫn gốc cho mã nguồn Go). Tùy thuộc vào giá trị của biến môi trường $GOPATH
hoặc $HOME/go
, thư mục được tạo sẽ nằm trong một trong hai địa chỉ:
mkdir -p ${GOPATH-$HOME/go}/src/github.com/prometheus/
Di chuyển đến thư mục vừa tạo:
cd ${GOPATH-$HOME/go}/src/github.com/prometheus/
Clone mã nguồn dự án snmp_exporter
từ kho lưu trữ github của Prometheus vào thư mục hiện tại:
git clone https://github.com/prometheus/snmp_exporter.git
Di chuyển đến thư mục generator trong snmp_exporter:
cd ${GOPATH-$HOME/go}/src/github.com/prometheus/snmp_exporter/generator
Tải về các phụ thuộc mới nhất và cập nhật file go.sum, đồng thời loại bỏ các phụ thuộc không sử dụng:
go mod tidy
Sử dụng sed
để sửa đổi file Makefile
trong thư mục generator
. Nó thay thế tất cả các trường hợp của --no-progress-meter
bằng --silent
, để thay đổi cách cURL hiển thị tiến trình tải xuống:
sed -i "s/--no-progress-meter/--silent/" ${GOPATH-$HOME/go}/src/github.com/prometheus/snmp_exporter/generator/Makefile
Biên dịch mã nguồn Go trong thư mục hiện tại thành một file thực thi có thể chạy.
go build
Chạy quy trình make
trong file Makefile
và thực hiện các tác vụ liên quan đến tải xuống và xử lý các file MIB (Management Information Base).
make mibs
Đối với các loại Mibs không có sẵn, chúng ta cần download từ hãng về và bỏ vào thư mục chứa Mibs:
${GOPATH-$HOME/go}/src/github.com/prometheus/snmp_exporter/generator/mibs
Đối với các thiết bị mạng thông thường như Switch, mình sẽ sử dụng các OIDs mặc định để giám sát các thông số của thông tin thiết bị, thời gian uptime, thông tin về interface, ví dụ như: sysDescr, sysUpTime, ifOperStatus, ifName, ifInOctets, IfOutOctets, ifAlias,…
Trước khi import các OIDs này vào file generator.yml, các bạn cần xác định thiết bị có thông tin về các OIDs này không
Sử dụng snmpwalk để kiểm tra, ví dụ thiết bị của bạn đang bật SNMP v2 có community là: public (khuyến nghị không để mặc định là public):
Cài đặt snmlwalk:
sudo apt install snmp
Ở đây mình đã chỉnh sửa cấu hình file /etc/snmp/snmp.conf, thêm mibs +ALL vào cuối file, mục đích để snmp load tất cả các Mibs có sẵn trong hệ thống.
Sử dụng lệnh snmpwalk để kiểm tra OID của thiết bị
snmpwalk -v2c -c public 10.0.110.10 sysUpTime
Tiến hành cấu hình file generator.yml
sudo nano ${GOPATH-$HOME/go}/src/github.com/prometheus/snmp_exporter/generator/generator.yml
Bạn nên xóa hết các thông số hiện tại, chỉ để lại cấu hình giám sát các modules, OIDs cần thiết:
modules:
switch:
walk:
- sysDescr
- sysUpTime
- ifOperStatus
- ifInOctets
- ifOutOctets
auths:
public_v1:
version: 1
public_v2:
version: 2
community: public
Tiếp tục export mibs và generate ra file snmp.yml
export MIBDIRS=mibs
./generator generate
Nếu hệ thống báo như bên dưới là đã tạo file snmp.yml thành công:
Cài đặt SNMP Exporter:
Download phiên bản mới nhất từ GitHub: https://github.com/prometheus/snmp_exporter/releases/
wget https://github.com/prometheus/snmp_exporter/releases/download/v0.26.0/snmp_exporter-0.26.0.linux-amd64.tar.gz
Tiến hành giải nén:
tar -xvzf snmp_exporter-0.26.0.linux-amd64.tar.gz
Di chuyển thư mục đã giải nén vào /usr/local/ và đổi tên nó thành snmp_exporter
sudo mv snmp_exporter-0.26.0.linux-amd64 /usr/local/snmp_exporter
Copy file snmp.yml vừa tạo đến thư mục /usr/local/snmp_exporter/
sudo cp snmp.yml /usr/local/snmp_exporter/
Tạo file service cho SNMP Exporter.
sudo nano /etc/systemd/system/snmp_exporter.service
Nội dung:
[Unit]
Description=Snmp_exporter
Wants=network-online.target
After=network-online.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/snmp_exporter/snmp_exporter \
--config.file=/usr/local/snmp_exporter/snmp.yml
[Install]
WantedBy=multi-user.target
Reload lại Daemon và Start SNMP Exporter
sudo systemctl daemon-reload
sudo systemctl start snmp_exporter.service
sudo systemctl enable snmp_exporter.service
sudo systemctl status snmp_exporter.service
Truy cập URL snmp_exporter để kiểm tra http://<ipaddr>:9116
Cấu hình Prometheus nhận metrics từ snmp_exporter
sudo nano /etc/prometheus/prometheus.yml
Thêm đoạn cấu hình sau:
- job_name: 'Switch'
static_configs:
- targets:
- 10.0.110.10
labels:
hostname: SwitchHoangITS
device: switch
metrics_path: /snmp
params:
module: [switch]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 10.0.150.121:9116
Restart lại Prometheus
sudo systemctl restart prometheus
sudo systemctl status prometheus
Kiểm tra Prometheus đã nhận target mới:
Dựa vào các Metrics đã có bạn có thể tạo Grafana Dashboard theo nhu cầu: