Sổ tay kỹ thuật

Kiến trúc hệ thống telemetry mạng

concept#telemetry#kafka#prometheus#gnmi· cập nhật 2026-11-06

Bức tranh tổng thể collector → bus (Kafka) → TSDB/log store → visualize, so sánh push với pull và SNMP với streaming telemetry để chọn kiến trúc.

Sửa trang này
Mục lục

Một hệ thống telemetry mạng gồm bốn tầng, mỗi tầng thay thế được độc lập:

  1. 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...).
  2. 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.
  3. Lưu trữ: TSDB cho metric (Prometheus, InfluxDB), kho cột cho flow/log lưu lâu (ClickHouse), kho log (Loki).
  4. 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