filter grok 判断_logstash grok使用案例
Grok 是 Logstash 最重要的插件。你可以在 grok 里预定义好命名正则表达式,在稍后(grok参数或者其他正则表达式里)引用它。它非常适用于syslog logs,apache和一些其他的webserver logs,以及mysql logs。grok有很多定义好pattern,当然也可以自己定义。
grok的语法:
%{SYNTAX:SEMANTIC}
SYNTAX表示grok定义好的pattern,SEMANTIC表示自定义的字段。
例如192.168.0.100
用%{IP:client}可以将IP定义为client
假如现在某webserver log中的内容为以下格式,55.3.244.1 GET /index.html 15824 0.043
我们完全可以利用grok将这些信息定义成以下字段
%{IP:client}%{WORD:method}%{URIPATHPARAM:request}%{NUMBER:bytes}%{NUMBER:duration}
写到配置文件中通常这样子:
input{file{path=>"/var/log/http.log"}}filter{grok{match=>{"message"=>"%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}}}
grok过滤后得到的信息成了以下这样子
client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043
如何自定义Pattern?
语法:(?the pattern here)
假如有以下内容“begin 123.456 end
我们希望将123.456定义成request_time字段,可以向下面这样写这个正则表达式
\s+(?\d+(?:\.\d+)?)\s+
解释:
\s:匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。+表示匹配次数为1次或者多次
(? ):这个是grok语法,request_time表示要将捕获的字符定义成的字段名
\d+:匹配一个或者多个数字
(?:\.\d+):为正则表达式,
(?: pattern):非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
\.\d+:表示点后面跟一个或者多个 数字,(?:\.\d+)?表示点后面跟一个或多个数字这种情况出现0次或者多次,如果为0次,则request_time为一个整数。所以匹配到的结果可能为123.456或者123或者123.4.5.6,这些都满足条件
测试下:
创建一个配置文件,内容如下:input {stdin{}}
filter {
grok {
match => {
"message" => "\s+(?\d+(?:\.\d+)?)\s+"
}
}
}
output {stdout{}}
运行 logstash 进程然后输入 "begin 123.456 end",你会看到类似下面这样的输出:{
"message" => "begin 123.456 end",
"@version" => "1",
"@timestamp" => "2014-08-09T11:55:38.186Z",
"host" => "raochenlindeMacBook-Air.local",
"request_time" => "123.456"
}
练习:/var/log/userlog.info 日志文件中获取到的信息为以下格式,需要自定义
2016-05-20T20:00:15.703407+08:00 localhost [audit root/13283 as root/13283 on pts/0/172.16.100.99:64790->10.10.10.6:22]: #=== session closed ===
2016-05-21T09:52:54.424055+08:00 localhost [audit root/13558 as root/13558 on pts/0/172.16.100.99:50897->10.10.10.6:22]: #=== session opened ===
2016-05-21T09:53:25.687134+08:00 localhost [audit root/13558 as root/13558 on pts/0/172.16.100.99:50897->10.10.10.6:22] /root: cd /etc/logstash/conf.d/
2016-05-21T09:53:26.284741+08:00 localhost [audit root/13558 as root/13558 on pts/0/172.16.100.99:50897->10.10.10.6:22] /etc/logstash/conf.d: ll
注意上面的日志文件中不是每一行的内容格式都是一样的,grok表达式如下%{TIMESTAMP_ISO8601:timestamp} %{IPORHOST:login_host} \[\S+ %{USER:login_user}/%{NUMBER:pid} as %{USER:sudouser}/%{NUMBER:sudouser_pid} on %{WORD:tty}/%{NUMBER:tty_id}/%{IPORHOST:host_ip}:%{NUMBER:source_port}-\>%{IPORHOST:local_ip}:%{NUMBER:dest_port}\](?:\:|) (%{UNIXPATH:current_path} %{GREEDYDATA:command}|%{GREEDYDATA:detail})注意:(?:\:|) (%{UNIXPATH:current_path} %{GREEDYDATA:command}|%{GREEDYDATA:detail})
上面的日志内容在后面出现了不一样的地方
该如何处理? 就是在这个不一样的地方加上(?:\:|)
表示匹配后面内容是冒号或者其他内容,然后文件中出现的是什么怎么写grok表达式。例如当出现/root: cd /etc/logstash/conf.d/
这样的内容时,grok这样写,%{UNIXPATH:current_path} %{GREEDYDATA:command}
当出现#=== session closed ===
这样的内容时,grok这样写,%{GREEDYDATA:detail
但是这两中情况需要加“|”来判断,所以正确的写法为(%{UNIXPATH:current_path} %{GREEDYDATA:command}|%{GREEDYDATA:detail})
整体需要括起来。这里相当于对(?:\:|)
是一种呼应。
filter grok 判断_logstash grok使用案例相关推荐
- JavaWeb中filter的详解及应用案例
JavaWeb中filter的详解及应用案例 转载自:http://www.cnblogs.com/vanl/p/5742501.html 一:Filter介绍 Filter可认为是Servlet的一 ...
- Vue 模板语法 插值操作 绑定属性 计算属性 事件监听 条件判断 循环遍历 阶段案例
1 插值操作 1.1 Mustache语法 也就是双大括号 {{ }} <div id="app"> <!-- mustche语法中,不仅可以直接写变量,也可以写 ...
- python星座判断_6 python星座案例
列表可以增加和删减元素 增加数据: 删除数据: list1.append('x') print(list1) list1.remove(123) print(list1) 输出结果为: [123, ' ...
- 使用Logstash filter grok过滤日志文件
Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...
- Logstash:Grok filter 入门
有效分析和查询送入 Elastic Stack 的数据的能力取决于信息的可读性. 这意味着,当将非结构化数据摄取到系统中时,必须将其转换为结构化数据. 通常,这个至关重要的任务留给 Logstash( ...
- 日志分析logstash插件-grok详解
一般系统或服务生成的日志都是一大长串.每个字段之间用空格隔开.logstash在获取日志是整个一串获取,如果把日志中每个字段代表的意思分割开来在传给elasticsearch.这样呈现出来的数据更加清 ...
- logstash7.8 apache日志解析 grok
1. apache日志 27.60.18.21 - - [21/Jul/2020:10:10:10 +0530] "GET /api/v1.2/places/search/json?user ...
- logstash grok插件语法介绍
介绍 logstash拥有丰富的filter插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!Grok 是 Logstash ...
- logstash之grok正则表达式语法
logstash过滤器插件filter详解及实例 1.logstash过滤器插件filter 1.1.grok正则捕获 grok是一个十分强大的logstash filter插件,他可以通过正则解析任 ...
- logstash之grok过滤
简介 前面我们的nginx日志编码使用的json,logstash直接输入预定义好的 JSON 数据,这样就可以省略掉 filter/grok 配置,但是在我们的生产环境中,日志格式往往使用的是普 ...
最新文章
- opencv物品定位_如何使用OpenCV实现基于标记的定位
- axios取消接口请求
- 消除代码中的 if-else/switch-case
- 精美Java 图书管理系统
- mysql取第一行数据_select取第一行数据
- Python基础知识day2
- cannot find -lnl
- 【讲座】02 写作英文学术论文
- ubuntu安装qv2ray问题?
- java sdk他edk de区别_EDK笔记——自定义IP核
- MySQL8.0.17 - Multi-Valued Indexes 简述
- Signal ()函数详细介绍 Linux函数
- c语言把char转化为string,浅析string 与char* char[]之间的转换
- Docker Swarm 健康检查
- 设备防病毒-深信达MCK(云私钥)
- 2021年11月15日到2021年11月21日笔记
- MacBook Pro使用初体验之Mac快捷键汇总(持续更新中)
- 中国最美的、令人震撼的10大名山
- 常用G.657与G.652光纤的抗弯曲性能差距有多大?
- 举一反三:示例增强的(example augmented)自然语言处理
热门文章
- 基于Proteus学习单片机系列(五)——定时器实现电子表
- 机器学习 Python scikit-learn 中文文档(10)Scikit-Learn 处理文本数据
- 推荐一款博客备份工具!
- STM32F407 ETR 计数程序
- python判断英文字母_python判断字符串中是否含有英文 | 张先生博客
- html刮刮乐百分比,jQuery+html5实现彩票刮刮乐效果
- 洛谷P5385 [Cnoi2019]须臾幻境
- Sentiment140数据集
- Mysql报错 Error querying database. Cause java.sql.SQLSyntaxErrorException
- 天梯图excl_2017最全【CPU天梯图】