从 tomcat docker 容器收集 tomcat 日志到 Filebeat docker 容器
Collect tomcat logs from tomcat docker container to Filebeat docker container
我有一个 Tomcat docker 容器和 Filebeat docker 容器都已启动并且 运行ning.
我的 objective: 我需要从 运行ning Tomcat 容器收集 tomcat 日志到 Filebeat 容器。
问题: 我不知道如何从 Tomcat 容器中获取收集的日志文件。
到目前为止我尝试了什么: 我尝试创建一个 docker 卷并将 tomcat 日志添加到该卷并从中访问该卷filebeat 容器,但没有成功结束。
结构: 我在项目 Logstash(项目的根目录)下写了 docker-compose.yml 文件,项目结构如下。(这里我想要从一个配置文件启动 运行 Elasticsearch、Logstash、Filebeat 和 Kibana docker 容器)。 docker-containers(项目的根目录)具有以下结构(这里我想从一个配置文件中启动和 运行 Tomcat、Nginx 和 Postgres 容器)。
Logstash:包含4个主要子目录(Filebeat、Logstash、Elasticsearch和Kibana)、ENV文件和docker-compose.yml文件。两个子目录都包含 Dockerfiles 以拉取图像并构建容器。
docker-containers:包含 3 个主要子目录(Tomcat、Nginx 和 Postgres)。 ENV 文件和 docker-compose.yml 文件。两个子目录都包含单独的 Dockerfiles 以拉取 docker 图像并构建容器。
注意:我认为这个基本结构有助于理解我的需求。
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"]
附加信息:
- 我使用的系统是Ubuntu18.04
- 我的目标是从 运行ning tomcat 容器收集 tomcat 日志并将它们转发到 Logstash 并过滤日志并将该日志转发到 Elasticsearch,最后转发到 Kibana 用于可视化目的.
- 现在我可以收集本地机器(主机)日志并在 Kibana 中可视化它们。(/var/log/)
我的问题:
- 我需要知道从 tomcat 容器收集 tomcat 日志并通过 filebeat 容器将它们转发到 logstash 容器的正确方法。
非常期待任何讨论、回答或任何有助于理解执行此操作的方法。
谢谢。
太糟糕了...在所有容器之间创建共享卷并设置 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
全局创建卷并将其映射到两个组合文件中:
version: '3'
services:
one:
...
volumes:
- logs:/var/log/shared
two:
...
volumes:
- logs:/var/log/shared
volumes:
logs:
external: true
我有一个 Tomcat docker 容器和 Filebeat docker 容器都已启动并且 运行ning.
我的 objective: 我需要从 运行ning Tomcat 容器收集 tomcat 日志到 Filebeat 容器。
问题: 我不知道如何从 Tomcat 容器中获取收集的日志文件。
到目前为止我尝试了什么: 我尝试创建一个 docker 卷并将 tomcat 日志添加到该卷并从中访问该卷filebeat 容器,但没有成功结束。
结构: 我在项目 Logstash(项目的根目录)下写了 docker-compose.yml 文件,项目结构如下。(这里我想要从一个配置文件启动 运行 Elasticsearch、Logstash、Filebeat 和 Kibana docker 容器)。 docker-containers(项目的根目录)具有以下结构(这里我想从一个配置文件中启动和 运行 Tomcat、Nginx 和 Postgres 容器)。
Logstash:包含4个主要子目录(Filebeat、Logstash、Elasticsearch和Kibana)、ENV文件和docker-compose.yml文件。两个子目录都包含 Dockerfiles 以拉取图像并构建容器。
docker-containers:包含 3 个主要子目录(Tomcat、Nginx 和 Postgres)。 ENV 文件和 docker-compose.yml 文件。两个子目录都包含单独的 Dockerfiles 以拉取 docker 图像并构建容器。
注意:我认为这个基本结构有助于理解我的需求。
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"]
附加信息:
- 我使用的系统是Ubuntu18.04
- 我的目标是从 运行ning tomcat 容器收集 tomcat 日志并将它们转发到 Logstash 并过滤日志并将该日志转发到 Elasticsearch,最后转发到 Kibana 用于可视化目的.
- 现在我可以收集本地机器(主机)日志并在 Kibana 中可视化它们。(/var/log/)
我的问题:
- 我需要知道从 tomcat 容器收集 tomcat 日志并通过 filebeat 容器将它们转发到 logstash 容器的正确方法。
非常期待任何讨论、回答或任何有助于理解执行此操作的方法。
谢谢。
太糟糕了...在所有容器之间创建共享卷并设置 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
全局创建卷并将其映射到两个组合文件中:
version: '3'
services:
one:
...
volumes:
- logs:/var/log/shared
two:
...
volumes:
- logs:/var/log/shared
volumes:
logs:
external: true