Observability: Docker compose for Loki, Promtail and Grafana | Journal

Observability: Docker compose for Loki, Promtail and Grafana

May 5, 2024
#docker #journal
Did some exploratory ELK stack stuff. Need a Docker Compose compatible logger

 
Loki, Grafana, Promtail
DC file that works!
yaml
	x-logging: &default-logging
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"
    tag: "{{.ImageName}}|{{.Name}}|{{.ImageFullID}}|{{.FullID}}"
    
   dashboard-frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
      args:
        - VITE_API_BASE_URL=https://${API_BASE_URL}/api
        - VITE_PARTICIPANT_BASE_URL=https://${PARTICIPANT_BASE_URL}
        - VITE_BUILD_VERSION=${BUILD_VERSION}
        - VITE_USE_PARTICIPANT_ROUTER=0
    restart: unless-stopped
    depends_on:
      - api-server
    logging: *default-logging
  
  promtail:
    image: grafana/promtail:2.8.0
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ./promtail-config.yaml:/etc/promtail/config.yaml
    command: -config.file=/etc/promtail/config.yaml
    networks:
      - default

  loki:
    image: grafana/loki:latest
    restart: unless-stopped
    networks:
      - default
    volumes:
      - loki_data:/loki
    command: -config.file=/etc/loki/local-config.yaml

  grafana:
    image: grafana/grafana:latest
    restart: unless-stopped
    entrypoint:
      - sh
      - -euc
      - |
        mkdir -p /etc/grafana/provisioning/datasources
        cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
        apiVersion: 1
        datasources:
          - name: Loki
            type: loki
            access: proxy
            url: http://loki:3100
        EOF
        /run.sh
    ports:
      - "3000:3000"
    networks:
      - default
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - loki

volumes:
  loki_data:
  grafana_data:

networks:
  default:
    driver: bridge