Сбор журналов tomcat из контейнера докеров Tomcat в контейнер докеров Filebeat

У меня есть контейнер докеров Tomcat и контейнер докеров Filebeat, которые работают.

Моя цель: мне нужно собрать журналы tomcat от запущенного контейнера Tomcat до контейнера Filebeat.

Проблема: я не знаю, как получить собранные файлы журнала из контейнера Tomcat.

Что я пробовал до сих пор: я попытался создать том докера и добавить журналы tomcat к этому тому и получить доступ к этому тому из контейнера filebeat, но безуспешно.

Структура: я написал файл docker-compose.yml в проекте Logstash (корневой каталог проекта) со следующей структурой проекта (здесь я хочу запустить и запустить контейнеры докеров Elasticsearch, Logstash, Filebeat и Kibana. из одного конфигурационного файла). docker-контейнеры (корневой каталог проекта) со следующей структурой (здесь я хочу запускать и запускать контейнеры Tomcat, Nginx и Postgres из одного файла конфигурации).

  • Logstash: содержит 4 основных подкаталога (Filebeat, Logstash, Elasticsearch и Kibana), файл ENV и файл docker-compose.yml. Оба подкаталога содержат Dockerfiles для извлечения образов и сборки контейнеров.

  • docker-container: содержит 3 основных подкаталога (Tomcat, Nginx и Postgres). ENV-файл и файл docker-compose.yml. Оба подкаталога содержат отдельные Dockerfiles для извлечения образа докера и сборки контейнера.

  • Примечание: я думаю, что эта базовая структура поможет мне понять мои требования.

файлы docker-compose.yml

Файл logstash.docker-compose.yml

version: '2'
services:


  elasticsearch:
    container_name: OTP-Elasticsearch
    build:
      context: ./elasticsearch
      args:
        - ELK_VERSION=${ELK_VERSION}
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk

  filebeat:
    container_name: OTP-Filebeat
    command:
      - "-e"
      - "--strict.perms=false"
    user: root
    build:
      context: ./filebeat
      args:
        - ELK_VERSION=${ELK_VERSION}
    volumes:
      - ./filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on: 
      - elasticsearch
      - logstash

  logstash:
    container_name: OTP-Logstash
    build:
      context: ./logstash
      args:
        - ELK_VERSION=${ELK_VERSION}
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro
    expose:
      - 5044/tcp
    ports:
      - "9600:9600"
      - "5044:5044"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    links:
      - elasticsearch
    depends_on:
      - elasticsearch


  kibana:
    container_name: OTP-Kibana
    build:
      context: ./kibana
      args:
        - ELK_VERSION=${ELK_VERSION}
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    ports:
      - "5601:5601"
    networks:
      - elk
    links:
      - elasticsearch
    depends_on: 
      - elasticsearch
      - logstash
      - filebeat

networks:
  elk:
    driver: bridge

файл docker-container.docker-compose.yml

version: '2'
services:

  # Nginx
  nginx:
    container_name: OTP-Nginx
    restart: always
    build: 
      context: ./nginx
      args:
        - comapanycode=${COMPANY_CODE}
        - dbtype=${DB_TYPE}
        - dbip=${DB_IP}
        - dbname=${DB_NAME}
        - dbuser=${DB_USER}
        - dbpassword=${DB_PASSWORD}
        - webdirectory=${WEB_DIRECTORY}
    ports:
      - "80:80"
    links:
      - db:db
    volumes:
      - ./log/nginx:/var/log/nginx
    depends_on:
      - db

  # Postgres
  db:
    container_name: OTP-Postgres
    restart: always
    ports:
      - "5430:5430"
    build: 
      context: ./postgres
      args:
        - food_db_version=${FOOD_DB_VERSION}
        - dbtype=${DB_TYPE} 
        - retail_db_version=${RETAIL_DB_VERSION}
        - dbname=${DB_NAME} 
        - dbuser=${DB_USER}
        - dbpassword=${DB_PASSWORD}
    volumes:
      - .data/db:/octopus_docker/postgresql/data

  # Tomcat
  tomcat:
    container_name: OTP-Tomcat
    restart: always
    build: 
      context: ./tomcat
      args:
        - dbuser=${DB_USER}
        - dbpassword=${DB_PASSWORD}
    links:
      - db:db
    volumes:
      - ./tomcat/${WARNAME}.war:/usr/local/tomcat/webapps/${WARNAME}.war
    ports:
      - "8080:8080"
    depends_on:
      - db
      - nginx 

Дополнительные файлы:

filebeat.yml (файл конфигурации внутри Logstash / Filbeat / config /)

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/tomcat/logs/.*log
output.logstash:
  hosts: ["logstash:5044"]

Дополнительная информация:

  • Я использую Ubuntu 18.04.
  • Моя цель - собирать журналы tomcat из запущенного контейнера tomcat и пересылать их в Logstash, фильтровать журналы и пересылать эти журналы в Elasticsearch и, наконец, в Kibana для целей визуализации.
  • На данный момент я могу собирать журналы локальной машины (хоста) и визуализировать их в Kibana. (/ Var / log /)

Моя проблема:

  • Мне нужно знать, как правильно получить собранные журналы tomcat из контейнера tomcat и переслать их в контейнер logstash через контейнер filebeat.

Ожидается любое обсуждение, ответ или любая помощь в понимании того, как это сделать.

Спасибо.


person Yachitha Sandaruwan    schedule 14.01.2019    source источник
comment
обратитесь к этому репозиторию: elk-with-filebeat-by-docker-compose   -  person GNOKOHEAT    schedule 17.01.2020


Ответы (1)


Так что ... Создайте общий том для всех контейнеров и настройте Tomcat для сохранения файлов журнала в эту папку. Если вы можете объединить все службы в один docker-compose.yml, просто настройте том внутри:

docker-compose.yml

version: '3'
services:
  one:
    ...
    volumes:
      - logs:/var/log/shared
  two:
    ...
    volumes:
      - logs:/var/log/shared
volumes:
  logs:

Если вам нужно несколько docker-compose.yml файлов, заранее создайте том глобально с помощью docker volume create logs и сопоставьте его с обоими файлами compose:

version: '3'
services:
  one:
    ...
    volumes:
      - logs:/var/log/shared
  two:
    ...
    volumes:
      - logs:/var/log/shared
volumes:
  logs:
    external: true
person grapes    schedule 14.01.2019
comment
Извините за такую ​​наглядность, я постараюсь это сделать. Спасибо. - person Yachitha Sandaruwan; 14.01.2019
comment
Ничего страшного, неплохо было бы разместить полное определение проблемы - person grapes; 14.01.2019
comment
Я отредактировал свой код в качестве руководства и добавил общий объем. Мне нужно знать, как мне настроить входной путь для filebeat, чтобы собирать журналы с этого общего тома. - person Yachitha Sandaruwan; 16.01.2019
comment
Мне удалось собрать логи из контейнера tomcat с помощью вашего простого примера. Спасибо еще раз. - person Yachitha Sandaruwan; 16.01.2019