【分布式技术】Elastic Stack部署,实操logstash的过滤模块常用四大插件

目录

一、Elastic Stack,之前被称为ELK Stack

完成ELK与Filebeat对接

步骤一:安装nginx做测试

 步骤二:完成filebeat二进制部署

步骤三:准备logstash的测试文件filebeat.conf

步骤四:完成实验测试

二、logstash拥有强大的过滤功能,常用四种插件

1、grok

 步骤一:现在logstash的conf文件中进行filter模块的修改,添加grok插件

步骤二:完成语法测试,先测试完成

步骤三:filebeat与logstash对接  logstash与ES进行对接

​编辑

2、multiline

步骤一:准备测试日志文件

 步骤二:准备logstash的conf文件,在filter模块中配置multiline插件

步骤三:语法测试并启动logstash与ES对接

步骤五:查看kibana 进行验证

3、date

步骤一:先完成logstash的conf文件编写,完成语法检测以及启动

​编辑

步骤二:kibana前端界面验证

4、mutate数据修改插件

步骤一:准备测试文件filebeat.conf 

步骤二:完成语法检测和启动对接

​编辑步骤三: 刷新nginx访问页面 在kibana页面验证效果


一、Elastic Stack,之前被称为ELK Stack

完成ELK与Filebeat对接

步骤一:安装nginx做测试

 

 步骤二:完成filebeat二进制部署

步骤三:准备logstash的测试文件filebeat.conf

input{
   beats {port => "5044"}
}

#filter{}

output{
    elasticsearch{
        hosts => ["192.168.20.10:9200","192.168.20.8:9200","192.168.20.18:9200"]
        index => "%{[fields][server_name]}-%{[fields][log_type]}-%{[fields][from]}-%{+yyyy.MM.dd}"
    }
    stdout {  ##表示测试的时候,如果屏幕输出内容了,那么表示logstash与ES对接成功,如果没有输出内容,那么可能filebeat与logstash对接失败
        codec => rubydebug
    }
}

[root@nginx-test conf.d]#logstash -f filebeat.conf -t
##语法检测

 

步骤四:完成实验测试

[root@filebeat-test /usr/local/filebeat]#./filebeat -e -c filebeat.yml 
##完成filebeat与logstash对接 注意命令的位置

 

[root@nginx-test conf.d]#logstash -f filebeat.conf
##完成logstash与ES集群对接

 

 

实验完成

 

二、logstash拥有强大的过滤功能,常用四种插件

1、grok

grok可以将大文本字段分片成若干的小字段,如刚刚的日志文件,一行的信息太多,需要将message这个大文本字段给分片成若干的小字段如访问ip、请求方法、URL、状态码等

grok有两种格式(并且支持混用)

内置正则匹配格式:%{内置正则表达式:自定义的小字段名称}
自定义正则匹配格式:(?<自定义的小字段名称>自定义的正则表达式)

同时可以先在kibana的开发工具上做测试

192.168.20.1 - - [19/Jan/2024:17:08:24 +0800] "GET /123.html HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0" "-"

%{IP:client_addr}.*\[(?<quest_time>.*)\] "%{WORD:quest_method} %{URIPATHPARAM:url_method} .*" (?<response_code>\d+) .* "(?<referer_url>.*)" "(?<agent>.*)".*

##实际就是用正则表达式,表达这一整行的内容

完成logstash测试

 步骤一:现在logstash的conf文件中进行filter模块的修改,添加grok插件

[root@nginx-test conf.d]#cat filebeat.conf 
input{
   beats {port => "5044"}
}

filter{
    grok{
       match => { "message" => "%{IP:client_addr}.*\[(?<quest_time>.*)\] \"%{WORD:quest_method} %{URIPATHPARAM:url_method} .*\" (?<response_code>\d+) .* \"(?<referer_url>.*)\" \"(?<agent>.*)\".*" }
    }
}

output{
    elasticsearch{
        hosts => ["192.168.20.10:9200","192.168.20.8:9200","192.168.20.18:9200"]
        index => "%{[fields][server_name]}-%{[fields][log_type]}-%{[fields][from]}-%{+yyyy.MM.dd}"
    }
}

步骤二:完成语法测试,先测试完成

[root@nginx-test conf.d]#logstash -f filebeat.conf -t

步骤三:filebeat与logstash对接  logstash与ES进行对接

 

2、multiline

通常来讲,日志中一条信息以一行记录,但是有的java应用的日志会分为多行记录

那么multiline作用是将多行日志内容合并成一整行  

  • pattern:用来匹配文本的表达式,也可以是grok表达式
  • negate:是否对pattern的结果取反。false:不取反,是默认值。true:取反。将多行事件扫描过程中的行匹配逻辑取反(如果pattern匹配失败,则认为当前行是多行事件的组成部分)
  • what:如果pattern匹配成功的话,那么匹配行是归属于上一个事件,还是归属于下一个事件。previous: 归属于上一个事件,向上合并。next: 归属于下一个事件,向下合并

举例实操

现在有java日志在/opt/java.log中,如图

步骤一:准备测试日志文件

 步骤二:准备logstash的conf文件,在filter模块中配置multiline插件

[root@nginx-test conf.d]#cat java.conf 
input{
    file {
	path => "/opt/java.log"
	start_position => "beginning"
	sincedb_path => "/etc/logstash/sincedb_path/log_progress"
  }
}

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"
  }
}
output{
	elasticsearch {
	    hosts => ["192.168.20.10:9200","192.168.20.8:9200","192.168.20.18:9200"]
	    index => "java-%{+yyyy.MM.dd}"
	}
}

步骤三:语法测试并启动logstash与ES对接

步骤五:查看kibana 进行验证

3、date

用于分析字段中的日期,然后使用该日期或时间戳作为事件的logstash时间戳。

痛点:

毕竟我这个url是静态的 相对动态请求比较快 而且字节数比较小。就这样的情况下 logstash接收时间与日志时间也是会有延迟的那么对于 生产中的 比如除 查询 当然是想统一一个标准 以日志时间为时间戳那么就需要用到date插件

比如还是刚刚的filebeat采集的nginx日志,现在想要实现访问的日志时间与logstash的时间一致

步骤一:先完成logstash的conf文件编写,完成语法检测以及启动

[root@nginx-test conf.d]#cat filebeat.conf 
input{
   beats {port => "5044"}
}

filter{
    grok{
       match => { "message" => ".*\[(?<quest_time>.*)\].*" }
    }
    date{
        match => ["quest_time", "dd/MMM/YYYY:HH:mm:ss Z"]
        target => "@timestamp"
	timezone => "Asia/Shanghai"
    } 
}

output{
    elasticsearch{
        hosts => ["192.168.20.10:9200","192.168.20.8:9200","192.168.20.18:9200"]
        index => "%{[fields][server_name]}-%{[fields][log_type]}-%{[fields][from]}-%{+yyyy.MM.dd}"
    }
}

步骤二:kibana前端界面验证

 

4、mutate数据修改插件

提供了丰富的基础类型数据处理能力。可以重命名,删除,替换和修改事件中的字段

//Mutate 过滤器常用的配置选项

add_field   向事件添加新字段,也可以添加多个字段
remove_field 从事件中删除任意字段,只能删掉logstash添加的字段 如果是filebeat设置的则不能删除
add_tag   向事件添加任意标签,在tag字段中添加一段自定义的内容,当tag字段中超过一个内容的时候会变成数组  
remove_tag   从事件中删除标签(如果存在)
convert   将字段值转换为另一种数据类型
id   向现场事件添加唯一的ID
lowercase   将字符串字段转换为其小写形式
replace   用新值替换字段
strip   删除开头和结尾的空格
uppercase   将字符串字段转换为等效的大写字母
update   用新值更新现有字段
rename   重命名事件中的字段
gsub   通过正则表达式替换字段中匹配到的值
merge   合并数组或hash事件
split通过指定的分隔符分割字段中的字符串为数组
rename                重命名事件中的字段
gsub                通过正则表达式替换字段中匹配到的值
merge                合并数组或 hash 事件
split               通过指定的分隔符分割字段中的字符串为数组

步骤一:准备测试文件filebeat.conf 

[root@nginx-test conf.d]#cat filebeat.conf 
input{
   beats {port => "5044"}
}

filter{
    grok{
       match => { "message" => "%{IP:client_addr}.*\[(?<quest_time>.*)\] \"%{WORD:quest_method} %{URIPATHPARAM:url_method} .*\" (?<response_code>\d+) .* \"(?<referer_url>.*)\" \"(?<agent>.*)\".*" }
    }
    mutate{
       remove_field => ["message","@version","beat.name"]
       add_field => {
            "f1" => "one"
            "f2" => "two"
    }
       rename => {"source" => "log_path"}
       replace => { "agent" => "computer" }
       gsub => ["response_code", "", "状态码" ]
    }

    date{
        match => ["quest_time", "dd/MMM/YYYY:HH:mm:ss Z"]
        target => "@timestamp"
	timezone => "Asia/Shanghai"
    } 
}

output{
    elasticsearch{
        hosts => ["192.168.20.10:9200","192.168.20.8:9200","192.168.20.18:9200"]
        index => "%{[fields][server_name]}-%{[fields][log_type]}-%{[fields][from]}-%{+yyyy.MM.dd}"
    }
}

步骤二:完成语法检测和启动对接

步骤三: 刷新nginx访问页面 在kibana页面验证效果

拓展 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决 java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错

在使用POI导出Excel表格的时候&#xff0c;本地运行导出没问题&#xff0c;但是发布到服务器后提示 “java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader” 下面是pom.xml中的配置 <dependency><groupId>org.apache.poi</groupId><art…

多场景建模:阿里STAR

多场景建模&#xff1a;阿里STAR 阿里提出了Partitioned Normalization、Star Topology FCN、Auxiliary Network应用到多场景建模&#xff0c;在各个场景上面取得不错的效果。 两个场景&#xff1a; 淘宝主页的banner&#xff0c;展示一个商品或者一个店铺或者一个品牌猜你喜欢…

css 3D立体动画效果怎么转这个骰子才能看到5

css 3D立体动画效果怎么转这个骰子才能看到5 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equ…

Java和SpringBoot学习路线图

看了一下油管博主Amigoscode的相关视频&#xff0c;提到了Java和SpringBoot的学习路线&#xff0c;相关视频地址为&#xff1a; How To Master Java - Java for Beginners RoadmapSpring Boot Roadmap - How To Master Spring Boot 如下图所示&#xff1a; 当然关于Java和Spr…

SpringBoot 服务注册IP选择问题

问题 有时候我们明明A\B服务都注册成功了&#xff0c;但是相互之间就是访问不了&#xff0c;这大概率是因为注册时选择IP时网卡选错了&#xff0c;当我们本地电脑有多个网卡时&#xff0c;程序会随机选择一个有IPV4的网卡&#xff0c;然后读取IPv4的地址 比如我的电脑有3个网…

铸铁平台使用米字型布局的特点——河北北重

铸铁平台使用米字型布局的特点主要有以下几点&#xff1a; 结构稳定&#xff1a;米字型布局能够使得铸铁平台的结构更加稳定。因为米字型布局将平台的重力均匀分散到四个支撑角上&#xff0c;减小了平台的变形和挠曲程度&#xff0c;使得平台能够承受更大的荷载。 节省空间&am…

伊恩·斯图尔特《改变世界的17个方程》傅里叶变换笔记

主要是课堂的补充&#xff08;yysy&#xff0c;我觉得课堂的教育模式真有够无聊的&#xff0c;PPT、写作业、考试&#xff0c;感受不到知识的魅力。 它告诉我们什么&#xff1f; 空间和时间中的任何模式都可以被看作不同频率的正弦模式的叠加。 为什么重要&#xff1f; 频率分量…

【JavaEE进阶】 SpringBoot配置⽂件

文章目录 &#x1f340;配置⽂件的作⽤&#x1f334;SpringBoot配置⽂件&#x1f38b;配置⽂件的格式&#x1f384;properties配置⽂件&#x1f6a9;properties基本语法&#x1f6a9;读取配置⽂件&#x1f6a9;properties的缺点 &#x1f333;yml配置⽂件yml基本语法&#x1f6…

文件服务FTP

文章目录 一、FTP协议二、VSFTPD服务介绍基础配置匿名用户访问&#xff08;默认开启&#xff09;本地用户访问虚拟用户访问 一、FTP协议 FTP协议&#xff1a;文件传输协议&#xff08;File Transfer Protocol&#xff09; 协议定义了一个在远程计算机系统和本地计算机系统之间…

【Linux的基本指令】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1、ls 指令 2、 pwd命令 3、cd 指令 4、touch指令 5、mkdir指令&#xff08;重要&#xff09; 6、rmdir指令 && rm 指令&#xff08;重要&#xff09;…

中使用 MOOTDX库读取通达信的数据,WIN+PYTHON,最新问题排查

M项目概述 - MOOTDXhttps://www.mootdx.com/zh-cn/latest/帮助文档https://www.mootdx.com/zh-cn/latest/​​​​​​​​​​​​​​​​​​​​​ 库的安装 注&#xff1a;我这的安装过程必须要ROOT权限&#xff0c;所以我用管理员的权限运行了控制台 pip install moot…

SEO文章自动生成发布网站工具【网站维护必备】

在SEO优化的过程中&#xff0c;高质量的原创文章是吸引搜索引擎和用户的关键。然而&#xff0c;对于许多站长和网站管理员而言&#xff0c;创作大量原创内容可能是一项繁琐而耗时的任务。为了解决这一难题&#xff0c;免费的147SEO软件应运而生&#xff0c;通过输入关键词或标题…

Red Hat Enterprise Linux 6.10 安装图解

引导和开始安装 选择倒计时结束前&#xff0c;通过键盘上下键选择下图框选项&#xff0c;启动图形化安装过程。需要注意的不同主板默认或者自行配置的固件类型不一致&#xff0c;引导界面有所不同。也就是说使用UEFI和BIOS的安装引导界面是不同的&#xff0c;如图所示。若手动调…

Jenkins环境配置篇-更换插件源

作为持续集成的利器 Jenkins 已经得到了广泛地应用&#xff0c;仅仅作为一个工具&#xff0c;Jenkins 已然有了 自己的生态圈&#xff0c;支持其的 plugin 更是超过 1300。在实际中如何使用以及如何更好地使用 jenkins&#xff0c;一直是大家在实践并讨论的。本系列文章将会从如…

【想要安利给所有人的开发工具】最强工具ChatGPT——分享一些使用经验

目录 &#x1f525;个人使用ChatGPT的经验 &#x1f525;如何使用ChatGPT 方法一 方法二 &#x1f525;&#x1f525;提问技巧分享 1、英语翻译员 2、面试官 3、javascript 控制台 4、Excel表格 5、作曲家 6、辩手 7、小说家 8、诗人 9、数学老师 10、网络安全…

【漏洞复现】Hikvision摄像头产品代码执行漏洞(CVE-2021-36260)

Nx01 产品简介 Hikvision&#xff08;海康威视&#xff09;是一家在中国颇具影响力的安防公司&#xff0c;其网络摄像头产品在市场上占据了相当大的份额。Hikvision的网络摄像头产品线非常丰富&#xff0c;涵盖了各种型号和功能&#xff0c;以满足不同用户的需求。 Nx02 漏洞描…

spring data mongo 在事务中,无法自动创建collection

spring data mongo 在事务中,无法自动创建collection org.springframework.dao.DataIntegrityViolationException: Write operation error on server xxx:30001. Write error: WriteError{code=263, message=Cannot create namespace xxx.xxxin multi-document transaction.…

分类预测 | Matlab实现KPCA-EBWO-SVM分类预测,基于核主成分分析和改进的白鲸优化算法优化支持向量机分类预测

分类预测 | Matlab实现KPCA-EBWO-SVM分类预测&#xff0c;基于核主成分分析和改进的白鲸优化算法优化支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-EBWO-SVM分类预测&#xff0c;基于核主成分分析和改进的白鲸优化算法优化支持向量机分类预测分类效果基本描述程序设计参…

第一部分 概述

目录 一、计算机网络在信息时代的作用 大众熟悉的三大类网络有 Internet 互连网与互联网的区别 可以从两种不同的方面来认识互联网&#xff1a; 互联网在生活中的地位 互联网 互联网负面影响 二、互联网的概述 网络的网络 基本概念 互连网基础结构发展的三个阶段 万维网www(…

【征服redis2】redis的事务介绍

目录 目录 1.redis事务介绍 2 事务出错的处理 3.Java如何使用redis事务 1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用&#xff0c;本文我们来看一下redis的事务问题。事务也是数据库的重要主题&#xff0c;熟悉关系型数据库的读者应该对事务比较了解&a…
最新文章