0

0

将 Java 生成的日志发送到 ELK 的最佳实践

聖光之護

聖光之護

发布时间:2025-10-17 11:40:01

|

516人浏览过

|

来源于php中文网

原创

将 java 生成的日志发送到 elk 的最佳实践

本文旨在指导开发者如何将 Docker 容器中运行的 Java 服务生成的日志高效地发送到 ELK(Elasticsearch、Logstash、Kibana)堆。重点介绍使用 Filebeat 收集容器日志,并将其直接传输到 ELK,避免本地文件存储,从而简化日志管理流程。

将 Java 应用程序生成的日志集成到 ELK 堆栈中,可以实现集中的日志管理、分析和可视化。对于基于微服务的项目,尤其是在 Docker 容器化部署的环境下,高效地收集和传输日志至关重要。 直接通过 HTTP 发送日志到 ELK 是一种选择,但通常不推荐,因为它会增加应用程序的复杂性,并可能影响性能。更常见和推荐的做法是使用专门的日志收集工具,例如 Filebeat。

使用 Filebeat 收集 Docker 容器日志

Filebeat 是 Elastic 公司开发的轻量级日志收集器,非常适合用于收集 Docker 容器的日志,并将其发送到 Elasticsearch 或 Logstash。它具有资源占用少、配置简单、可靠性高等优点。

1. Filebeat 安装和配置

立即学习Java免费学习笔记(深入)”;

首先,需要在运行 Docker 容器的主机上安装 Filebeat。你可以从 Elastic 官网下载对应操作系统的 Filebeat 安装包。

安装完成后,需要配置 Filebeat 以监控 Docker 容器的日志。 Filebeat 的配置文件通常位于 /etc/filebeat/filebeat.yml。 以下是一个示例配置,用于收集所有 Docker 容器的日志:

filebeat.inputs:
- type: container
  paths:
    - '/var/lib/docker/containers/*/*.log'
  processors:
    - add_docker_metadata: ~

output.elasticsearch:
  hosts: ["elasticsearch:9200"]  # Elasticsearch 的地址和端口
  username: "elastic"           # Elasticsearch 用户名 (如果启用了安全认证)
  password: "your_password"    # Elasticsearch 密码 (如果启用了安全认证)

# 或者使用 Logstash
#output.logstash:
#  hosts: ["logstash:5044"]       # Logstash 的地址和端口

配置说明:

  • filebeat.inputs: 定义 Filebeat 的输入源。 type: container 指定输入类型为 Docker 容器日志。
  • paths: 指定 Docker 容器日志文件的路径。 /var/lib/docker/containers/*/*.log 是 Docker 默认的日志存储路径。
  • processors: 用于处理收集到的日志数据。 add_docker_metadata 处理器会自动添加 Docker 容器的元数据,例如容器 ID、镜像名称等,方便后续的日志分析。
  • output.elasticsearch: 配置 Elasticsearch 作为输出目标。 hosts 指定 Elasticsearch 的地址和端口。 username 和 password 是 Elasticsearch 的用户名和密码,如果 Elasticsearch 启用了安全认证,则需要配置。
  • output.logstash: (可选) 配置 Logstash 作为输出目标。 如果需要对日志进行更复杂的处理,可以使用 Logstash。

2. Docker Compose 配置 (可选)

如果使用 Docker Compose 管理 ELK 堆栈,可以将 Filebeat 添加到 Docker Compose 文件中。 以下是一个示例 Docker Compose 文件:

Originality AI
Originality AI

专门为网络出版商设计的抄袭和AI检测工具

下载
version: "3.7"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
    # ... Elasticsearch 配置

  logstash:
    image: docker.elastic.co/logstash/logstash:7.17.0
    # ... Logstash 配置

  kibana:
    image: docker.elastic.co/kibana/kibana:7.17.0
    # ... Kibana 配置

  filebeat:
    image: docker.elastic.co/beats/filebeat:7.17.0
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /path/to/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
    depends_on:
      - elasticsearch
    user: root

配置说明:

  • volumes: 将 Docker 容器的日志目录和 Filebeat 的配置文件挂载到 Filebeat 容器中。
  • depends_on: 指定 Filebeat 容器依赖于 Elasticsearch 容器,确保 Elasticsearch 容器先启动。
  • user: root: Filebeat 需要 root 权限才能访问 Docker 容器的日志文件。

3. Java 应用程序配置

确保 Java 应用程序使用 SLF4j 作为日志门面,并配置合适的日志实现 (例如 Logback 或 Log4j2)。 日志实现需要配置为将日志输出到控制台或文件,Filebeat 才能收集到日志。 如果输出到文件,确保文件路径与 Filebeat 配置中的 paths 匹配。

示例 Logback 配置 (logback.xml):


  
    
      %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
    
  

  
    
  

4. 启动 ELK 堆栈和 Filebeat

使用 Docker Compose 启动 ELK 堆栈和 Filebeat 容器:

docker-compose up -d

5. 验证日志收集

启动 Java 应用程序,并生成一些日志。 在 Kibana 中,创建一个索引模式,并选择 Filebeat 收集的日志索引 (通常是 filebeat-*)。 然后,可以在 Kibana 的 Discover 页面中查看 Java 应用程序的日志。

注意事项

  • 权限问题: Filebeat 需要读取 Docker 容器日志文件的权限。 确保 Filebeat 容器以 root 用户身份运行,或者为 Filebeat 用户授予读取日志文件的权限。
  • 日志格式: Filebeat 默认可以解析 JSON 和 plain text 格式的日志。 如果 Java 应用程序使用其他日志格式,需要配置 Filebeat 的 processors 来解析日志。
  • 性能优化: 在高负载环境下,可以调整 Filebeat 的配置,例如 queue.mem.events 和 bulk_max_size,以优化性能。
  • 安全性: 如果 Elasticsearch 启用了安全认证,需要配置 Filebeat 的 username 和 password。 建议使用 TLS 加密 Filebeat 和 Elasticsearch 之间的通信。

总结

使用 Filebeat 可以方便地将 Docker 容器中运行的 Java 应用程序的日志发送到 ELK 堆栈。 通过合理的配置,可以实现高效、可靠的日志收集和管理,从而更好地监控和分析应用程序的运行状态。 这种方法避免了直接从应用程序发送日志,降低了应用程序的复杂性,并提高了整体系统的可维护性。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

845

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

745

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

740

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

420

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

447

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16947

2023.08.03

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

45

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.8万人学习

C# 教程
C# 教程

共94课时 | 7.5万人学习

Java 教程
Java 教程

共578课时 | 50.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号