version: '3'

services:
  filebeat-elastic:
    image: docker.elastic.co/beats/filebeat:8.8.0
    restart: on-failure
    volumes:
      - ./elk/filebeat/filebeat-elastic.yml:/usr/share/filebeat/filebeat.yml:ro
    depends_on:
      - elastic

  filebeat-vlogs:
    image: docker.elastic.co/beats/filebeat:8.8.0
    restart: on-failure
    volumes:
      - ./elk/filebeat/filebeat-vlogs.yml:/usr/share/filebeat/filebeat.yml:ro
    depends_on:
      - vlogs

  generator:
    image: golang:1.23.1-alpine
    restart: always
    working_dir: /go/src/app
    volumes:
      - ./generator:/go/src/app
      - ./source_logs:/go/src/source_logs
    command:
      - go
      - run
      - main.go
      - -logsPath=/go/src/source_logs/logs
      - -outputRateLimitItems=10000
      - -syslog.addr=filebeat-elastic:12345
      - -syslog.addr2=filebeat-vlogs:12345
      - -logs.randomSuffix=false
    depends_on: [ filebeat-elastic, filebeat-vlogs ]

  elastic:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0
    volumes:
      - ./elk/elastic/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - elastic:/usr/share/elasticsearch/data
    environment:
      ES_JAVA_OPTS: "-Xmx2048m"

  kibana:
    image: docker.elastic.co/kibana/kibana:8.8.0
    volumes:
      - ./elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - '5601:5601'
    depends_on: [ elastic ]

  beat-exporter-elastic:
    image: trustpilot/beat-exporter:0.4.0
    command:
      - -beat.uri=http://filebeat-elastic:5066
    depends_on:
      - filebeat-elastic

  beat-exporter-vlogs:
    image: trustpilot/beat-exporter:0.4.0
    command:
      - -beat.uri=http://filebeat-vlogs:5066
    depends_on:
      - filebeat-vlogs

volumes:
  elastic: