当前位置: 首页 > 知识库问答 >
问题:

将tomcat日志从tomcat docker容器收集到Filebeat docker容器

黄泰宁
2023-03-14

我的目标:我需要收集从运行的tomcat容器到Filebeat容器的tomcat日志。

问题:我不知道如何从Tomcat容器中获取收集的日志文件。

到目前为止我尝试过的内容:我尝试创建一个docker卷并将tomcat日志添加到该卷中,并从filebeat容器访问该卷,但没有成功。

docker-containers:包含3个主子目录(Tomcat、Nginx和Postgres)。ENV文件和docker-compose.yml文件。这两个子目录都包含单独的Dockerfiles来提取docker映像并构建容器。

注意:我认为这个基本结构有助于理解我的需求。

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
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.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/tomcat/logs/.*log
output.logstash:
  hosts: ["logstash:5044"]

其他信息:

  • 我使用的系统是Ubuntu 18.04
  • 我的目标是从正在运行的tomcat容器中收集tomcat日志,并将它们转发给Logstash和filter日志,然后将这些日志转发给Elasticsearch,最后转发给Kibana,以便进行可视化。
  • 现在我可以收集本地计算机(主机)日志,并在Kibana中可视化它们。(/var/log/)

我的问题:

    null

共有1个答案

孔弘盛
2023-03-14

所以...在所有容器中创建共享卷,并设置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
 类似资料:
  • 我的ec2实例上运行了几个Docker容器。 我想将这些容器中的日志直接保存到Logstash(弹性云)。 当我试图手动安装Filebeat时,一切正常。我使用 我把它拆开,换了文件。yml配置到 这很好,我可以在Kibana中搜索应用程序“myapp”后找到我的日志。 然而,当我试图从Docker运行Filebeat时,没有成功。 这是我的docker compose中的filebeat部分。y

  • datadog是新手,所以我真的很困惑。第一种配置快速简单。然而,由于我想要一些特定于应用程序的图表,我目前的情况似乎不像以前那么清楚。 我们有一台带有多台docker机器的主机,每个服务一台:-nginx-varnish-apache-database(mysql) 我们在主机内部安装了datadog客户端,还安装了docker集成,一切正常。我不知道如何从apache或varnish或dock

  • 本文向大家介绍Docker 容器日志分析,包括了Docker 容器日志分析的使用技巧和注意事项,需要的朋友参考一下 查看容器日志 先使用  docker run -it --rm -d -p 80:80 nginx:1.15.8-alpine 命令启动一个nginx容器。如果没有异常,会得到容器ID如  d2408a7931c95a3a83ffeca2fba887763cf925a67890ef3

  • 「Allen 谈 Docker 系列」 DaoCloud 正在启动 Docker 技术系列文章,每周都会为大家推送一期真材实料的精选 Docker 文章。主讲人为 DaoCloud 核心开发团队成员 Allen(孙宏亮),他是 InfoQ 「Docker 源码分析」专栏作者,已出版《Docker 源码分析》一书。Allen 接触 Docker 近两年,爱钻研系统实现原理,及 Linux 操作系统。

  • 问题内容: 计划 我希望我的tomcat服务器能够在单独的容器中连接到我的MySQL服务器。 问题 Tomcat无法连接到MySQL 我使用了wordpress教程中的一些详细信息,这些信息涉及与mysql容器建立链接并创建指向MySQL的链接。 尽管tomcat和mysql旋转得很好,但我似乎无法使tomcat能够连接到MySQL,但是这些设置在我的本地计算机上也可以正常运行。 我也尝试使用它,

  • 系统与程序的运行日志对排查问题以及实现一些自动化操作可能非常有用。本文将简要说明收集 TiDB 及相关组件日志的方法。 TiDB 与 Kubernetes 组件运行日志 通过 TiDB Operator 部署的 TiDB 各组件默认将日志输出在容器的 stdout 和 stderr 中。对于 Kubernetes 而言,这些日志会被存放在宿主机的 /var/log/containers 目录下,并