Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro depois de subir o -javaagente.jar

Eu to com B.O a quase 1 semana tentando resolver e nada, não tem cristo que acha o que acontece, já fiz de tudo que postaram no fórum e nada Estou na semana 21 rastreamento, módulo 3 aula 5 Eu rodo esse comando igual no vídeo java -javaagent:opentelemetry/opentelemetry-javaagent.jar -Dotel.service.name=api-cursos -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=none -Dotel.integration.jdbc.datasource.enabled=true -Dotel.instrumentation.jdbc.datasource.enabled=true -Dotel.exporter.otlp.endpoint=http://localhost:4318/ Dotel.exporter.otlp.protocol=http/protobuf -jar target/*.jar

Ele roda, mas começa a dar esses erros, e no browser ele não acha o api-cursos.

E da esse erro na imagem, eu não faço ideia do porquê e ja tentei N coisas Insira aqui a descrição dessa imagem para ajudar na acessibilidade

5 respostas

Olá Giovana,

Entendo sua frustração, mas vamos tentar resolver isso juntos. Pelo erro na imagem, parece que o HttpExporter do OpenTelemetry está falhando ao tentar exportar os spans para o endpoint http://localhost:4317. O erro "unexpected end of stream" geralmente indica que o serviço no endpoint não está respondendo corretamente ou a conexão está sendo resetada.

Aqui estão algumas sugestões para solucionar o problema:

  1. Verificar se o Jaeger está rodando corretamente:

    • Certifique-se de que o Jaeger está de fato rodando e escutando nas portas corretas. Você pode verificar isso com o comando docker ps para ver se os contêineres do Jaeger estão ativos.
  2. Verificar a configuração do endpoint:

    • No seu comando, você está usando -Dotel.exporter.otlp.endpoint=http://localhost:4318. Certifique-se de que o Jaeger está configurado para escutar na porta 4318 para o protocolo OTLP. Se não, ajuste a porta conforme necessário.
  3. Verificar a configuração do protocolo:

    • No comando, você está usando Dotel.exporter.otlp.protocol=http/protobuf. Certifique-se de que o Jaeger está configurado para aceitar esse protocolo. Se necessário, ajuste para http/json.
  4. Verificar a conectividade:

    • Tente acessar http://localhost:4318 no seu navegador ou usando curl para ver se o serviço está acessível:
      curl http://localhost:4318
      
    • Se não conseguir acessar, pode ser que o serviço não esteja rodando corretamente ou há um problema de rede.
  5. Revisar o comando de execução:

    • Certifique-se de que o comando que você está usando está correto e que todos os parâmetros estão configurados corretamente:
      java -javaagent:opentelemetry/opentelemetry-javaagent.jar -Dotel.service.name=api-cursos -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=none -Dotel.integration.jdbc.datasource.enabled=true -Dotel.instrumentation.jdbc.datasource.enabled=true -Dotel.exporter.otlp.endpoint=http://localhost:4318 -Dotel.exporter.otlp.protocol=http/protobuf -jar target/*.jar
      

Se após essas verificações o problema persistir, por favor, compartilhe mais detalhes sobre a configuração do Jaeger e qualquer outro log que possa ajudar na identificação do problema.

Espero ter ajudado e bons estudos!

Fiz esse comando curl http://localhost:4318 ele não conecta Fiz a troca do http/protobuf por /json, ele não deu aquele erro de antes. Porém apareceu esse Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E continua sem aparecer o api-cursos

Giovana, eu vou dar uma revisada nesse curso. A gente revisou recentemente os 4 primeiros cursos da formação SRE, mas esse é último curso e ainda não foi revisado.

Te retorno com a solução ainda hoje.

solução!

Oi Giovana!

Pelo que eu consegui avaliar é um problema por conta da versão do container docker do opentelemetry-collector. No curso foi configurado no arquivo docker-compose.yml o seguinte serviço:

collector-api-cursos:
    image: otel/opentelemetry-collector:latest
    container_name: collector-api-cursos
    volumes:
      - ./collector/otel-collector-config.yaml:/etc/otel-collector-config.yaml
    command: ["--config=/etc/otel-collector-config.yaml"]
    ports:
      - 4317:4317
      - 4318:4318
    networks:
      - api
      - monit
    depends_on:
      - loki-api-cursos

Repare na primeira linha que está sendo configurado para baixar a imagem otel/opentelemetry-collector:latest, sendo que o :latest faz o docker baixar a última versão dessa imagem disponível e justamente aí está o problema.

Nas útlimas versões do collector foi feita uma mudança e o projeto do curso não vai funcionar sem realizar diversos ajustes. A minha sugestão é você utilizar a versão que foi utilizada pelo instrutor na gravação do curso, que foi a versão 0.63.0.

Altere no docker-compose.yml então essa linha para:

image: otel/opentelemetry-collector:0.63.0

Pare os containers docker com o comando docker-compose down e suba novamente com o comando docker-compose up -d que deve resolver o problema.

Obs: Pare a aplicação também e execute novamente com o comando:

java -javaagent:opentelemetry/opentelemetry-javaagent.jar -Dotel.service.name=api-cursos -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=none -Dotel.integration.jdbc.datasource.enabled=true -Dotel.instrumentation.jdbc.datasource.enabled=true -Dotel.exporter.otlp.endpoint=http://localhost:4318 -Dotel.exporter.otlp.protocol=http/protobuf -jar target/*.jar

Aqui para mim funcionou tudo certinho com esse ajuste da versão do collector. Se não funcionar ou der algum outro erro, pode mandar por aqui.

Deu tudo certo, amém, muito obrigada.