Search code examples
dockerelasticsearchopentracingjaegerdistributed-tracing

How to configure Jaeger with elasticsearch?


I have tried executing this docker command to setup Jaeger Agent and jaeger collector with elasticsearch.

sudo docker run \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-e SPAN_STORAGE_TYPE=elasticsearch \
--name=jaeger \
jaegertracing/all-in-one:latest 

but this command gives the below error. How to configure Jaeger with ElasticSearch?

"msg":"Failed to init storage factory","error":"health check timeout: no Elasticsearch node available","errorVerbose":"no Elasticsearch node available\

Solution

  • After searching a solution for some time, I found a docker-compose.yml file which had the Jaeger Query,Agent,collector and Elasticsearch configurations.

    docker-compose.yml

      version: "3"
    
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:6.3.1
        networks:
          - elastic-jaeger
        ports:
          - "127.0.0.1:9200:9200"
          - "127.0.0.1:9300:9300"
        restart: on-failure
        environment:
          - cluster.name=jaeger-cluster
          - discovery.type=single-node
          - http.host=0.0.0.0
          - transport.host=127.0.0.1
          - ES_JAVA_OPTS=-Xms512m -Xmx512m
          - xpack.security.enabled=false
        volumes:
          - esdata:/usr/share/elasticsearch/data
    
      jaeger-collector:
        image: jaegertracing/jaeger-collector
        ports:
          - "14269:14269"
          - "14268:14268"
          - "14267:14267"
          - "9411:9411"
        networks:
          - elastic-jaeger
        restart: on-failure
        environment:
          - SPAN_STORAGE_TYPE=elasticsearch
        command: [
          "--es.server-urls=http://elasticsearch:9200",
          "--es.num-shards=1",
          "--es.num-replicas=0",
          "--log-level=error"
        ]
        depends_on:
          - elasticsearch
    
      jaeger-agent:
        image: jaegertracing/jaeger-agent
        hostname: jaeger-agent
        command: ["--collector.host-port=jaeger-collector:14267"]
        ports:
          - "5775:5775/udp"
          - "6831:6831/udp"
          - "6832:6832/udp"
          - "5778:5778"
        networks:
          - elastic-jaeger
        restart: on-failure
        environment:
          - SPAN_STORAGE_TYPE=elasticsearch
        depends_on:
          - jaeger-collector
    
      jaeger-query:
        image: jaegertracing/jaeger-query
        environment:
          - SPAN_STORAGE_TYPE=elasticsearch
          - no_proxy=localhost
        ports:
          - "16686:16686"
          - "16687:16687"
        networks:
          - elastic-jaeger
        restart: on-failure
        command: [
          "--es.server-urls=http://elasticsearch:9200",
          "--span-storage.type=elasticsearch",
          "--log-level=debug"
        ]
        depends_on:
          - jaeger-agent
    
    volumes:
      esdata:
        driver: local
    
    networks:
      elastic-jaeger:
        driver: bridge 

    The docker-compose.yml file installs the elasticsearch, Jaeger collector,query and agent.

    Install docker and docker compose first https://docs.docker.com/compose/install/#install-compose

    Then, execute these commands in order

     
    1. sudo docker-compose up -d elasticsearch
    
    2. sudo docker-compose up -d 
    
    3. sudo docker ps -a
    

    start all the docker containers - Jaeger agent,collector,query and elasticsearch.

    sudo docker start container-id

    access -> http://localhost:16686/