Roadmap gNMI — TLSStress.Art¶
Leia no seu idioma: English · Português · Español
Status do escopo (pós-congelamento de escopo 2026-05-10) — Ver ARCHITECTURE.md para os 37 MÓDULOs canônicos + 7 Test Kinds + arquitetura de safety DOM/CPOS/PIE-PA. ADRs 0014, 0019-0025 cobrem adições pós-Freeze. Este documento captura o design e a justificativa de decisão para adicionar suporte a gNMI (gRPC Network Management Interface) ao TLSStress.Art. É um documento de roadmap — nenhum código é entregue sob este nome de arquivo no repositório hoje. Quando a implementação chegar, este documento será atualizado com os caminhos reais e a orientação do operador.
Público-alvo: operadores, parceiros, clientes e stakeholders do Cisco Legal que perguntam "vocês suportam gNMI?" e precisam de uma resposta definitiva. A resposta hoje é sim, no roadmap, com um plano deliberadamente faseado; não, ainda não rodando em produção.
O que é gNMI¶
gNMI é um protocolo de gerenciamento de rede desenvolvido pelo consórcio OpenConfig (Google + grandes vendors de rede). É o sucessor moderno do SNMP para telemetria em streaming e gerenciamento de configuração.
Características principais:
| Aspecto | Valor |
|---|---|
| Transporte | gRPC sobre HTTP/2, TLS obrigatório |
| Autenticação | Certificados TLS (mTLS preferido) ou usuário/senha |
| Modelo de dados | Definido em YANG, neutro entre vendors via OpenConfig |
| Operações | Get, Set, Subscribe, Capabilities |
| Modos de subscription | STREAM SAMPLE (push periódico), STREAM ON_CHANGE (push em mudança de valor), POLL, ONCE |
| Encodings | JSON-IETF, PROTO, JSON, BYTES |
Por que gNMI importa para o TLSStress.Art¶
| Aspecto | SNMP (hoje) | gNMI (futuro) |
|---|---|---|
| Transporte | UDP (lossy, sem integridade de auth) | gRPC + TLS (confiável, criptografado, autenticado) |
| Modelo de polling | Cliente faz polling a cada intervalo | Servidor faz streaming para o cliente |
| Latência | Intervalos de polling de 30–60 s típicos | STREAM SAMPLE sub-segundo |
| Eficiência de banda | Polls completos repetidos | Apenas deltas via ON_CHANGE |
| Schema | MIBs (específicas de vendor, frequentemente desatualizadas) | YANG OpenConfig (neutro entre vendors) |
| Auth | Community strings (fraco) | mTLS + validação de certificado |
| Carga de polling no Cisco Nexus | 5–10% de CPU no switch | <1% de CPU |
Suporte de vendors — matriz honesta da realidade¶
Uma percepção comum equivocada é que "todos os dispositivos modernos suportam gNMI". A verdade é mais matizada. Em 2026:
| Vendor / Dispositivo | gNMI nativo? | Notas de cobertura |
|---|---|---|
| Cisco Nexus 9000 (NX-OS 9.2+) | ✅ Sim | OpenConfig parcial + YANG específico da Cisco; feature grpc para habilitar |
| Cisco IOS-XR / IOS-XE | ✅ Sim | Roteadores — fora do escopo do test-bed hoje, mas suportados |
| Juniper Junos | ✅ Sim | Forte cobertura OpenConfig |
| Arista EOS | ✅ Sim | Nativo, OpenConfig completo + extensões EOS |
| Cisco FTD / Firepower (cdFMC ou on-prem FMC managed) | ✅ Sim | OpenConfig streaming telemetry via gNMI é suportado nativamente quando o FTD é gerenciado por Cloud-Delivered FMC (cdFMC) ou on-prem FMC. Ativado via FTD health policy. O FTD abre um servidor gNMI em TCP 50051 (modo DIAL-IN) OU estabelece um túnel gRPC de saída para um collector (modo DIAL-OUT). Modos de Subscribe: Once, Sampled (intervalo ≥1-min), On-change. Autenticação mTLS obrigatória. Referência: https://docs.manage.security.cisco.com/cdfmc/c_openconfig_streaming_telemetry.html |
| Cisco FTD / Firepower (FDM-managed standalone) | ⚠️ Indireto | A implantação standalone somente FDM que o adapter REST do TLSStress.Art (PR #198) endereça hoje usa a FDM REST API. gNMI é exposto via plano de gerenciamento cdFMC / on-prem FMC, não diretamente através do FDM. |
| Cisco UCS Manager | ❌ Não | XML API + Redfish; gNMI não está no roadmap UCS da Cisco |
| Cisco UCS C-series CIMC | ❌ Não | Apenas Redfish |
| Palo Alto PAN-OS | ⚠️ Limitado | API primária é XML/REST; exposição de gNMI é parcial e indocumentada para métricas centrais de decryption |
| Fortinet FortiGate (FortiOS 7.0+) | ⚠️ Parcial | gRPC streaming para campos selecionados de monitoramento; sem conformidade total com gNMI para configuração |
Implicação para o TLSStress.Art: gNMI é um complemento à stack existente de REST API + SNMP + syslog. Genuinamente transformador para o tier de switches (Cisco Nexus + futuro suporte a Juniper/Arista) E para o Cisco FTD gerenciado por cdFMC / FMC (streaming sub-minuto de estado operacional, eventos on-change para flaps de interface). Não adiciona nada para saúde de hardware UCS — UCS não fala gNMI — e o FTD standalone gerenciado por FDM que nosso adapter REST endereça hoje continua dependendo do FDM REST.
Para operadores em cdFMC, a integração gNMI torna-se o pilar de menor latência para telemetria operacional do FTD — muito à frente de esperar polls de SNMP ou snapshots REST.
Onde gNMI se encaixa na arquitetura de pilares existente¶
A stack atual de telemetria do TLSStress.Art tem 4 pilares:
1. Metrics (numerical) SNMP, node-exporter, kubelet
2. Events (reactive) Syslog → Loki
3. API (config + state) FTD / Nexus / UCS / Fortinet REST adapters (PR #198/#199/#200/#201)
4. Probes (independent) TLS Decrypt Mode Probe (issuer cert detection)
gNMI se torna o 5º pilar:
5. Streaming telemetry gNMI subscribe streams from compliant switches
(sub-second SAMPLE; ON_CHANGE for state transitions)
Criticamente, nenhum dos pilares existentes é removido. SNMP permanece para contadores de UCS + NGFW. Syslog permanece para eventos. REST API permanece para configuração + estado de decrypt-policy em NGFW + saúde de hardware UCS.
O que ganhamos ao adicionar gNMI¶
| Capacidade | Sem gNMI (hoje) | Com gNMI |
|---|---|---|
| Contadores por interface (Nexus) | SNMP ifTable consultado a cada 30–60 s | STREAM SAMPLE sub-segundo |
| Profundidade de fila + drops (QoS Nexus) | SNMP, frequentemente ausente para features de ASIC mais novos | Modelo OpenConfig qos:queues |
| Níveis ópticos em transceivers | SNMP entSensorTable parcial |
OpenConfig terminal-device:optical-channel |
| Utilização de TCAM (filter NGFW, ACL Nexus) | SNMP parcial, específico de vendor | OpenConfig + YANG Cisco, sub-segundo |
| Transições de estado (interface up/down) | Polled na cadência SNMP — perde flaps <1 s | STREAM ON_CHANGE captura cada transição |
| Suporte multi-vendor a switches | Mapeamento MIB por vendor no código | Os mesmos paths de Subscribe funcionam em Cisco/Juniper/Arista |
A vitória de destaque: quando uma porta Nexus dá flap por 800 ms durante uma execução, SNMP perde; gNMI captura. Esta é a diferença entre "spike de p99 sem causa aparente" e "spike de p99 correlacionado com flap de porta às 14:32:01.812".
O que NÃO ganhamos¶
Para ser preciso sobre o escopo:
- ❌ Estado de decrypt policy do NGFW — nenhum modelo OpenConfig YANG existe para regras de decrypt específicas de vendor
- ❌ Térmica / energia / ECC de DIMM do UCS — UCS não fala gNMI
- ❌ Semântica de deploy state do FTD (a noção "DEPLOYED / PENDING" do FDM) — apenas FDM REST
- ❌ Substituição de SNMP no UCS — UCS depende de SNMP/Redfish para hardware
O que NÓS ganhamos no FTD gerenciado por cdFMC (correção em relação ao rascunho anterior):
- ✅ Contadores de interface (bytes, errors, drops por porta) em cadência ≥1-min
- ✅ Notificações ON_CHANGE para transições de estado de interface
- ✅ Modelos OpenConfig em nível de sistema (CPU, memória, processos)
- ✅ Consistência de queries multi-vendor — o mesmo path Subscribe funciona em Cisco FTD + Cisco Nexus + Juniper + Arista quando esses forem adicionados
Se você lê marketing alegando que "gNMI substitui tudo", essa alegação continua errada — mas para usuários de cdFMC ela substitui um subconjunto significativo do que atualmente coletamos via REST + SNMP.
Três opções arquiteturais (com trade-offs)¶
Opção A — Cliente gNMI nativo dentro do pod do dashboard (Node.js)¶
Implementar o cliente gNMI em TypeScript dentro do processo do dashboard Next.js.
| Pro | Con |
|---|---|
| Zero novos containers | Bibliotecas gNMI no ecossistema Node são imaturas (os melhores clients são Go + Python) |
| Único deployment | Subscriptions gRPC de longa duração dentro do processo Next.js arriscam problemas de memória |
| Reutiliza Postgres + auth de admin existentes | Lógica de gRPC keepalive + reconnect em JS é frágil |
Veredito: 🚫 Não recomendado.
Opção B — Microsserviço Go dedicado¶
Construir um pequeno serviço Go (~500 LoC) usando github.com/openconfig/gnmi. Lê a lista de dispositivos de uma tabela Postgres dut_gnmi_devices, estabelece streams Subscribe, traduz updates em métricas Prometheus OU escreve em uma tabela dut_gnmi_samples.
| Pro | Con |
|---|---|
| Go tem bibliotecas gNMI maduras | Nova imagem de container — incha o bundle de air-gap |
| Tratamento nativo de gRPC + HTTP/2 + TLS | Nova linguagem para o time manter |
| Subscriptions de longa duração são o ponto forte de Go | Superfície de deployment mais complexa |
| Separa domínio de falha do dashboard |
Veredito: ✅ Resposta certa quando gNMI é uma prioridade de produto (não apenas exploração).
Opção C — Sidecar gnmic (recomendado para a primeira iteração)¶
gnmic é a ferramenta CLI open-source que é o cliente gNMI de facto em observabilidade de rede. Rode-o como um Deployment Kubernetes com configuração via ConfigMap. Tem saída embutida para Prometheus exporter, Loki, InfluxDB, NATS.
| Pro | Con |
|---|---|
| Zero código gNMI que mantemos — gnmic é maduro, open-source | Dois sistemas de configuração (REST API em Postgres, gNMI em ConfigMap YAML) |
| Modo Prometheus exporter nativo encaixa na nossa stack | Menos controle sobre o formato dos dados |
| ~2 dias de trabalho de operador + ops, sem código novo | Imagem gnmic para empacotar em air-gap |
| Valida o caso de uso rapidamente com baixo investimento | Operador gerencia configuração do gnmic separadamente da configuração do dashboard |
Veredito: ✅ Recomendado para a Fase 1.
Plano faseado¶
Fase 0 — Este documento (AGORA)¶
- ✅ Documento de roadmap publicado em 3 idiomas
- ✅ Matriz honesta de suporte de vendors
- ✅ Opções arquiteturais analisadas
- ✅ Justificativa de decisão documentada para futuros operadores / clientes / Cisco Legal
Nenhum código entregue. Esta fase é sobre conhecimento institucional — quando alguém pergunta "vocês suportam gNMI?", apontamos para este documento.
Fase 1 — Sidecar gnmic (após validação em produção do v1.0)¶
Trigger: TLSStress.Art foi implantado em pelo menos um lab real, a telemetria existente de 4 pilares foi validada de ponta a ponta, e há demanda do operador por telemetria de switch sub-segundo.
Escopo (~2 dias de trabalho):
1. k8s/optional/gnmic-sidecar.yaml — Deployment + ConfigMap com configuração gnmic
2. Paths de subscription gNMI por dispositivo Nexus (interfaces, qos, system)
3. Modo Prometheus exporter emitindo séries sob namespace tlsstress_gnmi_*
4. Dashboard Grafana "TLSStress.Art — Nexus Sub-Second Telemetry" lendo dessas métricas
5. docs/GNMI_OPERATIONS.{md,pt-BR.md,es.md} — guia do operador para habilitar feature grpc no Nexus + registrar paths na configuração do gnmic
Fora de escopo na Fase 1:
- Suporte multi-vendor (apenas Cisco Nexus inicialmente)
- Operações Set (apenas leitura)
- Integração Loki para ON_CHANGE (Fase 2)
- Metadados gNMI nas tabelas de snapshots da DUT API (Fase 2)
Fase 2 — Microsserviço Go dedicado (v2.0)¶
Trigger: Fase 1 provou o caso de uso gNMI em pelo menos um lab real E há demanda por (a) operações de escrita, (b) mais vendors, ou (c) integração mais profunda com o fluxo existente de snapshot / report.
Escopo (~1–2 semanas de trabalho):
1. services/gnmi-collector/ — microsserviço Go, ~500-1000 LoC
2. Tabela dut_gnmi_devices — registra dispositivos que falam gNMI (auth baseada em cert)
3. Tabela dut_gnmi_samples — armazenamento de longo prazo para amostras de alto valor
4. Integração Loki para eventos ON_CHANGE
5. Suporte multi-vendor: Cisco Nexus + Juniper Junos + Arista EOS
6. Anexo E "evidência de streaming gNMI" do Test Run Report com timing sub-segundo ao lado da janela da execução
7. Suporte opcional a operação Set com o mesmo fluxo de confirmação do operador usado para escritas via REST API
Fase 3 — Substituir o sidecar gnmic pelo serviço Go (v2.x)¶
Se a Fase 2 entregar e for estável, o sidecar gnmic torna-se redundante. Aposentamos. Operadores com deployments da Fase 1 são migrados implantando o serviço Go ao lado, executando em paralelo por uma release, então desligando o gnmic.
Por que NÃO estamos entregando a Fase 1 nesta iteração¶
Raciocínio honesto:
- PRs existentes na fila precisam aterrissar primeiro — adicionar gNMI sobre uma fila não estabilizada agrava a complexidade de merge
- Nenhum teste end-to-end em hardware real ainda — adicionar mais pilares de telemetria antes de validar os existentes é otimização prematura
- gNMI ajuda predominantemente switches — temos um switch (Cisco Nexus). 1 hora de configuração
gnmiceventualmente nos dará o que precisamos, sem novo microsserviço - Spirent / Ixia também não têm gNMI — adicioná-lo nos posiciona para o futuro, mas não nos coloca "à frente" dos competidores hoje; já estamos à frente via padrão de adapter multi-vendor
- Complexidade para o operador — cada novo pilar = mais um dashboard que o operador precisa aprender. Até que os dashboards existentes provem seu valor em produção, adicionar mais é overhead
A jogada "à frente dos competidores" neste momento é operacionalizar o que temos: pre-flight checks (PR-C), wiring da Fase 3 do Test Run Report (PR-D), validação em lab real. Não adicionar mais fontes de telemetria.
Quando ENTREGAREMOS a Fase 1¶
Condições de trigger, todas as quais devem ser verdadeiras:
- Pelo menos um deployment em lab real com os 4 pilares existentes exercitando end-to-end
- Test Run Report Fase 3 (Anexos B/C/D) entregue e validado
- PR-C (pre-flight checks) entregue e exercitado em uma execução real
- Um operador pediu explicitamente por telemetria de switch sub-segundo
- Cisco Nexus 9000 está em um lab de cliente + temos credenciais
Quando as quatro caixas estiverem marcadas, a Fase 1 é ~2 dias de trabalho.
Comparação de capacidades vs alternativas comerciais¶
| Feature | Spirent CyberFlood | Ixia BreakingPoint | TLSStress.Art (com Fase 1 gNMI) |
|---|---|---|---|
| Suporte a subscription gNMI | ❌ | ❌ | ✅ (Cisco Nexus inicialmente) |
| Modelos YANG OpenConfig | ❌ | ❌ | ✅ |
| Switch multi-vendor via gNMI | ❌ | ❌ | ✅ (Fase 2) |
| Telemetria de porta sub-segundo | ⚠️ derivada de SNMP, presa ao vendor | ⚠️ presa ao vendor | ✅ |
| Arquitetura aberta | ❌ | ❌ | ✅ |
O diferencial estrutural é a arquitetura aberta multi-vendor. gNMI a reforça; não é a fonte dela.
Referências¶
- Especificação gNMI — https://github.com/openconfig/gnmi
- Modelos YANG OpenConfig — https://github.com/openconfig/public
gnmic(ferramenta CLI que planejamos usar na Fase 1) — https://gnmic.openconfig.net/- Guia gNMI Cisco Nexus 9000 NX-OS — https://www.cisco.com/c/en/us/td/docs/switches/datacenter/nexus9000/sw/93x/programmability/guide/b-cisco-nexus-9000-series-nx-os-programmability-guide-93x.html
- Juniper Junos gNMI — https://www.juniper.net/documentation/us/en/software/junos/network-mgmt/topics/topic-map/grpc-overview.html
- Arista EOS gNMI — https://www.arista.com/en/support/toi/eos-4-31-0f/16002-streaming-telemetry-with-gnmi
Relacionados¶
DUT_API_INTEGRATION.pt-BR.md— integração REST API (o "terceiro pilar" que gNMI complementa)API_FEATURE_CATALOG.pt-BR.md— roadmap de features incluindo placeholders gNMI (categoria N "long-tail")SYSLOG_OPERATIONS.pt-BR.md— segundo pilarMONITORING_TEST_VALIDITY.pt-BR.md— framework de métricas do primeiro pilar