当前位置: 首页 > news >正文

ELK监控jar

若是没有安装ELK,可以参考文章

https://blog.csdn.net/CodeTom/article/details/148927542?spm=1011.2415.3001.5331

要监控一个 JAR 包产生的日志文件,最标准、最可靠的方法是使用 Filebeat。

Filebeat 是一个轻量级的日志托运工具(Shipper),它可以安装在您的应用服务器上,专门用来监听文件变化(比如日志文件的新增内容),然后将这些变化发送给 Logstash 或直接发送给 Elasticsearch。

我们将对之前的 ELK 架构进行扩展,新的数据流架构将是:

JAR 应用 -> 日志文件 -> Filebeat -> Logstash -> Elasticsearch -> Kibana

第一步,准备您的 JAR 应用和日志文件
首先,您需要有一个正在运行并持续生成日志的 JAR 包。为了演示,我们假设文件目录如下:

elk-stack/
├── docker-compose.yml
├── logs/                 <-- 新建的日志存放目录
├── logstash/
│   └── pipeline/
│       └── logstash.conf
└── filebeat/             <-- 新建的目录└── filebeat.yml      <-- 新建的配置文件

第二步,创建 filebeat/filebeat.yml 文件,并填入以下内容:

# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: logenabled: truepaths:- /usr/share/filebeat/logs/*.log  # 这是容器内的路径,不是Linux系统的路径不要搞混了!!!我们稍后会把本地的logs目录挂载到这里# =================================- Outputs ===================================
output.logstash:# The Logstash hostshosts: ["logstash:5000"] # 直接指向我们docker-compose中定义的Logstash服务

配置说明:
filebeat.inputs: 定义了输入源。我们使用 log 类型,并让它监控 /usr/share/filebeat/logs/ 目录下所有以 .log 结尾的文件。
output.logstash: 定义了输出目标。我们将日志发送到名为 logstash 的主机的 5000 端口,这正是您在 docker-compose.yml 中为 Logstash 服务定义的名字和端口。
第三步,我们需要把 Filebeat 服务添加到 docker-compose.yml 文件中。请将以下 filebeat 服务配置追加到 services 部分。
完整的 docker-compose.yml 文件如下:

version: '3.8'services:elasticsearch:image: elasticsearch:8.14.0container_name: elasticsearchenvironment:- discovery.type=single-node- xpack.security.enabled=false- ES_JAVA_OPTS=-Xms1g -Xmx1gvolumes:- es-data:/usr/share/elasticsearch/dataports:- "9200:9200"networks:- elk-netkibana:image: kibana:8.14.0container_name: kibanaenvironment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200ports:- "5601:5601"depends_on:- elasticsearchnetworks:- elk-netlogstash:image: logstash:8.14.0container_name: logstashvolumes:- ./logstash/pipeline:/usr/share/logstash/pipeline:roports:- "5000:5000/tcp"- "5000:5000/udp"depends_on:- elasticsearchnetworks:- elk-net# vvvvvvvvvv 这是新增的服务 vvvvvvvvvvfilebeat:image: elastic/filebeat:8.14.0 # 版本号与ELK保持一致container_name: filebeatuser: root # 某些环境下需要root权限才能读取挂载的卷volumes:# 挂载Filebeat配置文件- ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro# 挂载我们存放日志的目录到容器内,路径要与filebeat.yml中配置的一致- ./logs:/usr/share/filebeat/logs:rodepends_on:- logstash # 确保Logstash启动后再启动Filebeatnetworks:- elk-net# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^volumes:es-data:driver: localnetworks:elk-net:driver: bridge

重要改动说明:
新服务 filebeat:我们定义了一个新的容器,使用官方的 Filebeat 镜像,并确保版本号一致。
volumes 挂载:这是最关键的一步。
我们将本地的 filebeat.yml 文件挂载到容器内,作为其配置文件。
我们将本地的 logs 目录挂载到容器内的 /usr/share/filebeat/logs 目录。这样,当我们的 Jar 包在主机上向 logs/app.log 写入日志时,Filebeat 容器内就可以立刻读取到这些变化。
第四步,启动并进行端到端测试
1、重新启动服务
在 elk-stack 目录下,打开终端,先关闭可能还在运行的旧服务,然后重新启动:

docker-compose down
docker-compose up -d

使用 docker-compose ps 检查,确保 elasticsearch, kibana, logstash, filebeat 四个容器都已正常运行。
2、启动 Jar 包并生成日志
将之前生成的 SimpleApp.jar (就是需要监控的程序)复制到 elk-stack 目录下。然后打开一个 新的终端窗口,运行以下命令:

java -jar SimpleApp.jar > logs/app.log

这个命令会执行 Jar 包,并把所有标准输出(就是我们 System.out.println 的内容)追加到 elk-stack/logs/app.log 文件中。
现在,这个终端会保持运行,每5秒钟就会有一条新的日志被写入 app.log 文件。
3、在 Kibana 中查看日志
打开 Kibana 界面 (http://localhost:5601)。
导航到 Analytics > Discover。
您应该会看到新的日志源源不断地流入!这些日志的 message 字段内容正是我们 Jar 包中定义的 “This is log entry #…”。
您可以展开日志条目,看到 app, level, timestamp 这些我们自定义的字段都已经被正确解析,因为我们一开始就发送了 JSON 格式。

至此,您已经成功搭建了一条完整的日志处理流水线:Java App -> Log File -> Filebeat -> Logstash -> Elasticsearch -> Kibana。

相关文章:

  • 嵌入模型语义理解是怎么来的?工程实践中只需要关注相似度吗?
  • Spring Boot整合Redis指南
  • 自动驾驶nuPlan数据集-入门使用和可视化操作
  • Redmine:一款基于Web的开源项目管理软件
  • matlab实现相控超声波成像
  • 【同等学力申硕-计算机统考-真题深度解析】离散数学-集合基础
  • 如何构建知识库
  • ServletConfig ServletContext
  • 如何使用免费软件写论文?六个免费论文生成软件使用指南
  • html配置rem实现页面自适应
  • 三大能力升级!飞算 JavaAI 攻克老项目重构难题
  • 河北对口计算机高考C#笔记(2026高考适用)---完结版~~~~
  • MongoDB 和 Redis的区别
  • 【V2.0】TPS-61088升压板-3.7V升压到9V电源板
  • Guava Cache 本地项目缓存
  • 什么是故障注入测试
  • vue入门学习时,按照官方的教程生成的vue3项目后,命令行运行npm install出现一堆warn,然后运行npm run dev报错,项目启动失败
  • 三、java项目自动部署流水线搭建
  • 《二分枚举答案(配合数据结构)》题集
  • 每日算法刷题Day39 6.26:leetcode前缀和2道题,用时1h20min