Bài viết này mình sẽ hướng dẫn quy trình sử dụng SNMP (Simple Network Management Protocol) để giám sát và quản lý các thiết bị mạng như switch, router, firewall và cách hiển thị dữ liệu từ các thiết bị này trên Grafana thông qua snmp_exporter
.
- SNMP là gì?: SNMP là viết tắt của Simple Network Management Protocol, là một giao thức tiêu chuẩn được sử dụng để thu thập thông tin từ các thiết bị mạng và tổ chức thông tin đó để con người có thể đọc và hiểu. Giao thức này cho phép đọc và ghi dữ liệu từ/thành các thiết bị mạng. SNMP dựa trên MIBs (Management Information Base), là các đối tượng mô tả các loại thông tin có thể đọc từ thiết bị hoặc ghi vào thiết bị.
- snmp_exporter là gì?:
snmp_exporter
là một ứng dụng/đối tượng được sử dụng để thu thập thông tin từ các thiết bị mạng sử dụng SNMP và đưa thông tin đó cho Prometheus, một hệ thống giám sát. - Cấu hình
snmp_exporter
:- Để cấu hình
snmp_exporter
, bạn cần ba thành phần chính:- Thứ nhất, bạn cần một máy chủ Prometheus hoặc Grafana Agent để giám sát các thiết bị qua
snmp_exporter
. - Thứ hai, nếu bạn không sử dụng cấu hình có sẵn đi kèm với
snmp_exporter
, bạn cần một công cụ gọi là “generator” để tạo ra file cấu hìnhsnmp.yml
sử dụng thông tin từ MIBs. Generator này sử dụng NetSNMP để phân tích cú pháp MIBs và tạo file cấu hình. - Thứ ba, bạn cần
snmp_exporter
thực hiện việc lấy dữ liệu qua SNMP từ các thiết bị mạng và đưa kết quả cho Prometheus.
- Thứ nhất, bạn cần một máy chủ Prometheus hoặc Grafana Agent để giám sát các thiết bị qua
- Để cấu hình
- Cấu hình generator: Generator quan trọng vì nó cho phép bạn chỉ định xác thực, đối tượng được lấy, hoặc ánh xạ đối tượng đó vào các bộ nhãn (label) trong Prometheus. Bạn không nên chỉnh sửa file cấu hình
snmp.yml
thủ công mà thay vào đó sử dụng generator. - Làm thế nào để cấu hình generator:
- Trước hết, SNMP cần được kích hoạt trên các thiết bị bạn muốn giám sát. Hãy tham khảo tài liệu của nhà sản xuất về cách kích hoạt SNMP trên từng thiết bị cụ thể.
- Lưu ý rằng bạn cần lưu các MIBs của nhà sản xuất ở đúng đường dẫn:
./snmp_exporter/generator/mibs
. - Chạy lệnh
snmpwalk
trên thiết bị mục tiêu để lấy thông tin. - Ví dụ:
snmpwalk -v2c -c public 192.168.2.1 1.3.6.1
. Lệnh này sử dụng SNMP version 2c, chuỗi community là “public” (khuyến khích không nên để tên public mặc định này) và địa chỉ IP của thiết bị. OID (Object Identifier) gốc được chỉ định cuối cùng. Nếu được hỗ trợ trên thiết bị của bạn và bạn muốn đảm bảo tính bảo mật nâng cao, SNMP v3 là sự lựa chọn được khuyến nghị.
- Số lượng OIDs:
- Khi chạy lệnh
snmpwalk
, bạn sẽ thấy có hơn 5.000 OIDs xuất hiện. Điều này có thể làm cho quá trình thu thập dữ liệu SNMP trở nên rất phức tạp và không cần thiết. Bạn cần lựa chọn các OIDs cụ thể mà bạn thực sự cần dựa trên mục đích sử dụng của bạn.
- Khi chạy lệnh
Bạn cần xác định cụ thể thông tin cần thu thập, trong ví dụ này là sử dụng các MIB (Management Information Base) liên quan đến interface (if_mib) và các MIB đặc thù của nhà sản xuất thiết bị.
Dưới đây là một ví dụ về file cấu hình generator.yml
mà bạn có thể sử dụng để tạo ra các file cấu hình snmp.yml
để thu thập thông tin từ các thiết bị mạng. Trong ví dụ này:
- SNMP version được đặt thành SNMP v2.
- Community string được đặt là “public” (lưu ý rằng “public” thường là giá trị mặc định, nhưng không được khuyến nghị dùng giá trị này do không an toàn).
- MIBs được chỉ định cho việc thu thập thông tin từ giao diện mạng (if_mib) và các MIB đặc thù của nhà sản xuất.
Dưới đây là ví dụ về nội dung file generator.yml
:
modules:
# Default IF-MIB interfaces table with ifIndex.
if_mib_if_name:
walk: [sysUpTime, interfaces, ifXTable]
lookups:
- source_indexes: [ifIndex]
lookup: ifAlias
- source_indexes: [ifIndex]
# Uis OID to avoid conflict with PaloAlto PAN-COMMON-MIB.
lookup: 1.3.6.1.2.1.2.2.1.2 # 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
overrides:
ifAlias:
ignore: true # Lookup metric
ifDescr:
ignore: true # Lookup metric
ifName:
ignore: true # Lookup metric
ifType:
type: EnumAsInfo
auth:
community: public
ubiquiti_unifi:
walk:
- sysUpTime
- interfaces
- ifXTable
- 1.3.6.1.4.1.41112.1.6 # ubntUniFi
overrides:
ifType:
type: EnumAsInfo
auth:
community: public
Cách cấu hình và chạy snmp-generator
và snmp_exporter
để thu thập và xuất dữ liệu từ các thiết bị mạng sử dụng SNMP.
Xây dựng snmp-generator
hoặc chạy trong Docker.
Bạn có thể xây dựng snmp-generator
từ mã nguồn hoặc chạy nó trong Docker. Để chạy trong Docker, bạn có thể sử dụng lệnh sau:
docker build -t snmp-generator .
Sau đó, bạn cần tạo file cấu hình generator.yml
trong thư mục ./snmp_exporter/generator.yml
hoặc sử dụng ví dụ được cung cấp trong bài viết.
snmp-generator
sử dụng NetSNMP để phân tích MIBs và tạo cấu hình cho snmp_exporter
, vì vậy bạn cần đảm bảo rằng các MIBs được đặt ở đúng đường dẫn, ví dụ: ./snmp_exporter/generator/mibs
.
Sau khi đã tạo cấu hình generator.yml
, bạn có thể chạy lệnh sau để tạo cấu hình cho snmp_exporter
:
docker run -ti -v "${PWD}:/opt/" snmp-generator generate
Kết quả của lệnh này sẽ xuất hiện trên màn hình và nó sẽ hiển thị quá trình tạo cấu hình.
Cấu hình snmp_exporter
.
Nếu bạn đã tải xuống và giải nén snmp_exporter
, hãy chắc chắn rằng bạn đã xóa hoặc đổi tên file snmp.yml
mặc định được đi kèm.
Sao chép file cấu hình snmp.yml
mới được tạo bởi snmp-generator
từ thư mục ./snmp_exporter/generator/
vào thư mục snmp_exporter
.
Bây giờ, bạn có thể bắt đầu dịch vụ snmp_exporter
bằng lệnh sau:
./snmp_exporter
Kiểm tra hoạt động của snmp_exporter
.
Bạn có thể kiểm tra xem snmp_exporter
có hoạt động bằng cách truy cập URL của máy chủ. Ví dụ: http://192.168.2.213:9116/
. Điều này sẽ hiển thị giao diện web của snmp_exporter
và cho bạn biết nó đã bắt đầu hoạt động và sẵn sàng thu thập dữ liệu từ các thiết bị mạng sử dụng SNMP.
Khi bạn hoàn thành các bước này, bạn đã cấu hình và triển khai snmp-generator
và snmp_exporter
, và bạn có thể bắt đầu giám sát và thu thập dữ liệu từ các thiết bị mạng của bạn thông qua snmp_exporter
.
Cách cấu hình Prometheus để thu thập dữ liệu từ snmp_exporter
và cách tạo dashboard Grafana để hiển thị thông tin thu thập được từ các thiết bị mạng sử dụng SNMP.
Dưới đây là các bước cụ thể:
Cấu hình prometheus.yml
.
Bạn cần thêm cấu hình cho snmp_exporter
vào file cấu hình Prometheus của bạn (thường là prometheus.yml
).
Đây là một ví dụ về cách thêm target SNMP vào file cấu hình Prometheus.
- job_name: 'network'
static_configs:
- targets: ['192.168.2.1']
labels:
job: 'gateway'
- targets: ['192.168.2.90']
labels:
job: 'downstairsap'
- targets: ['192.168.2.89']
labels:
job: 'upstairsap'
- targets: ['192.168.2.12']
labels:
job: 'switch'
metrics_path: /snmp
params:
module: [if_mib_ifname]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.2.213:9116 # Địa chỉ của SNMP exporter:port.
Trong ví dụ này, bạn đang thêm target SNMP từ các thiết bị mạng với các địa chỉ IP khác nhau và đặt các nhãn (labels) cho từng target để xác định công việc (job) của nó. Đảm bảo rằng đường dẫn metrics_path
và các cấu hình khác phù hợp với cài đặt của bạn.
Tạo Grafana Dashboard.
Bạn có thể tạo dashboard Grafana để hiển thị thông tin thu thập từ snmp_exporter
. Ví dụ về dashboard được tạo bằng dữ liệu thu thập từ snmp_exporter
được đưa ra trong bài viết, nhưng không có mã cụ thể về cách tạo nó.
Để tạo dashboard Grafana, bạn cần đăng nhập vào Grafana, chọn tạo bảng mới và cấu hình nguồn dữ liệu (data source) để liên kết với Prometheus. Sau đó, bạn có thể tạo truy vấn Prometheus và thiết kế dashboard để hiển thị thông tin mạng của bạn theo cách tùy chỉnh.
Khi bạn hoàn thành các bước này, bạn sẽ có Prometheus đang thu thập dữ liệu từ snmp_exporter
và một dashboard Grafana để hiển thị thông tin thu thập được từ các thiết bị mạng của bạn một cách trực quan.
Kết luận.
Bài viết này đã giới thiệu về cách giám sát các thiết bị mạng trong Grafana bằng cách sử dụng snmp_exporter
và generator
. Hy vọng rằng bài viết đã giúp bạn hiểu rõ hơn về cách sử dụng snmp_exporter
và cách cấu hình để bắt đầu giám sát các thiết bị mạng của riêng bạn. Bạn cũng có thể tham khảo hướng dẫn cho người mới bắt đầu về giám sát mạng bằng cách sử dụng SNMP mixin và Grafana.
Chúc bạn thành công trong việc giám sát và quản lý mạng của mình sử dụng các công cụ mạnh mẽ như Prometheus và Grafana.
Tham khảo nguồn https://grafana.com/blog/2022/02/01/an-advanced-guide-to-network-monitoring-with-grafana-and-prometheus/
.