ELK整合实战,filebeat和logstash采集SpringBoot项目日志发送至ES

news2024/12/28 23:06:07

文章目录

    • ELK整合实战
      • 使用FileBeats将日志发送到Logstash
      • 配置Logstash接收FileBeat收集的数据并打印
      • Logstash输出数据到Elasticsearch
      • 利用Logstash过滤器解析日志
        • Grok插件
        • Grok语法
        • 用法
      • 输出到Elasticsearch指定索引

前文:FileBeats详解


前文:logstash详解


ELK整合实战

案例:采集SpringBoot应用日志

一个springboot应用,打了一个jar包,使用nohup java -jar XXX.jar &运行

日志内容如下所示

2024-08-16 16:04:04.605  INFO 9164 --- [nio-8081-exec-1] com.hs.single.controller.UserController  : 请求参数为:1
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4196ffc2] was not registered for synchronization because synchronization is not active
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@790df42b] will not be managed by Spring
==>  Preparing: SELECT id,username,password,name,description,status,create_time,update_time FROM sys_user WHERE id=?
==> Parameters: 1(Long)
<==      Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4196ffc2]



使用FileBeats将日志发送到Logstash

创建配置文件filebeat-logstash.yml,配置FileBeats将数据发送到Logstash

vim filebeat-logstash.yml

#因为Tomcat的web log日志都是以IP地址开头的,我们应用日志一般是以日期时间开头。所以我们需要修改下匹配字段。
# 不以日期时间开头的行追加到上一行
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /root/application/nohup.out
  multiline.pattern: '^\d{4}-\d{2}-\d{2}'
  multiline.negate: true
  multiline.match: after

output.logstash:
  enabled: true
  hosts: ["192.168.75.65:5044"]

  • pattern:正则表达式
  • negate:true 或 false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
  • match:after 或 before,合并到上一行的末尾或开头
# 启动可能会报错 因为安全原因不要其他用户写的权限,去掉写的权限就可以了,
chmod 644 filebeat-logstash.yml

启动FileBeat,并指定使用指定的配置文件

# -e 前台运行   -c  指定配置文件
./filebeat -e -c filebeat-logstash.yml



可能出现的异常:

Exiting: error loading config file: config file ("filebeat-logstash.yml") can only be writable by the owner but the permissions are "-rw-rw-r--" (to fix the permissions use: 'chmod go-w /home/es/filebeat-7.17.3-linux-x86_64/filebeat-logstash.yml')

因为安全原因不要其他用户写的权限,去掉写的权限就可以了



Failed to connect to backoff(async(tcp://192.168.75.65:5044)): dial tcp 192.168.75.65:5044: connect: connection refused

FileBeat将尝试建立与Logstash监听的IP和端口号进行连接。但此时,我们并没有开启并配置Logstash,所以FileBeat是无法连接到Logstash的。



配置Logstash接收FileBeat收集的数据并打印

输入的使用5044端口接收输入,输出是直接在控制台打印,查看是否能正常接收数据

vim config/filebeat-console.conf
# 配置从FileBeat接收数据
input {
    beats {
      port => 5044
    }
}

output {
    stdout {
      codec => rubydebug
    }
}



启动logstash

# -t检查配置文件是否存在语法错误
[root@hs-es-node1 logstash-7.17.3]# bin/logstash -t -f config/filebeat-console.conf
[root@hs-es-node1 logstash-7.17.3]# bin/logstash -f config/filebeat-console.conf

调用接口,filebeat成功将数据发送至logstash中

在这里插入图片描述



Logstash输出数据到Elasticsearch

如果我们需要将数据输出值ES而不是控制台的话,我们修改Logstash的output配置。

vim config/filebeat-elasticSearch.conf
input {
    beats {
      port => 5044
    }
}

output {
  elasticsearch {
    hosts => ["http://192.168.75.65:9200"]
    user => "elastic"
    password => "123456"
  }
  stdout{
    codec => rubydebug
  }
}



启动logstash

# -t检查配置文件是否存在语法错误
[root@hs-es-node1 logstash-7.17.3]# bin/logstash -t -f config/filebeat-elasticSearch.conf
[root@hs-es-node1 logstash-7.17.3]# bin/logstash -f config/filebeat-elasticSearch.conf



ES中会生成一个以logstash开头的索引,测试日志是否保存到了ES。

在这里插入图片描述



思考:日志信息都保证在message字段中,是否可以把日志进行解析一个个的字段?例如:时间、日志级别、哪个类打印的日志、日志具体内容。

在这里插入图片描述



利用Logstash过滤器解析日志

在Logstash中可以配置过滤器Filter对采集到的数据进行过滤处理,Logstash中有大量的插件可以供我们使用。

# 查看Logstash已经安装的插件,默认已经安装了grok插件
[root@hs-es-node1 logstash-7.17.3]# bin/logstash-plugin list



Grok插件

Grok是一种将非结构化日志解析为结构化的插件。这个工具非常适合用来解析系统日志、Web服务器日志、MySQL或者是任意其他的日志格式。

https://www.elastic.co/guide/en/logstash/7.17/plugins-filters-grok.html



Grok语法

Grok是通过模式匹配的方式来识别日志中的数据,可以把Grok插件简单理解为升级版本的正则表达式。它拥有更多的模式,默认Logstash拥有120个模式。如果这些模式不满足我们解析日志的需求,我们可以直接使用正则表达式来进行匹配。

grok模式的语法是:

# SYNTAX(语法)指的是Grok模式名称,SEMANTIC(语义)是给模式匹配到的文本字段名。
# 注意这中间不要有空格
%{SYNTAX:SEMANTIC}


# 案例  duration表示:匹配一个数字,client表示匹配一个IP地址。
%{NUMBER:duration} %{IP:client}

默认在Grok中,所有匹配到的的数据类型都是字符串,如果要转换成int类型(目前只支持int和float),可以这样:

%{NUMBER:duration:int} %{IP:client}

常用的Grok模式

https://help.aliyun.com/document_detail/129387.html?scm=20140722.184.2.173



用法

比如,tomacat日志

192.168.65.103 - - [23/Jun/2022:22:37:23 +0800] "GET /docs/images/docs-stylesheet.css HTTP/1.1" 200 5780
字段名说明
client IP浏览器端IP
date请求的时间戳
method请求方式(GET/POST)
uri请求的链接地址
status服务器端响应状态
length响应的数据长度
%{IP:ip} - - \[%{HTTPDATE:date}\] \"%{WORD:method} %{PATH:uri} %{DATA:protocol}\" %{INT:status} %{INT:length} 



为了方便测试,我们可以使用Kibana来进行Grok开发:

在这里插入图片描述



我们现在的日志和对应的grok语法:

2024-08-16 16:04:04.605  INFO 9164 --- [nio-8081-exec-1] com.hs.single.controller.UserController  : 请求参数为:1

%{TIMESTAMP_ISO8601:timestamp}  %{LOGLEVEL:level} %{INT:thread} --- \[%{NOTSPACE:serverPort}\] %{JAVACLASS:class}  : %{GREEDYDATA:logResult}

在这里插入图片描述



修改Logstash配置文件

vim config/filebeat-elasticSearch.conf

input {
    beats {
      port => 5044
    }
}

# 添加下面的filter
# 因为我们的消息是保存在message字段中,所以下面主要就是匹配message字段中的值
filter {
  grok {
    match => { 
    "message" => "%{TIMESTAMP_ISO8601:timestamp}  %{LOGLEVEL:level} %{INT:thread} --- \[%{NOTSPACE:serverPort}\] %{JAVACLASS:class}  : %{GREEDYDATA:logResult}" 
    }
  }
}

output {
    stdout {
      codec => rubydebug
    }
}



启动logstash测试

# --config.reload.automatic修改了配置文件能热加载
bin/logstash -f config/filebeat-elasticSearch.conf --config.reload.automatic

在这里插入图片描述



使用mutate插件过滤掉不需要的字段

mutate {
    enable_metric => "false"
    remove_field => ["message", "log", "tags", "input", "agent", "host", "ecs", "@version"]
}

在这里插入图片描述



如果要将日期格式进行转换,我们可以使用Date插件来实现。该插件专门用来解析字段中的日期,官方说明文档:https://www.elastic.co/guide/en/logstash/7.17/plugins-filters-date.html

用法如下:

在这里插入图片描述

将date字段转换为「年月日 时分秒」格式。默认字段经过date插件处理后,会输出到@timestamp字段,所以,我们可以通过修改target属性来重新定义输出字段。

# [字段名,当前时间格式,修改后的时间格式]    我们这里可以不用改,但是需要了解这个功能
date {
    match => ["date","dd/MMM/yyyy:HH:mm:ss Z","yyyy-MM-dd HH:mm:ss"]
    target => "date"
}



输出到Elasticsearch指定索引

index来指定索引名称,默认输出的index名称为:logstash-%{+yyyy.MM.dd}。

但注意,要在index中使用时间格式化,filter的输出必须包含 @timestamp字段,否则将无法解析日期。

output {
  elasticsearch {
    hosts => ["http://192.168.75.65:9200"]
    index => "app_web_log_%{+YYYY-MM-dd}"
    user => "elastic"
    password => "123456"
  }
  stdout{
    codec => rubydebug
  }
}

注意:index名称中,不能出现大写字符



完整的Logstash配置文件

input {
    beats {
      port => 5044
    }
}

filter {
  grok {
    match => {
    "message" => "%{TIMESTAMP_ISO8601:timestamp}  %{LOGLEVEL:level} %{INT:thread} --- \[%{NOTSPACE:serverPort}\] %{JAVACLASS:class}  : %{GREEDYDATA:logResult}"
    }
  }
  mutate {
    enable_metric => "false"
    remove_field => ["message", "log", "tags", "input", "agent", "host", "ecs", "@version"]
  }
  # 我们这里可以不用改,但是需要了解这个功能
  #date {
  #  match => ["date","dd/MMM/yyyy:HH:mm:ss Z","yyyy-MM-dd HH:mm:ss"]
  #  target => "date"
  #}
}

output {
  elasticsearch {
    hosts => ["http://192.168.75.65:9200"]
    index => "app_web_log_%{+YYYY-MM-dd}"
    user => "elastic"
    password => "123456"
  }
  stdout{
    codec => rubydebug
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2046788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pdf翻译软件哪个好用?多语言轻松转

想知道怎么用pdf翻译器在线翻译吗&#xff1f;无需复杂操作&#xff0c;一键即可解锁语言障碍。 在这个全球化日益加深的时代&#xff0c;掌握pdf文件的快速翻译技巧尤为重要。 无论是学习、工作还是国际交流&#xff0c;以下4个免费pdf翻译技巧都将是你不可或缺的得力助手。…

Apollo9.0 PNC源码学习之Planning模块—— Lattice规划(一):笛卡尔和Frenet坐标系

参考文章:Frenet坐标系 or Cartesian坐标系? 1 Lattice规划算法框架结构 2 Frenet坐标系 // 跟据匹配点,计算Frenet坐标系的S-L值// 3. according to the matched point, comp

十九、中介者模式

文章目录 1 基本介绍2 案例2.1 Developer 抽象类2.2 FrontendDeveloper 类2.3 BackendDeveloper 类2.4 Mediator 接口2.5 ProjectManager 类2.6 Client 类2.7 Client 类的运行结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 Colleague ( 同事 )3.1.2 ConcreteColleague ( 具体的…

RabbitMQ-消息队列-centos7

一、RabbitMQ安装 1、通过官网下 官网网址&#xff1a;https://www.rabbitmq.com 首先下载erlang-23.3.4.11-1.el7.x86_64.rpm&#xff0c;其次下载rabbitmq-server-3.10.0-1.el7.noarch.rpm 注意&#xff1a;RabbitMQ是由erlang开发的&#xff0c;所以必须先安装erlang版本…

Pytorch1: Anaconda下载,安装,配置

Anaconda手册 一&#xff0c;Anconada1&#xff0c;Anconada简介 二、下载、安装、配置环境变量1&#xff0c;安装 三、anaconda创建多版本python环境四、anaconda 安装 pytorch五、Jupyter Notebook 一&#xff0c;Anconada 1&#xff0c;Anconada简介 Anaconda就是一个用于…

【多线程】JUC的常见类,Callable接口,ReentranLock,Semaphore,CountDownLatch

JUC&#xff1a;java.util.concurrent 一、Callable 接⼝ 接口方法Callablecall&#xff0c;带有返回值Runnablerun&#xff0c;void所以创建一个线程&#xff0c;希望它给你返回一个结果&#xff0c;那么使用 Callable 更加方便一些 比如&#xff0c;创建一个线程&#xff…

leetcode350. 两个数组的交集 II,哈希表

leetcode350. 两个数组的交集 II 给你两个整数数组 nums1 和 nums2 &#xff0c;请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数&#xff0c;应与元素在两个数组中都出现的次数一致&#xff08;如果出现次数不一致&#xff0c;则考虑取较小值&#xff09;。可…

导出word格式的Javadoc(可用于快速生成项目详细设计文档)

导出word格式的Javadoc ​ 最近要编写项目详细设计文档&#xff0c;作为程序员当然想看看有没有能够自动生成的办法&#xff0c;生成详细设计文档&#xff0c;然后再在生成的基础上略做修改就好了&#xff08;偷懒大法~&#xff09;&#xff0c;还真有&#xff0c;特此分享&am…

数字乡村+智慧农业数字化转型大数据平台建设方案

1. 数字农业发展趋势 数字农业正经历全环节数字技术应用、全流程生产经营再造、全方位线上线下对接和管理服务全生命周期覆盖的四大趋势&#xff0c;标志着我国农业进入高质量发展新阶段。 2. 数字乡村的战略意义 数字乡村作为数字化、网络化和信息化的产物&#xff0c;对于…

人工智能技术工程师由谁颁发?都学习哪些课程?

人工智能技术工程师是一个充满挑战和机遇的职业。他们将用自己的专业知识和技能&#xff0c;为人类带来更加美好的未来。 一、人工智能工程师发证单位是谁&#xff1f; 人工智能技术工程师证书是由工业和信息化部教育与考试中心颁发的。 工信部电子标准院的人工智能从业人员认…

基于飞腾平台的Hadoop的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

旅游卡真伪一招辨别,避免旅行陷阱!

揭秘旅游卡真伪&#xff01;一招教你识别隐藏陷阱&#xff0c;避免旅行大坑&#xff01; 对于热爱旅行的朋友们来说&#xff0c;旅游卡无疑是一种方便又实惠的选择。 然而&#xff0c;随着市场上的旅游卡种类越来越多&#xff0c;如何选择一张真实有效的旅游卡成为了大家关注…

CI/CD 自动化:最大限度地提高极狐GitLab 群组的“部署冻结”影响

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

矩阵获客时代,如何有效管理云微客短视频矩阵?

随着短视频内容数量的快速增长&#xff0c;一站式、高效、智能化的矩阵管理模式&#xff0c;正逐渐受到各个行业的关注和喜爱。那么该如何有效地管理短视频矩阵&#xff0c;确保内容的高质量、高效率和准确投放呢&#xff1f; 当今数字化时代&#xff0c;短视频已经成为了一种极…

Oracle 用户-表空间-表之间关系常用SQL

问题&#xff1a; 当某一个表数据量特别大&#xff0c;突然插入数据一直失败&#xff0c;可能是表空间不足&#xff0c;需要查看表的使用率 用户-表空间-表之间关系&#xff1a;用户可以有多个表空间&#xff0c;表空间可以有多个表&#xff0c;表只能拥有一个表空间和用户 1.…

联邦学习:破解农业大数据共享的安全难题

&#xff08; 于景鑫 国家农业信息化工程技术研究中心 &#xff09;农业大数据是农业智能化的基石,其共享与开放是发掘数据价值、驱动农业变革的关键。然而,数据隐私与安全问题如同数据共享之路上的一道坎,牵制着农业大数据的流动与融合。联邦学习作为一种颠覆性的分布式机器学…

1Panel应用推荐:Bytebase开源数据库DevOps解决方案

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

技术爱好者完全用台式机部件定制游戏笔记本电脑

高端笔记本电脑的功能强大到令人难以置信的地步&#xff0c;但大多数笔记本电脑在至少几个关键性能方面仍然落后于台式机。一位 YouTuber 对这种情况感到厌倦&#xff0c;为了抹除这种差距&#xff0c;他开始了为期 14 个月的旅程&#xff0c;使用真正的台式机硬件打造自己的笔…

基于R语言遥感随机森林建模与空间预测;遥感数据处理与特征提取;数据分析与可视化

目录 第一章 理论基础与数据准备【夯实基础】 第二章 随机森林建模与预测【讲解实践】 第三章 实践案例与项目 更多应用 随机森林作为一种集成学习方法&#xff0c;在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性&#xff0c;随…

ubuntu 24.04 软件源配置,替换为国内源

ubuntu 默认的官网源下载速度非常慢&#xff0c;新装 ubuntu 系统首先把 apt 软件源替换成国内源。 1、使用软件和更新设置国内源 打开软件和更新&#xff0c;选择位于中国的服务器&#xff1a; 外链图片转存失败&#xff0c;源站可能有防盗链机制&#xff0c;建议将图片保存…