У меня есть док-контейнер Tomcat и док-контейнер Filebeat, оба работают и работают.
Моя цель: Мне нужно собрать журналы Tomcat из запущенного контейнера Tomcat в контейнер Filebeat.
Проблема: Я не знаю, как получить собранные файлы журналов из контейнера Tomcat.
То, что я пробовал до сих пор: Я попытался создать том Docker и добавить журналы Tomcat к этому тому и получить к нему доступ из контейнера filebeat, но безуспешно.
Структура: Я написал файл docker-compose.yml в проекте Logstash (корневой каталог проекта) со следующей структурой проекта. (Здесь я хочу запустить и запустить Elasticsearch, Logstash, Filebeat и Kibana Docker контейнеры из одного файла конфигурации). 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-Containers.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 для целей визуализации.
- На данный момент я могу собирать журналы локальных машин (хостов) и визуализировать их в Кибане. (/ Var / log /)
Моя проблема:
- Мне нужно знать правильный способ получения собранных журналов Tomcat из контейнера Tomcat и пересылать их в контейнер logstash через контейнер filebeat.
Любая дискуссия, ответ или любая помощь, чтобы понять, как это сделать, весьма ожидаема.
Спасибо.