“我就于茫茫人海中寻我唯一灵魂之伴侣,得之吾幸,失之吾命,如此而已”


搭建ELK时,在Logstash花费了很多的时间,最后也算是摸得个一知半解,话不多说,开始搬砖,
安装不多说,还没搭建的点击→传送门
编辑配置文件

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {#文件的方式收集日志file{path => ["xx/xxx.log"]}#tcp方式收集日志tcp{port => "5044"#自己取的类型type => "log4j2"}#filebeat的方式beats{port => "5044"}}filter {grok{match => {"message" => "\{\"%{WORD}\":\"\[%{LOGLEVEL:level}\s\]\s%{YEAR:year}-%{MONTHNUM:mouth}-%{MONTHDAY:day} %{HOUR:hour}:?%{MINUTE:minute}(?::?%{SECOND:second})\s%{JAVACLASS:project}\s%{JAVACLASS:class}\(%{JAVAFILE:file}(?::%{NUMBER:line})?\)\s-\[%{UUID:traceId}\]\s-\s(?<msg>.+)\}"}add_tag => ["myLog"]}#将massage字段转成jsonjson {source => "message"}date {match => ["time", "yyyy-MM-dd HH:mm:ss.SSS"]remove_field => ["time"]}
}
filter{if "_grokparsefailure" in [tags]{drop{}
}
}output {# if "traceId" in [message]{elasticsearch {hosts => ["192.168.1.185:9200"]index => "application-%{+YYYY.MM.dd}"}#}

注意

  • 三种input,选一种即可,当然你非要用两种也ok,注意改一下端口就行,file和beat没啥说的,beat我在搭建ELK介绍过了,然后就是tcp方式,拿log4j2举栗子,在log4j2.xml文件中的appender添加一个socket节点就行,亲测可行。
  • out输出到elasticsearch,可以添加if,else进行删选,logstash的if,else,找了一个https://windcoder.com/logstash6peizhiyufazhongdetiaojianpanduan
  • 重点来了,过滤:
    你可以使用if,else语法实现简单地过滤,但我们更多的时候需要用到Logstash的grok过滤插件
    正如上面所见,grok的基本语法是这样的
%{YEAR:year}
  • YEAR:标识匹配年份的字符串
  • year:将匹配到的字符串存储到year这个变量中,在其他地方你可以直接用这个变量,在kibnan里面也会看见
    就相当于他已经把规则给你封装好了,你直接用就行,大概有这么多规则:

https://www.missshi.cn/api/view/blog/5ac6dea622890914df000001
然而内置的不一定满足我们的需求,这时需要我们自己写正则

(?<name>pattern)
  • name:和上面的year一样,存储匹配到的字段,在其他地方可以直接使用
  • pattern:自己写的正则表达式。
    然后规则就这样,两个可以结合起来一起使用,接下来就写吧,先给个测试的网址http://grokdebug.herokuapp.com/
    可以测试你写的正则,举个栗子,这样子的log4j2日志:
{"log":"[INFO ] 2019-09-16 01:01:06,167 com.byb.provider1.controller.ProviderController com.byb.provider1.controller.ProviderController.test1(ProviderController.java:33) -[b29c258c-0c61-406c-b788-f1496c406924] - uri=test1,我是服务提供者一。欢迎光临。\r\n","stream":"stdout","time":"2019-09-16T01:01:06.172065638Z"}
{"log":"[INFO ] 2019-09-23 03:30:06,607 com.netflix.discovery.DiscoveryClient com.netflix.discovery.DiscoveryClient.unregister(DiscoveryClient.java:942) -[] - DiscoveryClient_TS-PROVIDER1/7cf064f721ba:TS-PROVIDER1:9001 - deregister  status: 200\r\n","stream":"stdout","time":"2019-09-23T03:30:06.610942209Z"}

两条日志最主要的区别就是一个有UUID,而一个没有,那我就匹配有UUID的就可以实现过滤,

\{\"%{WORD}\":\"\[%{LOGLEVEL:level}\s\]\s%{YEAR:year}-%{MONTHNUM:mouth}-%{MONTHDAY:day} %{HOUR:hour}:?%{MINUTE:minute}(?::?%{SECOND:second})\s%{JAVACLASS:project}\s%{JAVACLASS:class}\(%{JAVAFILE:file}(?::%{NUMBER:line})?\)\s-\[%{UUID:traceId}\]\s-\s(?<message>.+)\}

这是过滤规则,正则就应该不用我介绍了吧,主要是理解他所规定的格式,聪明的你应该一看就明白,我这么笨都研究出来了,在那个grok语法调试网站你可以很清楚的看见自己所匹配的内容,建议从前往后一个挨个字符串匹配,匹配成功一个,下面json便会多一条数据,这样不会乱。
这里主要用到了内置的java的规则
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/java
这里面是官方的java内置匹配规则,还有其他语法的,需要的自己去看。
授人以鱼,不如授人以渔。
这大概就是我几天所学到的东西,希望对你有所帮助,欢迎在下方交流学习。

Logstash过滤详解(一知半解)相关推荐

  1. Logstash Grok详解

    题外话 如需转载文章,请保留文章出处(blog.csdn.net/knight_zhou).因为我的很多文章一般是会进行更新的.也避免百度搜出来一大推相似的文章,却找不到原创博主. 介绍 Logsta ...

  2. [Logstash]使用详解

    Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件. 本文针对官方文档进行翻译以及实践,希望有更 ...

  3. ELK学习笔记之Logstash详解

    0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...

  4. logstash过滤器插件filter详解及实例

    原创作者:峰哥ge 原创地址: https://www.cnblogs.com/FengGeBlog/p/10305318.html logstash过滤器插件filter grok正则捕获 grok ...

  5. 使用方差阈值过滤(VarianceThreshold)进行特征选择、删除方差低于某一阈值的特征、详解及实战

    使用方差阈值过滤(VarianceThreshold)进行特征选择.删除方差低于某一阈值的特征.详解及实战 方差阈值(VarianceThreshold)法是一种过滤特征选择法. 我们有一组数值特性, ...

  6. Logstash(二)input、codec插件详解

    input input 插件指定数据输入源,一个pipeline可以有多个input插件,我们主要讲解下面的几个input插件: - stdin- file- kafka Input Plugin – ...

  7. EEG伪影详解和过滤工具的汇总(二)

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 在<EEG伪影类型详解和过滤工具的汇总(一)>,我们详细介绍了EEG伪影类型和产生原因,这篇文章,我们主要介 ...

  8. logstash java插件_[logstash-input-log4j]插件使用详解

    Log4j插件可以通过log4j.jar获取Java日志,搭配Log4j的SocketAppender和SocketHubAppender使用,常用于简单的集群日志汇总. 最小化的配置 input { ...

  9. 详解JavaScript数组过滤相同元素的5种方法

    详解JavaScript数组过滤相同元素的5种方法:https://www.jb51.net/article/114490.htm 转载于:https://www.cnblogs.com/bydzha ...

最新文章

  1. 大学可以学前端开发_所有开发人员在大学中应该学习的东西
  2. Android p2p service,android – WifiP2pDnsSdServiceInfo.newInstance中的可用服务类型
  3. 一本真正讲“大数据”处理思路的书
  4. Android之TextView文字绘制流程
  5. Tez 0.9安装部署+hive on tez配置 + Tez-UI
  6. 基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案
  7. 华为FreeBuds 3耳机更新推送:新增支持骨声纹识别特征
  8. LeetCode刷题(43)--Combinations
  9. javascript高级程序设计pdf_JavaScript八张思维导图
  10. 简单区块链Python实现
  11. python3操作shp文件
  12. 很好看的source insight配色方案
  13. Python中shape简易用法
  14. MOS管烧毁,90%以上的硬件工程师都会遇到的问题!
  15. 点击右键计算机属性弹出任务管理器,win10查看内存条型号的步骤
  16. 计算机的数学思想源头(回复“计算机数学”可下载PDF典藏版)
  17. anaconda3里pkgs可以删除吗,我试过conda clean -a,但用完之后还有10个G,吐血,C盘没空间了,pkgs删除影响虚拟环境吗,毕竟base大多数人用不到啊,求教
  18. 师范大学计算机专业研究生,2019考研调剂:福建师范大学计算机类学硕研究生调剂生...
  19. WebGL简易教程(五):图形变换(模型、视图、投影变换)
  20. Java 版本任你发,我用Java8.(Java 15 新功能介绍 )

热门文章

  1. 医学图像分割 unet实现(一)
  2. 如何做一个好的项目经理
  3. IC工程师入门必学《Verilog超详细教程》(附下载)
  4. Jenkins之自动进行360加固
  5. Android默认设置MTP模式
  6. 华为交换机console密码相关
  7. 字符串常见方法总结:方法的作用、参数、返回值(构造方法可省略)
  8. jzoj5935小凯学数学
  9. Deep Depth Completion of a Single RGB-D Image(深度像素补全)全文机器翻译
  10. 【附源码】计算机毕业设计SSM汽车维修服务系统