分布式运用之企业级日志ELFK+logstash的过滤模块

一、ELFK集群部署(Filebeat+ELK)

 在搭建ELK的基础上安装Filebeat服务,Filebeat服务可以布置在以下任意一台主机,本次实验将布置在apache服务器的节点上 

步骤一:安装 Filebeat(在apache节点操作) 

#上传软件包 filebeat-6.7.2-linux-x86_64.tar.gz 到/opt目录
 tar zxvf filebeat-6.7.2-linux-x86_64.tar.gz  
 mv filebeat-6.7.2-linux-x86_64/ /usr/local/filebeat

步骤二:设置 filebeat 的主配置文件 

 cd /usr/local/filebeat​vim filebeat.ymlfilebeat.prospectors:- type: log         #指定 log 类型,从日志文件中读取消息enabled: truepaths:#指定监控的日志文件- /var/log/httpd/access_logtags: ["filebeat"]         #设置索引标签fields:                  #可以使用 fields 配置选项设置一些参数字段添加到 output 中service_name: apachelog_type: accessfrom: 192.168.73.107​--------------Elasticsearch output-------------------(全部注释掉)​----------------Logstash output---------------------output.logstash:hosts: ["192.168.73.107:5044"]      #指定 logstash 的 IP 和端口​

 步骤三: 新建 Logstash 配置文件

cd /etc/logstash/conf.d
cp system.conf filebeat.conf ​
vim filebeat.conf
input {beats { port => "5044" }}output {elasticsearch {hosts => ["192.168.73.105:9200","192.168.73.106:9200"]index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}​

filebeat 功能的引入测试 

1)创建两个访问页面

echo "<h1>this  is   filebeat test </h1>" >/var/www/html/test1.html
echo "h1> this is a test    </h1>" >/var/www/html/test2.html

2)启动filebeat和logstash 

  #启动 filebeat
 nohup ./filebeat -e -c filebeat.yml > filebeat.out &
 #-e:输出到标准输出,禁用syslog/文件输出
 #-c:指定配置文件
 #nohup:在系统后台不挂断地运行命令,退出终端不会影响程序的运行
 
 #启动 logstash
cd /etc/logstash/conf.d
logstash -f filebeat.conf

 

3)进行访问测试 

此时:屏幕输出的日志以及发生改变(Logstash的新建配置文件中output模块中stdout) 

 

4)kibana中创建于apache相关的索引,并且通过时序,可以查看到访问日志的信息 

 

 

解决日志与kibana时间不一致的方法 

 

 

二、 Logstash的过滤模块 

2.1 Logstash配置文件中的模块

(1)input {}
  • 指定输入流,通过file、beats、kafka、redis中获取数据

(2)filter {}

常用插件:

  • grok:对若干个大文本字段进行再分割,分割成一些小字段 (?<字段名>正则表达式) 字段名:正则表示匹配到的内容
  • date:对数据中的时间进行统一格式化
  • mutate:对一些无用的字段进行剔除,或增加字段
  • mutiline:对多行数据进行统一编排,多行合并和拆分

(3)ourput {}

  • elasticsearch stdout

2.2 Filter(过滤模块)中的插件 

而对于 Logstash 的 Filter,这个才是 Logstash 最强大的地方。Filter 插件也非常多,我们常用到的 grok、date、mutate、mutiline 四个插件。

对于 filter 的各个插件执行流程,可以看下面这张图:

grok插件(通过grok插件实现对字段的分割,使用通配符)

这里就要用到 logstash 的 filter 中的 grok 插件。filebeat 发送给 logstash 的日志内容会放到message 字段里面,logstash 匹配这个 message 字段就可以了。

 2.3 kibana 的DEV Tools 中 Grok Debugger工具的运用

 

在此我们以apache访问日志索引中的message字段为例 ,进行数据切片:

 假设我们要进行的切片信息为messge中的

192.168.73.105 - - [13/Nov/2022:02:57:13 +0800] "GET /test1.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"

数据切片的格式为: 

 匹配格式:(?<字段名>正则表达式) 

切片案例一:分离访问用户的IP 

(?<remote_addr>%{IPV6}|%{IPV4} )(?<other_info>.+)

 

切片案例二:以上面的为基础,将时间分离出来 

(?<remote_addr>%{IPV4}|%{IPV6})[\s-]+\[(?<logTime>.+)](?<other_info>.+)

 

切片案例三:取出状态码和http方法  

(?<remote_addr>%{IPV4}|%{IPV6})[\s-]+\[(?<logTime>.+)] "GET (?<http_method>.+")[\s](?<status_code>\d+) -\s"-"\s(?<other_info>.+)

 

2.4 数据切片的实战演练 

 切片前的操作 

vim apache_log.conf
input {file{path => "/etc/httpd/logs/access_log"type => "access"start_position => "beginning"}
}output {if [type] == "access" {elasticsearch {hosts => ["192.168.73.105:9200","192.168.73.105:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}
}logstash -f apache_log.conf

 

 对apche服务进行访问 

 

 进行切片分离 

修改logstash的控制conf 

vim apache_log.conf
input {file{path => "/etc/httpd/logs/access_log"type => "access"start_position => "beginning"}
}
filter {grok {match => ["message","(?<remote_addr>%{IPV4}|%{IPV6})[\s-]+\[(?<logTime>.+)] \"GET (?<http_method>.+\")[\s](?<status_code>\d+) -\s\"-\"\s(?<other_info>.+)"]}}output {if [type] == "access" {elasticsearch {hosts => ["192.168.73.105:9200","192.168.73.105:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}
}
logstash -f apache_log.conf

 

 再次进行访问测试 

 

三、filebeat中multiline 插件的引入 

  java错误日志一般都是一条日志很多行的,会把堆栈信息打印出来,当经过 logstash 解析后,每一行都会当做一条记录存放到 EslaticSearch中,那这种情况肯定是需要处理的。这里就需要使用 multiline 插件,对属于同一个条日志的记录进行拼接。

3.1  安装 multiline 插件

在线安装插件
cd /usr/share/logstash
bin/logstash-plugin install logstash-filter-multiline
 
离线安装插件
先在有网的机器上在线安装插件,然后打包,拷贝到服务器,执行安装命令
bin/logstash-plugin install file:///usr/share/logstash/logstash-offline-plugins-6.7.2.zip
 
检查下插件是否安装成功,可以执行以下命令查看插件列表
bin/logstash-plugin list

3.2  使用 multiline 插件 进行日志合并 

日志合并的过程: 

  • 第一步:每一条日志的第一行开头都是一个时间,可以用时间的正则表达式匹配到第一行。

  • 第二步:然后将后面每一行的日志与第一行合并。

  • 第三步:当遇到某一行的开头是可以匹配正则表达式的时间的,就停止第一条日志的合并,开始合并第二条日志。

  • 第四步:重复第二步和第三步

filter {
  multiline {
    pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}.\d{3}"
    negate => true
    what => "previous"
  }
}

pattern: 用来匹配文本的表达式,也可以是grok表达式

what: 如果pattern匹配成功的话,那么匹配行是归属于上一个事件,还是归属于下一个事件。previous: 归属于上一个事件,向上合并。next: 归属于下一个事件,向下合并

negate:是否对 pattern 的结果取反。false: 不取反,是默认值。true: 取反。将多行事件扫描过程中的行匹配逻辑取反(如果pattern匹配失败,则认为当前行是多行事件的组成部分)

3.3 多行被拆分

Java 堆栈日志太长了,有 100 多行,被拆分了两部分,一部分被合并到了原来的那一条日志中,另外一部分被合并到了不相关的日志中。

为了解决这个问题,可以通过配置 filebeat 的 multiline 插件来截断日志。至于为什么不用 logstash 的 multiline 插件呢?因为在 filter 中使用 multiline 没有截断的配置项。filebeat 的 multiline 配置项如下:

multiline.type: pattern
multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}.\d{3}'
multiline.negate: true
multiline.match: after
multiline.max_lines: 50

配置项说明:

  • multiline.pattern:希望匹配到的结果(正则表达式)

  • multiline.negate:值为 true 或 false。使用 false 代表匹配到的行合并到上一行;使用 true 代表不匹配的行合并到上一行

  • multiline.match:值为 after 或 before。after 代表合并到上一行的末尾;before 代表合并到下一行的开头

  • multiline.max_lines:合并的最大行数,默认 500

  • multiline.timeout:一次合并事件的超时时间,默认为 5s,防止合并消耗太多时间导致 filebeat 进程卡死

四、mutate 插件

当我们将日志解析出来后,Logstash 自身会传一些不相关的字段到 ES 中,这些字段对我们排查线上问题帮助不大。可以直接剔除掉。这里我们就要用到 mutate 插件了。它可以对字段进行转换,剔除等。

一般会把把 log.offset 字段去掉,这个字段可能会包含很多无意义内容。

filter{
   mutate {
      remove_field => ["host" "[log][offset]"]
   } 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GIS】地理坐标系WGS84、GCJ-02、BD-09、GCS2000

地理坐标系又可分为 参心坐标系 和 地心坐标系&#xff0c;常见的参心坐标系北京54、西安80&#xff0c;常见的地心坐标系有WGS84、GCJ-02、BD-09、GCS2000 地心坐标系 WGS84&#xff08;World Geodetic System 1984&#xff09; WGS84是为 GPS 全球定位系统建立的坐标系统&…

python随手小练

题目&#xff1a; 使用python做一个简单的英雄联盟商城登录界面 具体操作&#xff1a; print("英雄联盟商城登录界面") print("~ * "*15 "~") #找其规律 a "1、用户登录" b "2、新用户注册" c "3、退出系统&quo…

PIL或Pillow学习1

PIL&#xff08; Python Imaging Library&#xff09;是 Python 的第三方图像处理库&#xff0c;由于其功能丰富&#xff0c;API 简洁易用&#xff0c;因此深受好评。 自 2011 年以来&#xff0c;由于 PIL 库更新缓慢&#xff0c;目前仅支持 Python 2.7 版本&#xff0c;这明显…

react实现列表滚动组件

1.需求 在开发项目的时候&#xff0c;从服务端获取到数据列表后&#xff0c;展示给用户看&#xff1a;需要实现数据自动滚动效果&#xff0c;怎么实现呢&#xff1f;如下图所示&#xff1a; 2.实现 把上面需要实现的功能写成一个组件&#xff0c;页面直接调用该组件即可&#x…

计算机视觉与深度学习-经典网络解析-AlexNetZFNetVGGGoogLeNetResNet[北邮鲁鹏]

目录标题 参考文章LeNet5AlexNet参考文章AlexNet模型结构AlexNet共8层&#xff1a;AlexNet运作流程 简单代码实现重要说明重要技巧主要贡献 ZFNet主要改进减小第一层卷积核将第二、第三个卷积层的卷积步长都设置为2增加了第三、第四个卷积层的卷积核个数 VGG参考VGG网络贡献使用…

锐捷交换机vlan隔离(wifi段仅能访问外网,和内网隔离)

因为公司的wifi段&#xff0c;未做隔离&#xff0c;无意间上了网&#xff0c;发现能访问内网网段&#xff0c;这里内网是10、20段&#xff0c;管理网段是100段&#xff0c;于是做了和内网的vlan隔离。 拓朴如下&#xff0c;所有vlan的网关都起在核心上&#xff0c;核心上起了DH…

批量调整视频饱和度和色度,提升你的视频剪辑效率!

作为一名视频剪辑师&#xff0c;你是否经常为如何高效地调整多个视频的饱和度和色度而烦恼&#xff1f;现在&#xff0c;我们为你提供了一种简单、快速、准确的方法&#xff0c;帮助你轻松解决这个问题&#xff01; 首先我们要进入好简单批量智剪&#xff0c;并在左侧的板块栏…

iPhone15拉胯,国产手机用折叠屏大反攻!

文 | 智能相对论 作者 | K星 iPhone偷懒式的15代机型发布&#xff0c;让市场大跌眼镜&#xff0c;虽然在莫名的宗教虔诚下依旧卖得很好&#xff0c;但苹果走下神坛之巅已经板上钉钉。 但是&#xff0c;苹果从最高处摔落&#xff0c;却依旧在神坛之上&#xff0c;iPhone15拉胯…

K8s的网络——Underlay和Overlay网络

0. 基础知识 1&#xff09;网络7层基础知识 在网络7层协议基础里&#xff0c; 第一层物理链路&#xff1b;第二层是数据链路层&#xff0c;在第一层的基础上引入MAC地址做数据转发。MAC地址在局域网内具有唯一性&#xff0c;主机A发送数据时&#xff0c;会向局域网内进行广播…

九、【漏洞复现】Struts 2 远程代码执行漏洞s2-046(CVE-2017-5638)

九、【漏洞复现】Struts 2 远程代码执行漏洞s2-046&#xff08;CVE-2017-5638&#xff09; 9.1、漏洞原理 Struts 2是一个基于MVC设计模式的Web应用框架&#xff0c;本质上相当于一个Servlet,在MVC设计模式中&#xff0c;Struts2作为控制器来建立模型与视图进行数据交互。 攻…

GE IS420UCSCH2A-C-V0.1-A模拟量输入模块

GE IS420UCSCH2A-C-V0.1-A 模拟量输入模块是一种用于数据采集和监测的电子模块&#xff0c;通常应用于工业控制系统、监测设备和自动化系统中。以下是可能与该模拟量输入模块相关的一些产品特点&#xff1a; 多通道输入&#xff1a; GE IS420UCSCH2A-C-V0.1-A 模拟量输入模块通…

npm发布vue3自定义组件库--方法一

npm发布vue3自定义组件库 创建项目 vue create test-ui自定义组件 创建自定义组件&#xff0c;组件名称根据你的需求来&#xff0c;最好一个组件一个文件夹&#xff0c;下图是我的示例。 src/components 组件和你写页面一样&#xff0c;所谓组件就是方便实用&#xff0c;不…

2023上半年薪资报告出炉!人均月入过万?!

最近&#xff0c;大家都有听到经济回暖的消息吧&#xff1f;经过三年口罩大考之后&#xff0c;2023年上半年各行各业都迎来复苏&#xff0c;关于职场的话题讨论也不绝于耳。 现在就业环境如何&#xff1f;哪些行业更有前途&#xff1f;大家在求职时是选择一线城市还是回二、三…

四川玖璨电子商务有限公司专注抖音电商运营

四川玖璨电商是一个靠谱的抖音培训公司&#xff0c;在电商行业内有着广泛的知名度和良好的口碑。该公司通过多年的发展&#xff0c;形成了独特的运营理念和有效的运营策略&#xff0c;为商家提供了一站式的抖音电商运营服务。 首先&#xff0c;四川玖璨电子商务有限公司注重与…

【c语言】贪吃蛇

当我们不想学习新知识的时候&#xff0c;并且特别无聊&#xff0c;就会突然先看看别人怎么写游戏的&#xff0c;今天给大家分享的是贪吃蛇&#xff0c;所需要的知识有结构体&#xff0c;枚举&#xff0c;以及easy-x图形库的一些基本函数就完全够用了&#xff0c;本来我想插入游…

「聊设计模式」之 设计模式的前世今生

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 大家下午好&#xff0c;我是bug菌&#xff0c;今天我们继续聊设…

服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

RS485以及MODBUS学习

学习目的&#xff1a; 1、什么是485&#xff1f; 2、485如何通信&#xff1f; 3、如何使用熟能生巧&#xff1f; RS485是一种四总线通信&#xff0c;分别是VCC、GND、485_A、485_B。两根负责通信&#xff0c;两根负责进行供电。 RS485通信 硬件层&#xff1a;解决的是数据传输问…

为什么伦敦金获得连续盈利这么难

相信在伦敦金市场中投资的投资者都有这个感受&#xff0c;我们很容易在市场中获取力量利润&#xff0c;但是要长期的在市场中稳定的盈利&#xff0c;持续不断地获利&#xff0c;这对很多投资者来说都有点难&#xff0c;可以这么说&#xff0c;稳定盈利是普通投资者一个阶段性的…

Spring Boot 各版本的支持时间

1. Spring Boot 各版本的支持时间 Spring Boot 2.7 的版本&#xff0c;支持到2023-11-18&#xff0c;之后就要停止支持了。 按照官网的数据&#xff0c;3.0 的版本也是到2023年11月就停止支持了。如果要转到SpringBoot3&#xff0c;直接从3.1开始吧。到写这篇文章时&#xff…