Nỗi khổ khi thiết bị mạng là những “hộp đen” lầm lì
Đã bao giờ bạn rơi vào cảnh sếp đứng sau lưng hỏi: “Tại sao mạng chậm?” trong khi bạn phải cuống cuồng SSH vào từng con Switch Cisco Catalyst để gõ lệnh show interface status chưa? Khi hệ thống phình to lên khoảng 20-30 thiết bị, việc quản trị thủ công này thực sự là một gánh nặng.
Với server Linux hay Windows, chúng ta có Node Exporter. Nhưng thiết bị mạng (Network Appliances) lại là những hệ điều hành đóng kín. Bạn không thể cài thêm bất cứ agent nào lên đó. Nếu không giám sát được băng thông hay lỗi cổng (input/output errors), bạn sẽ luôn ở thế bị động khi sự cố nghẽn mạng xảy ra.
Tại sao Prometheus không thể “nói chuyện” trực tiếp với Switch?
Prometheus hoạt động theo cơ chế pull. Nó yêu cầu các đối tượng (targets) phải cung cấp một endpoint HTTP với định dạng dữ liệu text đơn giản. Ngược lại, các thiết bị mạng từ cũ đến mới chủ yếu sử dụng SNMP (Simple Network Management Protocol).
Giao thức này sử dụng cấu trúc cây OID (Object Identifier) cực kỳ phức tạp và chạy trên UDP. Hai bên đơn giản là không cùng ngôn ngữ. Để giải quyết, chúng ta cần một “thông dịch viên” đứng giữa. Đó chính là vai trò của SNMP Exporter.
Cân nhắc các giải pháp giám sát phổ biến
Dưới đây là vài phương án anh em quản trị mạng thường cân nhắc:
- Zabbix: Đây là “ông trùm” về SNMP. Tuy nhiên, nếu team bạn đang dùng Prometheus cho toàn bộ server, việc dựng thêm Zabbix sẽ gây phân mảnh dữ liệu và tốn tài nguyên vận hành.
- Viết Script Python: Tự chạy
snmpwalkrồi đẩy dữ liệu vào Pushgateway. Cách này ban đầu khá nhanh nhưng sẽ trở thành thảm họa bảo trì khi số lượng thiết bị tăng lên. - SNMP Exporter: Giải pháp chuẩn chỉnh từ hệ sinh thái Prometheus. Nó nhẹ, hiệu quả và tích hợp cực mượt với Grafana.
Quy trình triển khai Prometheus SNMP Exporter thực chiến
Mình ưu tiên chọn SNMP Exporter vì khả năng gom toàn bộ metrics về một mối. Dưới đây là các bước mình đã áp dụng cho hệ thống doanh nghiệp với hơn 50 Switch Core và Access.
1. Kích hoạt SNMP trên thiết bị mạng
Bạn cần cấu hình để thiết bị chấp nhận các truy vấn SNMP. Ví dụ, trên dòng Switch Cisco, hãy thực hiện các lệnh sau:
# Vào chế độ cấu hình
conf t
# Tạo Community String (coi như mật khẩu để đọc dữ liệu)
snmp-server community MySecretPassword RO
# Giới hạn chỉ cho phép IP máy giám sát (ví dụ 192.168.1.50) truy cập
access-list 10 permit 192.168.1.50
snmp-server community MySecretPassword RO 10
Lưu ý: Hãy ưu tiên SNMP v2c hoặc v3. Đừng dùng v1 vì nó rất chậm và không hỗ trợ các counter 64-bit cho các cổng tốc độ cao trên 1Gbps.
2. Chạy SNMP Exporter bằng Docker
Docker là cách nhanh nhất để triển khai mà không lo về dependency. Bạn tạo file docker-compose.yml như sau:
version: '3'
services:
snmp-exporter:
image: prom/snmp-exporter
container_name: snmp-exporter
restart: always
ports:
- "9116:9116"
volumes:
- ./snmp.yml:/etc/snmp_exporter/snmp.yml
3. Cấu hình file snmp.yml
File snmp.yml chứa hàng ngàn dòng định nghĩa OID nên bạn không thể viết tay. Thông thường, chúng ta dùng Config Generator để tạo file này từ các file MIB của nhà sản xuất.
Để bắt đầu nhanh, bạn hãy tải file mẫu hỗ trợ sẵn Cisco, HP, APC tại GitHub chính thức. Một bài học mình rút ra là: Luôn yêu cầu nhà cung cấp gửi kèm file MIB khi mua thiết bị mới để việc giám sát sau này dễ dàng hơn.
4. Khai báo thiết bị trong Prometheus
Mở file prometheus.yml và thêm job mới. SNMP Exporter hoạt động như một proxy. Prometheus sẽ gửi yêu cầu đến Exporter, sau đó Exporter mới đi hỏi thiết bị mạng.
scrape_configs:
- job_name: 'snmp_network_devices'
static_configs:
- targets:
- 192.168.1.1 # IP Switch Core
- 192.168.1.2 # IP Router Biên
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.1.50:9116 # IP máy chạy SNMP Exporter
5. Trực quan hóa dữ liệu trên Grafana
Đừng nhìn đống text thô kệch trên Prometheus. Hãy vào Grafana, chọn Import Dashboard và nhập ID 11169. Đây là template cực kỳ chuyên nghiệp cho SNMP.
Mọi thông số sẽ hiện ra rõ ràng: Băng thông In/Out từng cổng, trạng thái Up/Down, và đặc biệt là Error rate. Nếu thấy Error rate tăng cao ở một cổng nào đó, khả năng cao là dây cáp mạng đó đang bị lỗi vật lý.
Những lưu ý giúp bạn tránh “ăn hành”
Sau nhiều lần triển khai thực tế, mình có vài lời khuyên cho anh em:
- Tần suất lấy dữ liệu (Interval): Đừng đặt quá dày (như 1s hay 5s). CPU của Switch thường khá yếu. Truy vấn SNMP dồn dập có thể khiến thiết bị bị treo hoặc nhảy CPU lên 100%. Mức 30s-60s là hợp lý nhất.
- Tận dụng Description: Hãy đặt tên gợi nhớ cho các cổng trên Switch (ví dụ:
Description: Uplink_To_Server_DB). SNMP Exporter sẽ lấy được tên này giúp biểu đồ của bạn dễ hiểu hơn hẳn. - Cảnh báo thông minh: Chỉ nên đặt Alert cho các cổng Uplink quan trọng. Nếu cổng nào của user cũng báo Down thì điện thoại của bạn sẽ nổ tung vì thông báo đấy.
Từ ngày có hệ thống này, mình không còn phải đoán mò mỗi khi mạng chậm. Chỉ cần một cái liếc mắt qua Dashboard là biết ngay vấn đề nằm ở đâu. Chúc anh em triển khai thành công và làm chủ hoàn toàn hạ tầng mạng của mình!

