jaegertracing / jaeger

CNCF Jaeger, a Distributed Tracing Platform
https://www.jaegertracing.io/
Apache License 2.0
20.18k stars 2.4k forks source link

[Bug]: Jaeger doesn't show my service dependencies #3803

Closed paule96 closed 3 months ago

paule96 commented 2 years ago

What happened?

I'm working on a proof of concept, to use open telemetry for projects at work. So far I'm happy to see what is all possible.

So currently my setup is the following:

graph TD;
   Application==Sends all telemetry data==>Collector;
   subgraph App
     Application;
   end
   subgraph Monitoring
      Prometheus--Get all metrics data-->Collector;
      otherMetric(other metrics tool)--Get all metrics data-->Collector;
      Jäger--get all tracing data-->Collector;
      ZipKin--get all tracing data-->Collector;
      othertrace(other tracing collectors)--get all tracing data-->Collector;
      Grafana--visualize the metrics-->Prometheus;
      Grafana--visualize the tracing-->Jäger;
    end

The problem what I currently have is that my jaeger instance doesn't show the service dependencies like for example ZipKin does. Here a screenshot of zipkin:

image

Jaeger also sees that the connection exsist in the traces:

image

But under system architecture everthing is empty

image

Steps to reproduce

  1. Create a sample application that does communication to another service. (in my case it's written in dotnet and communicate with a cosmos db)
  2. Add OpenTelemetry to you app
  3. Configure the open telemetry agent
receivers:
  otlp:
    protocols:
      grpc:
      http:

exporters:
  prometheus:
    endpoint: "0.0.0.0:8889"
    const_labels:
      label1: value1
  logging:

  zipkin:
    endpoint: "http://zipkin-all-in-one:9411/api/v2/spans"
    format: proto

  jaeger:
    endpoint: jaeger-all-in-one:14250
    tls:
      insecure: true

processors:
  batch:

extensions:
  health_check:
  pprof:
    endpoint: :1888
  zpages:
    endpoint: :55679

service:
  extensions: [pprof, zpages, health_check]
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [logging, jaeger, zipkin]
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [logging, prometheus]
  1. Start the application
  2. Compare ZipKin and jaeger with each other

Expected behavior

Jaeger just shows the dependencies like zipkin does between the systems.

Relevant log output

No response

Screenshot

No response

Additional context

No response

Jaeger backend version

1.35.0

SDK

OpenTelemetry Dotnet

Pipeline

OTEL SDK -> OTEL collector -> Jaeger all in one

Stogage backend

jaeger all in one

Operating system

docker jaeger all in one

Deployment model

Docker

Deployment configs

version: "3.8"
services:
  # vscode
  vscode:
    image:  mcr.microsoft.com/vscode/devcontainers/dotnet:6.0
    environment:
      - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/vscode/.dotnet/tools
    # don't shutdown container if it's fails
    command: ["/bin/sh", "-c", "sudo cp -RTv /workspaces/opentelemetrysample/docker/ /configs/ && cd /workspaces/opentelemetrysample && curl -k https://cosmosdb:8081/_explorer/emulator.pem > azure.cosmosdb.crt && sudo cp azure.cosmosdb.crt /usr/local/share/ca-certificates/azure.cosmosdb.crt && sudo update-ca-certificates && dotnet tool restore && dotnet dev-certs https && while sleep 1000; do :; done"]
    # command: ["/bin/sh", "-c", "while sleep 1000; do :; done"]
    user: vscode
    volumes:
      - ..:/workspace:cached
      - configs:/configs
    networks:
      - network
    hostname: vscode
    depends_on:
      - cosmosdb
  cosmosdb:
    image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
    environment:
      - AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10
      - AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true
    networks:
      - network
  # Jaeger
  jaeger-all-in-one:
    image: jaegertracing/all-in-one:latest
    ports:
      - "16686:16686"
      - "14268"
      - "14250"
    networks:
      - network
    hostname: jaeger-all-in-one
    environment:
      - METRICS_STORAGE_TYPE=prometheus
      - PROMETHEUS_SERVER_URL=http://prometheus:9090/
      - COLLECTOR_OTLP_ENABLED=true
  # Zipkin
  zipkin-all-in-one:
    image: openzipkin/zipkin:latest
    ports:
      - "9411:9411"
    networks:
      - network
    hostname: zipkin-all-in-one
  # prometheus
  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    command: ["--config.file=/usr/share/prometheusconfig/prometheus.yaml", "--storage.tsdb.path=/prometheus", "--web.console.libraries=/usr/share/prometheus/console_libraries", "--web.console.templates=/usr/share/prometheus/consoles"]
    volumes:
      - type: volume
        source: configs
        target: /usr/share/prometheusconfig
    ports:
      - "9090:9090"
    networks:
      - network
    hostname: prometheus
    depends_on:
      - vscode
  otel-collector:
    image: otel/opentelemetry-collector-contrib-dev:latest
    command: ["--config=/otel/config/otel-collector-config.yaml", "${OTELCOL_ARGS}"]
    volumes:
      # - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
      - type: volume
        source: configs
        target: /otel/config
    #ports:
      #- "1888:1888"   # pprof extension
      #- "8888:8888"   # Prometheus metrics exposed by the collector
      #- "8889:8889"   # Prometheus exporter metrics
      #- "13133:13133" # health_check extension
      #- "4317:4317"   # OTLP gRPC receiver
      # - "55670:55679" # zpages extension
      # - "9090:9090"   # prometheus
      # - "9411:9411"   # zipkin
      # - "16686:16686" # jäger
    depends_on:
      - prometheus
      # - zipkin-all-in-one
      - jaeger-all-in-one
    networks:
      - network
    hostname: otel-collector
  grafana:
    image: grafana/grafana-oss:latest
    environment:
      - GF_PATHS_PROVISIONING=/configs/grafana
    volumes:
      - type: volume
        source: configs
        target: /configs/
    depends_on:
      - vscode
      - otel-collector
    ports:
      - "3000:3000"
    networks:
      - network
  crank-agent:
    image: mcr.microsoft.com/dotnet/sdk:6.0
    depends_on:
      - vscode
    volumes:
      - type: volume
        source: configs
        target: /configs/
    # user: crank
    environment:
      - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.dotnet/tools
    command: ["/bin/sh", "-c", "mkdir -p .config && cp /configs/dotnet-tools.json .config/dotnet-tools.json && dotnet tool restore && dotnet tool run crank-agent"]
    networks:
      - network

networks:
  network:
volumes:
  configs:
yurishkuro commented 2 years ago

Jaeger only shows instrumented services in the DAG

paule96 commented 2 years ago

Ahhh that's sad. Okay so I must find out how to add cosmos to the system... That will be a challenge. Maybe this is then a feature request instead of a bug? :) I mean it would be still nice to have this option. In special if your service is build on top of other public services that are not controlled by you.

yurishkuro commented 2 years ago

I think we already have a similar ticket. It's not too difficult to support.

paule96 commented 2 years ago

If you have a link I could try my best to implement it. If this is a ticket for a nice first contribution. ✌️

yurishkuro commented 2 years ago

Had a quick look, cannot easily find that other ticket. Booked a new one with some details #3804

jkowall commented 3 months ago

Handled in new ticket, closing this out as it's not a bug but a new feature request.