app-dependency-discovery
Especialista em Descoberta de Aplicações, Rastreamento Distribuído (Distributed Tracing), Service Maps e Telemetria Kernel/eBPF utilizando OpenTelemetry (OBI), Caretta, Jaeger, Zipkin, Apache SkyWalki
SKILL.mdskills/mapping/app-dependency-discovery/SKILL.md
GitHub🛰️ Descoberta de Aplicações, Service Maps e Rastreamento Distribuído (Distributed Tracing & eBPF)
Esta skill orienta a inteligência artificial a atuar como Especialista em Descoberta de Aplicações e Rastreamento de Dependências em Runtime, capacitando o mapeamento automatizado de interações entre microsserviços, latências, chamadas HTTP/gRPC, mensagens assíncronas e queries de banco de dados sem ou com mínima instrumentação manual.
🏗️ 1. Arquitetura de Descoberta e Service Maps
A descoberta em runtime opera através de duas abordagens complementares:
- Instrumentação no Kernel via eBPF (Zero-Code Instrumentation): Inspeciona chamadas de sistema (
sys_enter_connect,sys_enter_write,sys_enter_read,tcp_v4_connect) no nível do kernel Linux para correlacionar processos, portas, sockets e payloads L7 (HTTP, gRPC, MySQL, Postgres, Redis, Kafka) sem alterar o binário da aplicação. - Instrumentação de Aplicação via OpenTelemetry / W3C Trace Context: Injeta cabeçalhos padronizados (
traceparent,tracestate,baggage) através de SDKs/Agentes de linguagem (Java Bytecode Agent, Go eBPF, Node.js Hooks, Python OpenTelemetry Instrumentation) para reconstruir árvores completas de Spans (DAG - Directed Acyclic Graph).
flowchart LR
subgraph Client["Cliente / Gateway"]
GW["API Gateway"]
end
subgraph ServiceA["Serviço A (Order Service)"]
A_APP["App Runtime"]
A_OTEL["OTel SDK / OBI (eBPF)"]
end
subgraph ServiceB["Serviço B (Payment Service)"]
B_APP["App Runtime"]
B_OTEL["OTel SDK / OBI"]
end
subgraph Storage["Datastores & Queues"]
DB[(PostgreSQL)]
KAFKA[[Kafka Queue]]
end
subgraph Backends["Tracing & Map Backends"]
COL["OpenTelemetry Collector"]
TEMPO["Grafana Tempo / Jaeger / SigNoz / SkyWalking"]
MAP["Dynamic Service Map Graph"]
end
GW -->|"HTTP /traceparent"| A_APP
A_APP -->|"gRPC /traceparent"| B_APP
A_APP -->|"SQL Query"| DB
B_APP -->|"Publish Event"| KAFKA
A_OTEL -.->|"OTLP Export (gRPC:4317)"| COL
B_OTEL -.->|"OTLP Export"| COL
COL --> TEMPO
TEMPO --> MAP
🛠️ 2. Ferramentas Especialistas de Descoberta
1. OpenTelemetry eBPF Instrumentation (OBI) / OpenTelemetry Operator
- Conceito: Instrumentação transparente no nível do SO que captura tráfego de rede e protocolos de aplicação (HTTP/1.1, HTTP/2, gRPC, bancos de dados) interceptando syscalls de socket e bibliotecas SSL (OpenSSL, Go Crypto, BoringSSL) com decodificação de tráfego HTTPS em runtime antes da criptografia.
- Configuração do OpenTelemetry Collector (
otel-collector-config.yaml):
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 1s
send_batch_size: 1024
memory_limiter:
check_interval: 1s
limit_percentage: 75
spike_limit_percentage: 20
exporters:
otlp/tempo:
endpoint: "tempo:4317"
tls:
insecure: true
otlp/signoz:
endpoint: "signoz-otel-collector:4317"
tls:
insecure: true
logging:
loglevel: debug
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp/tempo, otlp/signoz, logging]
2. Caretta (eBPF Service Network Map)
- Conceito: Utilitário leve baseado em eBPF que monitora conexões de rede em tempo real no cluster Kubernetes, resolvendo IPs para Pods, Services e Namespaces, e gerando grafos de topologia e taxa de throughput/latência diretamente no Grafana.
- Instalação via Helm:
helm repo add groundcover https://helm.groundcover.com
helm repo update
helm install caretta groundcover/caretta --namespace caretta --create-namespace
3. Jaeger (CNCF Distributed Tracing)
- Conceito: Sistema de rastreamento distribuído ponta a ponta que permite análise de caminho crítico (Critical Path Analysis), correlação de latência p95/p99 e visualização de grafos de dependência direta entre serviços.
- Geração do Grafo de Dependências do Jaeger:
# Processar dependências históricas a partir do armazenamento (Elasticsearch/OpenSearch/Cassandra)
java -jar jaeger-spark-dependencies.jar
4. Zipkin
- Conceito: Sistema de tracing distribuído baseado na especificação Dapper do Google, oferecendo agregação de traces via API REST e visualização de dependências através do Zipkin Dependencies Engine (Spark/Flink).
5. Apache SkyWalking
- Conceito: Plataforma de gerenciamento de desempenho de aplicações (APM) e observabilidade de malha de serviços (Service Mesh), capaz de gerar mapas topológicos interativos (Topology Engine) correlacionando métricas de ouro (Throughput, Latency, Errors) diretamente nos vértices do grafo.
6. SigNoz
- Conceito: Plataforma unificada de observabilidade baseada em ClickHouse que consome traces, métricas e logs via OpenTelemetry nativo, fornecendo Service Map automático e detecção de anomalias em chamadas externas e downstream.
7. Grafana Tempo & TraceQL
- Conceito: Backend de traces massivamente escalável e de baixo custo de armazenamento (Object Storage S3/GCS) integrado ao Grafana Service Map e permitindo queries avançadas via TraceQL.
- Exemplo de Consulta TraceQL para detecção de dependência degradada:
{ .http.status_code >= 500 && duration > 2s } | select(.service.name, .http.target, .error)
📋 3. Matriz de Propagação de Contexto W3C (Trace Context)
Ao projetar ou auditar sistemas de microsserviços, garanta a propagação consistente dos seguintes cabeçalhos HTTP:
| Cabeçalho | Formato | Finalidade |
|---|---|---|
traceparent |
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01 |
Versão (00), TraceID (16 bytes hex), ParentSpanID (8 bytes hex), TraceFlags (01=sampled) |
tracestate |
rojo=1,congo=2 |
Metadados proprietários específicos de vendors de tracing |
baggage |
userId=alice,env=prod,region=us-east-1 |
Propagação de contexto de negócio entre todas as camadas do grafo |
🎯 4. Boas Práticas e Checklist de Validação
- Zero-Code eBPF vs SDKs: Utilize eBPF para descoberta instantânea de topologia sem reinicialização de pods; use SDKs OpenTelemetry quando for necessário capturar atributos de negócio ricos (ex:
user_id,order_id). - Taxa de Amostragem (Sampling): Em ambientes de alto volume (high-throughput), utilize Head-based Sampling (1% a 5%) ou Tail-based Sampling no OTel Collector para reter 100% de erros e requisições lentas.
- Padronização Semântica: Siga rigorosamente as OpenTelemetry Semantic Conventions para nomes de spans (
HTTP GET /orders/{id},SELECT FROM users), atributos (db.system,net.peer.name,rpc.service).