Replies: 4 comments 2 replies
-
Para teste de integração eu fiz algo mais simples com Spring Web e MockMVC, com o MockMVC fazia o teste das chamadas e respostas rest, daí tinha a opção de mockar o service ou usar o contexto do spring e conexão com banco de dados. Sobre Observabilidade é legal, não explorei muito ainda, então vou ficar de olho na discussão e fazer pesquisas para melhorar conhecimento sobre. |
Beta Was this translation helpful? Give feedback.
-
Por mais que não tenha muita experiência com as ferramentas, acredito que o Prometheus e o Grafana sejam boas opções para resolver a falta de um componente de métricas, alarmes, análise e visualização com dashboards personalizados. |
Beta Was this translation helpful? Give feedback.
-
Isso me fez lembrar do antigo trabalho. |
Beta Was this translation helpful? Give feedback.
-
Etapas e melhores práticas para usar o OpenTelemetry com o objetivo de observabilidade e métricas:
Ao seguir essas etapas e práticas recomendadas, você pode implementar o OpenTelemetry de forma eficaz para melhorar a observabilidade e o monitoramento de seu sistema, garantindo um desempenho mais robusto e uma melhor experiência do usuário. Exemplo de como usar o OpenTelemetry em um aplicativo Go para coletar métricas e traces. 1.Instalação das Dependências Para começar, você precisa instalar as bibliotecas necessárias. Execute o seguinte comando: go get go.opentelemetry.io/otel
go get go.opentelemetry.io/otel/sdk
go get go.opentelemetry.io/otel/exporters/trace/jaeger
go get go.opentelemetry.io/otel/instrumentation/net/http/otelhttp 2.Código de Exemplo Aqui está um exemplo simples de um servidor HTTP que utiliza OpenTelemetry para coletar traces e métricas: package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/trace/jaeger"
"go.opentelemetry.io/otel/sdk"
"go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/instrumentation/net/http/otelhttp"
)
func initTracer() func() {
// Configurar o exportador Jaeger
exp, err := jaeger.NewRawExporter(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://localhost:14268/api/traces")))
if err != nil {
log.Fatalf("failed to create Jaeger exporter: %v", err)
}
// Configurar o recurso
res, err := resource.New(context.Background(), resource.WithAttributes(
// Defina atributos de recurso, como nome do serviço
resource.AttributeString("service.name", "my-go-service"),
))
if err != nil {
log.Fatalf("failed to create resource: %v", err)
}
// Configurar o tracer provider
tp := trace.NewTracerProvider(
trace.WithBatcher(exp),
trace.WithResource(res),
)
otel.SetTracerProvider(tp)
// Retornar uma função para fechar o tracer provider ao final
return func() {
if err := tp.Shutdown(context.Background()); err != nil {
log.Fatal(err)
}
}
}
func helloHandler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
tracer := otel.Tracer("example.com/hello")
_, span := tracer.Start(ctx, "helloHandler")
defer span.End()
fmt.Fprintf(w, "Hello, World!")
}
func main() {
// Inicializar o tracer
shutdown := initTracer()
defer shutdown()
// Instrumentar o handler HTTP
http.Handle("/hello", otelhttp.NewHandler(http.HandlerFunc(helloHandler), "hello"))
log.Println("Servidor ouvindo na porta :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
} 3.Executar o Jaeger Se você não tiver o Jaeger em execução, você pode rapidamente iniciar uma instância usando Docker: docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-e JAEGER_AGENT_HOST=localhost \
-e JAEGER_SAMPLER_TYPE=const \
-e JAEGER_SAMPLER_PARAM=1 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 14268:14268 \
-p 14250:14250 \
-p 16686:16686 \
jaegertracing/all-in-one:1.29 4.Testar o Servidor Agora, você pode executar seu aplicativo Go: go run main.go Em seguida, faça uma requisição para o endpoint: curl http://localhost:8080/hello 5.Visualizar os Dados no Jaeger Acesse a interface do Jaeger em 'http://localhost:16686'. Você deverá ver os traces coletados a partir do seu aplicativo Go. Considerações Finais Este exemplo mostra como configurar o OpenTelemetry em um aplicativo Go para coletar traces e enviar para o Jaeger. Você pode expandir isso para coletar métricas e logs, dependendo das suas necessidades. Certifique-se de ajustar as configurações e instrumentar outras partes do seu código conforme necessário para uma observabilidade completa. |
Beta Was this translation helpful? Give feedback.
-
Agora temos um serviço exposto e conseguimos começar a consultar a API.
Além disso fizemos alguns testes de integração, verificamos tracing e logging.
Você havia trabalhado anteriormente com testes de integração? É uma boa oportunidade para validação de contratos e verificações end-to-end.
OpenTelemetry nos dá uma visão interessante do comportamento da aplicação. Observabilidade é um tópico sempre em alta. Contudo não estamos adicionado um componente para Métricas. Algum sugestão de ferramenta?
Beta Was this translation helpful? Give feedback.
All reactions