DEV Community

Cover image for Running Kibana, Elastic, and APM with Docker Compose
Muhammad Sohail
Muhammad Sohail

Posted on

2

Running Kibana, Elastic, and APM with Docker Compose

Prerequisites

Ensure that Docker and Docker Compose are installed. If not, visit the official Docker website for installation instructions: Docker Installation.

Step 1: Create a docker-compose File

Create a file named elastic-stack.yml and paste the following content, do update the password where it says :

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.13.4
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=true
      - xpack.security.transport.ssl.enabled=false
      - ELASTIC_USERNAME=elastic
      - ELASTIC_PASSWORD=<password>
    ports:
      - 9200:9200
    volumes:
      - /data:/usr/share/elasticsearch/data
    networks:
      - elastic

  kibana:
    image: docker.elastic.co/kibana/kibana:8.13.4
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTIC_PASSWORD=<password>
      - ELASTICSEARCH_SERVICE_TOKEN=<token>
    ports:
      - 5601:5601
    networks:
      - elastic

  apm-server:
    image: docker.elastic.co/apm/apm-server:8.13.4
    container_name: apm-server
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTIC_PASSWORD=<password>
      - kibana.host=http://kibana:5601
    ports:
      - 8200:8200
    networks:
      - elastic

networks:
  elastic:
    driver: bridge
Enter fullscreen mode Exit fullscreen mode

Step 2: Start the Stack

Run the following command to start the Elastic stack:

sudo docker-compose -f elastic-stack.yml up -d

Step 3: Check Kibana Logs

Check the Kibana logs using:

sudo docker-compose -f elastic-stack.yml logs kibana

You might encounter the following error:
"value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function."

If so, generate a service token:

sudo docker exec -it elasticsearch elasticsearch-service-tokens create elastic/kibana kibana-system

  • generate a token using

sudo docker exec -it elasticsearch elasticsearch-service-tokens create elastic/kibana kibana-system

Step 4: Update the Token in docker-compose

Replace the environment variable in the Kibana service with the newly generated token:

kibana:
  image: docker.elastic.co/kibana/kibana:8.13.4
  container_name: kibana
  environment:
    - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    - ELASTICSEARCH_SERVICE_TOKEN=<token>
  ports:
    - 5601:5601
  networks:
    - elastic
Enter fullscreen mode Exit fullscreen mode

Restart kibana using

sudo docker-compose -f elastic-stack.yml restart kibana

Step 5: Verify the Stack

Check the status of the running containers:

docker ps

Your services should now be accessible on the following ports:

  • Elastic: 9200
  • Kibana: 5601
  • APM: 8200

Resolving Token Issues

If the generated token doesn’t work, you can manually create a Kibana system user:

curl -X POST "localhost:9200/_security/user/kibana_system" -H "Content-Type: application/json" -u elastic:password -d'
{
  "password": "<password>",
  "roles": ["kibana_system"]
}'

Enter fullscreen mode Exit fullscreen mode

Update your docker-compose file to use the newly created user credentials:

  kibana:
    image: docker.elastic.co/kibana/kibana:8.13.4
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTIC_PASSWORD=<password>

Enter fullscreen mode Exit fullscreen mode

Restart the stack:

sudo docker-compose -f elastic-stack.yml down
sudo docker-compose -f elastic-stack.yml up -d

Now your stack should function as expected.

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs