0

0

使用 Filebeat 将 Java 日志发送到 ELK

心靈之曲

心靈之曲

发布时间:2025-10-16 14:27:32

|

918人浏览过

|

来源于php中文网

原创

使用 filebeat 将 java 日志发送到 elk

本文介绍如何将运行在 Docker 容器中的 Java 服务生成的日志发送到 ELK (Elasticsearch, Logstash, Kibana) 集群。我们将使用 Filebeat 作为日志收集器,直接从 Docker 容器中读取日志,并将其传输到 ELK 集群,无需将日志保存到本地文件。

将 Java 服务生成的日志集成到 ELK 集群中,可以实现集中式日志管理、分析和可视化,这对于微服务架构的项目尤其重要。 直接将日志发送到 ELK,避免了本地文件存储带来的复杂性,提高了效率。 本文将重点介绍如何使用 Filebeat 实现这一目标。

1. Filebeat 简介

Filebeat 是一个轻量级的日志收集器,属于 Elastic Beats 家族。 它可以监控指定的日志文件或输入源,并将日志数据发送到 Elasticsearch 或 Logstash。 Filebeat 具有资源占用少、配置简单、可靠性高等特点,非常适合在 Docker 环境中使用。

2. 配置 Filebeat

Filebeat 的核心配置文件通常是 filebeat.yml。 你需要根据你的 ELK 集群配置和 Docker 容器环境修改此文件。 以下是一个示例配置,可以作为起点:

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

filebeat.inputs:
  - type: docker
    containers.ids:
      - '*'  # 监控所有容器的日志

output.logstash:
  hosts: ["logstash:5044"] # Logstash 的地址和端口,需要根据你的实际情况修改
  # 可选配置:启用 TLS/SSL 加密
  # ssl:
  #   enabled: true
  #   certificate_authorities: ["/path/to/your/ca.crt"]

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_host_metadata: ~

配置说明:

  • filebeat.inputs.type: docker: 指定输入类型为 Docker,表示 Filebeat 将从 Docker 容器中收集日志。
  • filebeat.inputs.containers.ids: ['*']: 使用通配符 * 监控所有 Docker 容器的日志。 你也可以指定特定的容器 ID。
  • output.logstash.hosts: 指定 Logstash 的地址和端口。 你需要将 logstash:5044 替换为你的 Logstash 实例的实际地址和端口。 如果你的 Logstash 启用了 TLS/SSL 加密,你需要配置 ssl 部分。
  • processors: 添加元数据,例如云平台、Docker 容器和主机信息,方便后续分析。

3. 在 Docker 环境中运行 Filebeat

有多种方式可以在 Docker 环境中运行 Filebeat。 一种常见的方法是创建一个 Dockerfile,将 Filebeat 二进制文件和配置文件复制到镜像中。 另一种方法是使用 Docker Compose。

Petalica Paint
Petalica Paint

用AI为你的画自动上色!

下载

使用 Docker Compose 示例:

version: "3.7"
services:
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.17.1 # 替换为你的 Filebeat 版本
    volumes:
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro  # 挂载 Docker 容器日志目录
      - /var/run/docker.sock:/var/run/docker.sock:ro # 挂载 Docker socket
    user: root # 确保 Filebeat 有权限读取 Docker 容器日志
    depends_on:
      - logstash # 确保 Logstash 已经启动
    networks:
      - elk

networks:
  elk:
    driver: bridge

配置说明:

  • image: 指定 Filebeat 的 Docker 镜像。
  • volumes: 挂载 Filebeat 配置文件和 Docker 容器日志目录。 /var/lib/docker/containers 是 Docker 容器日志的默认存储位置。 /var/run/docker.sock 允许 Filebeat 访问 Docker API 获取容器元数据。
  • user: root: 确保 Filebeat 具有读取 Docker 容器日志的权限。 在生产环境中,建议使用更细粒度的权限控制。
  • depends_on: 指定 Filebeat 依赖于 Logstash 服务。
  • networks: 将 Filebeat、Logstash 和 Elasticsearch 放在同一个网络中,方便它们之间进行通信。

运行 docker-compose up 命令启动 Filebeat 容器。

4. 配置 Logstash (可选)

Logstash 是 ELK 集群中的数据处理管道。 你可以使用 Logstash 来解析、过滤和增强日志数据。 以下是一个示例 Logstash 配置文件:

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{DATA:logger} - %{GREEDYDATA:message}" }
  }
  date {
    match => [ "timestamp", "ISO8601" ]
    target => "@timestamp"
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"] # Elasticsearch 的地址和端口
    index => "java-logs-%{+YYYY.MM.dd}"
  }
}

配置说明:

  • input.beats: 配置 Beats 输入插件,监听来自 Filebeat 的日志数据。
  • filter.grok: 使用 Grok 插件解析日志消息。 你需要根据你的 Java 应用程序的日志格式修改 Grok 表达式。 上面的例子假设你的日志格式是 TIMESTAMP_ISO8601 LOGLEVEL logger - message。
  • filter.date: 将日志消息中的时间戳转换为 @timestamp 字段,Elasticsearch 将使用此字段进行时间序列分析。
  • output.elasticsearch: 配置 Elasticsearch 输出插件,将日志数据发送到 Elasticsearch。 index 选项指定 Elasticsearch 索引的名称。

5. 注意事项

  • 权限问题: 确保 Filebeat 具有读取 Docker 容器日志的权限。
  • 资源限制: Filebeat 资源占用少,但仍然需要根据你的日志量和服务器配置进行调整。
  • 网络配置: 确保 Filebeat、Logstash 和 Elasticsearch 之间可以互相通信。
  • 日志格式: 根据你的 Java 应用程序的日志格式配置 Logstash 的 Grok 表达式。
  • Filebeat 版本: 建议使用与 Elasticsearch 兼容的 Filebeat 版本。

6. 总结

本文介绍了如何使用 Filebeat 将 Java 服务生成的日志发送到 ELK 集群。 通过配置 Filebeat 和 Logstash,你可以实现集中式日志管理、分析和可视化,提高微服务架构项目的可观察性。 记住,根据你的实际环境和需求调整配置文件。

相关专题

更多
java
java

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

834

2023.06.15

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

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

738

2023.07.05

java自学难吗
java自学难吗

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

734

2023.07.31

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

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

397

2023.08.01

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

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

398

2023.08.02

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

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

446

2023.08.02

java有什么用
java有什么用

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

430

2023.08.02

java在线网站
java在线网站

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

16926

2023.08.03

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

热门下载

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

精品课程

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

共23课时 | 2.6万人学习

C# 教程
C# 教程

共94课时 | 6.8万人学习

Java 教程
Java 教程

共578课时 | 46.6万人学习

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

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