Este repositório contém os arquivos e instruções necessárias para instrumentar uma aplicação Spring Boot em Kubernetes utilizando OpenTelemetry. Através deste guia, você aprenderá a coletar e analisar dados de telemetria, configurando um ambiente robusto de observabilidade.
Telemetria é o processo de coleta, transmissão e análise de dados de diferentes parâmetros de um sistema, em tempo real. No contexto de TI, isso inclui métricas, traces e logs, que são cruciais para monitorar e diagnosticar aplicações.
- Métricas: Dados quantitativos que mostram o desempenho do sistema ao longo do tempo.
- Traces: Rastream o caminho de uma requisição ao longo de diferentes serviços e componentes.
- Logs: Registro detalhado de eventos que ocorreram dentro do sistema.
OpenTelemetry é uma solução de código aberto que fornece uma estrutura unificada para coletar métricas, traces e logs de aplicações distribuídas, facilitando a instrumentação automática das aplicações.
Neste caso de uso iremos instrumentar uma aplicação em java exportando trace para o collector do open telemetry, onde o collector processa os traces e exporta para o Grafana Tempo, cujo pode ser visualizado pelo grafana.
Este repositório contém os seguintes arquivos:
-
collector.yaml: Configuração do OpenTelemetry Collector para coletar traces.
-
instrumentation.yaml: Configuração da instrumentação do OpenTelemetry para a aplicação.
-
pod-sending-span.yaml: Configuração do pod da aplicação Java que envia spans.
-
grafana.yaml: Configuração do Grafana para visualizar os rastros coletados.
-
minio.yaml: Configuração do Mini-O para servir como armazenamento de objetos.
-
tempo-operador.yaml: Configuração do Operator do Grafana Tempo.
-
tempo-stack.yaml: Configuração do Tempo sendo realizado o deploy com a stack em micro serviços.
- Um cluster Kubernetes rodando (utilizaremos Minikube).
- Cert-manager instalado no cluster Kubernetes.
kubectl
instalado e configurado.
-
Instale o Minikube:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
-
Inicie o Minikube:
minikube start
-
Instale o Cert-Manager:
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.yaml
-
Verifique se os pods do Cert-Manager estão em execução:
kubectl get pods --namespace cert-manager
- Aplique o OpenTelemetry Operator no seu cluster:
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
- Aplique a configuração do Collector:
kubectl apply -f collector.yaml
- Aplique a configuração de Instrumentação:
kubectl apply -f instrumentation.yaml
- Aplique o arquivo de instalação do miniO:
kubectl apply -f minio.yaml
- Aplique a instalação do operator
kubectl apply -f tempo-operator.yaml
- Aplique o arquivo de configuração da stack em micro serviços do grafana tempo:
kubectl apply -f tempo-stack.yaml
- Aplique a configuração do Pod:
kubectl apply -f pod-sending-span.yaml
- Realize uma requisição à aplicação Java:
kubectl exec -it myapp -- curl "http://localhost:8080"
-
Aplique a configuração do Grafana:
kubectl apply -f grafana.yaml
-
Acesse o Grafana:
minikube service grafana --url
-
Acesse o rastro no grafana:
- No painel do Grafana, vá para Explore.
- No campo "Query Type", escolha a opção:
Search
. - Clique em Run Query.
- Clique em algum TraceID.
Este repositório e guia fornecem uma base sólida para a instrumentação de aplicações em Kubernetes utilizando OpenTelemetry. Com estas configurações, você terá um ambiente de observabilidade robusto que facilita a identificação e resolução de problemas de desempenho e comportamento em suas aplicações.
Se tiver dúvidas ou precisar de assistência, sinta-se à vontade para abrir uma issue.