Một hệ thống telemetry mạng gồm bốn tầng, mỗi tầng thay thế được độc lập:
- Collector: nói chuyện với thiết bị (gNMI, SNMP, syslog, flow) và chuẩn hoá dữ liệu về một schema chung (
source,name, counter...). - Bus (tuỳ chọn, thường là Kafka): hàng đợi bền vững giữa collector và kho dữ liệu, cho phép nhiều consumer đọc cùng một luồng.
- Lưu trữ: TSDB cho metric (Prometheus, InfluxDB), kho cột cho flow/log lưu lâu (ClickHouse), kho log (Loki).
- Hiển thị và cảnh báo: Grafana, Alertmanager / Grafana Alerting.
Sơ đồ tổng thể
flowchart LR R["Router / switch"] -->|"gNMI dial-in"| T[Telegraf] R -->|"SNMP poll"| SE[snmp_exporter] R -->|"syslog UDP"| V[Vector] R -->|"NetFlow / IPFIX"| AK[Akvorado inlet] T --> K[(Kafka)] V --> K AK --> K K --> DB["TSDB / ClickHouse / Loki"] SE -->|"scrape (pull)"| P[Prometheus] DB --> G["Grafana + Alerting"] P --> G
Không phải hệ thống nào cũng cần Kafka: với vài chục thiết bị, Telegraf ghi thẳng InfluxDB hoặc Prometheus scrape trực tiếp là đủ.
Push và pull
| Pull (Prometheus scrape) | Push (Telegraf → InfluxDB, Vector → Loki, MDT dial-out) | |
|---|---|---|
| Ai chủ động | Server đi lấy theo scrape_interval |
Nguồn tự gửi |
| Biết target chết | Có sẵn (up == 0) |
Phải tự dựng cảnh báo "mất dữ liệu" (absent_over_time, deadman) |
| Danh sách thiết bị | Nằm ở server (static, file_sd, service discovery) | Nằm ở collector/thiết bị |
| Qua NAT / firewall | Server phải kết nối được tới từng target | Chỉ cần mở chiều nguồn → collector |
| Tải đột biến | Server kiểm soát nhịp | Collector/kho phải chịu burst, cần buffer (Kafka) |
| Ví dụ | snmp_exporter, prometheus_client của Telegraf |
Telegraf gNMI → InfluxDB, Vector syslog |
gNMI dial-in là trường hợp lai: collector chủ động mở kết nối (giống pull), nhưng sau đó thiết bị stream dữ liệu theo chu kỳ (giống push).
SNMP và streaming telemetry
| Tiêu chí | SNMP polling | Streaming telemetry (gNMI / MDT) |
|---|---|---|
| Cơ chế | Collector GET/GETBULK từng chu kỳ | Thiết bị đẩy theo sample_interval hoặc khi đổi (on_change) |
| Chu kỳ thực tế | 1-5 phút (walk tốn CPU control plane) | 10-30 giây, thậm chí ngắn hơn với path nhỏ |
| Mô hình dữ liệu | MIB, index số (ifIndex) |
YANG (OpenConfig / native), key có tên (interface[name=...]) |
| Transport | UDP 161, không mã hoá trừ SNMPv3 authPriv | gRPC/HTTP2 trên TCP, TLS |
| Timestamp | Thời điểm collector nhận | Thời điểm thiết bị lấy mẫu |
| Sự kiện tức thời | Trap (UDP, dễ mất) | on_change (interface down, BGP state) |
| Hỗ trợ | Gần như mọi thiết bị, kể cả đời cũ | Router/switch đời mới (IOS XR 6+, Junos 18+, EOS, SR Linux) |
| Công cụ | snmp_exporter, Telegraf inputs.snmp |
Telegraf inputs.gnmi, gnmic, Telegraf cisco_telemetry_mdt |
Thực tế thường chạy song song: streaming cho router lõi/PE, SNMP cho thiết bị cũ và các bảng chưa có YANG tốt.
Ước lượng quy mô
Số series ≈ số thiết bị × số interface × số field. Ví dụ 200 router × 100 interface × 6 counter = 120.000 series; chu kỳ 10 giây → 12.000 điểm/giây. Con số này quyết định:
- TSDB nào đủ (một Prometheus/InfluxDB OSS xử lý được mức này; vài triệu series thì cần sharding, Mimir/VictoriaMetrics, hoặc ClickHouse).
- Có cần Kafka để đệm khi kho dữ liệu bảo trì.
- Retention và downsampling: giữ raw 15-30 ngày, bản 5 phút giữ 1-2 năm (task Flux, recording rule, hoặc materialized view ClickHouse).
Tag/label có giá trị không giới hạn (IP peer, description, session id) làm series bùng nổ: xem InfluxDB troubleshooting.
Vai trò của Kafka
| Lợi ích | Ghi chú |
|---|---|
| Đệm khi kho dữ liệu chậm/bảo trì | Retention topic vài giờ đến vài ngày |
| Nhiều consumer cùng một luồng | Cùng dữ liệu đi vào TSDB, ClickHouse, và hệ thống phát hiện bất thường |
| Tách collector khỏi kho | Đổi InfluxDB sang ClickHouse không phải động tới collector |
| Thứ tự theo thiết bị | Đặt key message = source để mọi bản ghi của một thiết bị nằm cùng partition |
Cái giá: thêm một cụm cần vận hành (broker, KRaft/ZooKeeper, giám sát consumer lag). Telegraf (outputs.kafka / inputs.kafka_consumer), Vector (sink/source kafka) và Akvorado đều hỗ trợ sẵn.
Khi nào dùng
| Quy mô / nhu cầu | Kiến trúc gợi ý |
|---|---|
| Lab, < 50 thiết bị | Telegraf → InfluxDB hoặc Prometheus (scrape Telegraf/snmp_exporter) → Grafana |
| Vài trăm thiết bị, cần cảnh báo chuẩn | Prometheus + snmp_exporter + Telegraf gNMI, recording rule, Alertmanager |
| Flow và log khối lượng lớn, lưu lâu | Akvorado / Vector → Kafka → ClickHouse |
| Nhiều đội cùng dùng dữ liệu, cần độ bền | Collector → Kafka → nhiều consumer (TSDB, ClickHouse, Loki) |
| Thiết bị cũ không có gNMI | SNMP polling, chu kỳ 1-5 phút |