Triệu chứng chính: collector (Telegraf inputs.gnmi, gnmic) kết nối lỗi code = Unavailable, x509: ..., Unauthenticated; hoặc subscribe thành công nhưng không có update, thiếu interface, chu kỳ dữ liệu khác cấu hình, hoặc Grafana không thấy điểm nào dù collector đang nhận. Nguyên tắc: thử bằng gnmic từ đúng máy collector trước, rồi mới sửa config Telegraf.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách xử lý |
|---|---|---|
context deadline exceeded khi kết nối |
Không tới được port gRPC: sai port, ACL/firewall, gRPC chạy trong VRF management | nc -vz <ip> <port> từ collector; kiểm tra VRF/ACL trên router |
tls: first record does not look like a TLS handshake |
Collector dùng TLS, router đang plaintext (no-tls / clear-text) |
Dùng --insecure (gnmic) / tắt enable_tls (Telegraf), hoặc bật TLS trên router |
error reading server preface: EOF / connection closed before server preface received |
Ngược lại: router bật TLS, collector plaintext | Bật TLS phía collector (--tls-ca hoặc tạm --skip-verify) |
x509: certificate signed by unknown authority |
Collector không tin CA ký cert của router (thường là cert tự ký) | Chỉ định CA bằng --tls-ca / tls_ca; lab thì --skip-verify / insecure_skip_verify = true |
x509: certificate is valid for ..., not 198.51.100.11 / doesn't contain any IP SANs |
Kết nối bằng IP nhưng cert chỉ có hostname trong SAN | Kết nối bằng hostname trong cert, --tls-server-name, hoặc cấp lại cert có IP SAN |
x509: certificate has expired or is not yet valid |
Cert hết hạn hoặc đồng hồ lệch | Kiểm tra NTP hai phía, cấp lại cert |
code = Unauthenticated |
Sai user/pass, user không có quyền gRPC/AAA | Thử SSH bằng cùng user; kiểm tra AAA/task group trên router |
code = Unimplemented / InvalidArgument nhắc tới encoding |
Thiết bị không hỗ trợ encoding đó | Xem danh sách encoding trong capabilities, đổi proto ↔ json_ietf |
code = NotFound / InvalidArgument với path |
Sai path, sai origin, hoặc model không có trên bản OS này |
gnmic get từng mức path; thử bỏ hoặc đổi origin |
| Subscribe OK nhưng không có update nào | Path đúng cú pháp nhưng rỗng (không có instance), hoặc on_change trên giá trị không đổi |
Thử --mode once; với on_change chỉ có bản đầu và khi giá trị thay đổi |
| Chỉ có vài interface | Path có key cố định (interface[name=Hu0/0/0/0]) hoặc interface down không có counter |
Dùng interface[name=*] hoặc bỏ key |
Dữ liệu đến thưa hơn sample_interval |
Thiết bị áp chu kỳ tối thiểu riêng hoặc bị quá tải | Tăng sample_interval (≥ 10s cho counter), tách path lớn |
sample_interval = 0 cho kết quả khác nhau giữa hãng |
Spec gNMI: 0 nghĩa là thiết bị tự chọn chu kỳ nhỏ nhất nó hỗ trợ | Luôn đặt giá trị cụ thể |
| Collector nhận nhưng Grafana trống | Timestamp thiết bị lệch (NTP sai) nên điểm nằm ngoài time range; hoặc measurement/field tên khác dự kiến | So timestamp trong output gnmic với date -u; xem tên thật bằng telegraf --test |
| Mất kết nối định kỳ | Session gRPC bị giới hạn số lượng / idle timeout của firewall | Giảm số collector trùng lặp, đặt redial ở Telegraf, nới timeout firewall |
Các bước khoanh vùng
- Mạng: tới được
IP:portgRPC từ collector chưa (nc -vz). - TLS: router đang plaintext hay TLS, cert có SAN đúng không (
openssl s_client). - Xác thực và năng lực:
gnmic capabilitiescho biết user/pass đúng, model và encoding hỗ trợ. - Path:
gnmic getvới path cần dùng; nếu lỗi, lùi lên mức cha để tìm chỗ sai. - Subscribe:
--mode oncetrước, rồistream+sample; so chu kỳ thực tế với cấu hình. - Phía thiết bị: xem subscription và lỗi trên router.
- Collector → kho:
telegraf --test, rồi query kho dữ liệu với time range rộng.
Cú pháp path và origin xem gNMI và YANG path; các lệnh gnmic khác xem gnmic cheatsheet.
Cấu hình đúng
Telegraf với TLS (router dùng cert do CA nội bộ ký):
[[inputs.gnmi]]
addresses = ["pe1-hni.example.net:57400"] # hostname khớp SAN trong cert
username = "${NET_USER}"
password = "${NET_PASS}"
encoding = "proto"
redial = "10s"
enable_tls = true
tls_ca = "/etc/telegraf/pki/ca.pem"
# insecure_skip_verify = true # chỉ dùng tạm để khoanh vùng
[[inputs.gnmi.subscription]]
name = "interfaces"
origin = "openconfig"
path = "/interfaces/interface/state/counters"
subscription_mode = "sample"
sample_interval = "10s"IOS XR có thể dùng cert tự ký do router sinh ra khi bật TLS cho gRPC (thường nằm ở /misc/config/grpc/ems.pem); chép file này về collector làm tls_ca và kết nối bằng tên/IP có trong cert. Cấu hình phía router xem MDT trên IOS XR và Telegraf gNMI.
Kiểm tra nhanh
export GNMIC_USERNAME=$NET_USER GNMIC_PASSWORD=$NET_PASS # gnmic đọc biến GNMIC_<FLAG>
T=198.51.100.11:57400
# 1. Mạng
nc -vz 198.51.100.11 57400
# 2. TLS: xem cert router trả về, SAN và hạn dùng
openssl s_client -connect $T -showcerts </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName
# 3. Capabilities: model + encoding hỗ trợ
gnmic -a $T --insecure capabilities # router plaintext
gnmic -a $T --tls-ca ca.pem capabilities # router TLS, kiểm cert
gnmic -a $T --skip-verify capabilities # router TLS, bỏ kiểm cert (khoanh vùng)
# 4. Path
gnmic -a $T --insecure -e json_ietf get --path "openconfig:/interfaces/interface[name=*]/state/oper-status"
# 5. Subscribe một lần, rồi stream theo chu kỳ
gnmic -a $T --insecure -e proto subscribe --mode once \
--path "/interfaces/interface/state/counters"
gnmic -a $T --insecure -e proto subscribe --mode stream --stream-mode sample \
--sample-interval 10s --path "/interfaces/interface[name=*]/state/counters/in-octets" --format event
# Xem request thật gửi đi và log gRPC
gnmic -a $T --insecure --print-request --debug subscribe --mode once --path "/system/state"
# 7. Collector
telegraf --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d \
--input-filter gnmi --test --test-wait 30Trên thiết bị:
! IOS XR: subscription gNMI dial-in hiện với tên GNMI__<số>
show running-config grpc
show telemetry model-driven subscription
show telemetry model-driven subscription <tên> internal
# Junos
show extension-service request-response servers
show system connections | match 32767
show agent sensors