Logstash的grok以及Ruby
logstash的grok插件的用途是提取字段,将非格式的内容进行格式化,
input {
file {
path => "/var/log/http.log"
}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}
}
匹配字段如下:
client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043
更加震撼的是logstash内置很多的正则表达式,参见参考部分的链接。
例如:对于字符串:
Jan 1 06:25:43 mailserver14 postfix/cleanup[21403]: BEF25A72965: message-id=<20130101142543.5828399CCAF@mailserver14.example.com>
可以用如下的解析
filter {
grok {
patterns_dir => ["./patterns"]
match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }
}
}
其中SYSLOGBASE以及GREEDYDATA都是logstash里面内置好的解析规则,可以再上面提供的github中找到,是不是很省劲?
对于POSTFIX_QUEUEID而言,是一个我们自己定制的一个解析,放在根目录的patterns路径下,那么需要前面的patterns_dir参数中指定一下路径即可。文件的内容如下:
# contents of ./patterns/postfix:
POSTFIX_QUEUEID [0-9A-F]{10,11}
我们来看一下grok里面令人兴奋的几个例子:
1. override:
消息:
May 29 16:37:11 sadness logger: hello world
grok规则:
filter {
grok {
match => { "message" => "%{SYSLOGBASE} %{DATA:message}" }
overwrite => [ "message" ]
}
}
解析结果:
hello world
2. addtag,addfield
处于测试目的,你能希望添加一些字段来辅助跟踪,或者增强表达内容可以通过addtag以及addfield来进行统一设置。tag表达式有一个点,就是可以一次性添加多个,因为这些options的类型都是array,如果是多个,需要用"[... ...]"来包裹。
filter {
grok {
add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
}
}
# You can also add multiple fields at once:
filter {
grok {
add_field => {
"foo_%{somefield}" => "Hello world, from %{host}"
"new_field" => "new_static_value"
}
}
}
filter {
grok {
add_tag => [ "foo_%{somefield}" ]
}
}
# You can also add multiple tags at once:
filter {
grok {
add_tag => [ "foo_%{somefield}", "taggedy_tag"]
}
}
3. 多个规则匹配
filter {
grok {
match => { "message" => [ "%{NUMBER:duration}", "%{NUMBER:speed}" ] } }
}
关于Grok解析
想要测试我们的grok而是解析正确可以通过下面的网站进行测试:
http://grokdebug.herokuapp.com/
例如,
- 匹配名字
Demo:Lorry -- ::
模式:^%{USERNAME:name}$
匹配结果:
{ "name": [ [ "Lorry" ] ] }
2.匹配时间
Demo:--8T11::57.333
模式:%{TIMESTAMP_ISO8601 :lorry}
匹配结果
{ "TIMESTAMP_ISO8601": [ [ "2018-9-8T11:19:57.333" ] ], "YEAR": [ [ "" ] ], "MONTHNUM": [ [ "" ] ], "MONTHDAY": [ [ "" ] ], "HOUR": [ [ "", null ] ], "MINUTE": [ [ "", null ] ], "SECOND": [ [ "57.333" ] ], "ISO8601_TIMEZONE": [ [ null ] ] }
3.下面是一个比较复杂的demo,就是匹配多部分:
DemoLorry --8T11::57.333
%{USERNAME:Lorry}%{SPACE}%{TIMESTAMP_ISO8601:time}
Ruby
最后是关于ruby,下面链接中就是一个比较好的Ruby教程,就ruby的语法以及日期等处理方式都有说明。
参考:
1. 关于grok内置好的正则表达式
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
2. 下面是一篇很好的介绍logstash的文章(唉,只有google可以搜得到)
https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
3. Ruby教程
https://code.ziqiangxuetang.com/ruby/ruby-tutorial.html
Logstash的grok以及Ruby的更多相关文章
- Logstash使用grok解析IIS日志
Logstash使用grok解析IIS日志 1. 安装配置 安装Logstash前请确认Elasticsearch已经安装正确,参见RedHat6.4安装Elasticsearch5.2.0. 下载链 ...
- 使用logstash的grok插件解析springboot日志
使用logstash的grok插件解析springboot日志 一.背景 二.解决思路 三.前置知识 四.实现步骤 1.准备测试数据 2.编写`grok`表达式 3.编写 logstash pipel ...
- logstash filter grok 用法
在elk+filebeat都安装好,且明白了基本流程后,主要的就是写logstash的filter了,以此来解析特定格式的日志 logstash的filter是用插件实现的,grok是其中一个,用来解 ...
- logstash 使用grok正则解析日志
http://xiaorui.cc/2015/01/27/logstash%E4%BD%BF%E7%94%A8grok%E6%AD%A3%E5%88%99%E8%A7%A3%E6%9E%90%E6%9 ...
- Logstash使用grok过滤nginx日志(二)
在生产环境中,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析. 本文采用grok ...
- 使用Logstash filter grok过滤日志文件
Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...
- Logstash使用grok插件解析Nginx日志
grok表达式的打印复制格式的完整语法是下面这样的: %{PATTERN_NAME:capture_name:data_type}data_type 目前只支持两个值:int 和 float. 在线g ...
- 关于Logstash中grok插件的正则表达式例子
一.前言 近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属. Logstash负责采集日志,Ela ...
- logstash的grok正则匹配规则文件
文件路径:logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns/grok-patterns 在线调试g ...
随机推荐
- 移动端touchmove卡顿
网上提到的优化技术: 1.window. requestAnimationFrame() a.不用定义时间间隔,避免间隔长:卡顿,间隔短:浏览器漏帧的情况.由浏览器在绘制完一帧后自动再次调用绘制下一帧 ...
- day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
# 多态的理解:# Python 天生自带多态# 鸭子类型 list 和 tuple 就是一对鸭子类型 很像但是没有继承关系## 而其他的类型 上传参数或者打印参数的时候 必须是指定的数据类型# -- ...
- __autolaod
转载自:https://blog.csdn.net/baidu_30000217/article/details/52743139 php实现类文件自动载入有两种办法: 魔术方法:__autoload ...
- finfo_file
本文实例讲述了PHP使用finfo_file()函数检测上传图片类型的实现方法.分享给大家供大家参考,具体如下: 在输入输出中,文件的交互必不可少,比如文件的上传什么的.这里我们来解决一个小问题, ...
- Day12作业及默写
1.整理今天的博客,写课上代码,整理流程图. 2.用列表推导式做下列小题 li=['alex','wusir','abds','meet','ab'] a. 过滤掉长度小于3的字符串列表,并将剩下的转 ...
- Python eval,exac,compile
# eval 是把字符串类型的数据作为代码进行执行 s = "18+2" ret = eval(s) # 执行字符串类型的代码 print(ret) code = input(&q ...
- maven install中依赖关系打包failed
maven 中maven dependencies中依赖出现了项目,无法打包 ,出现的错误如图.说明:依赖的项目为project-dao 打包的项目为project-service 都在proje ...
- react-native “Unable to resolve module 'AccessibilityInfo'” 的解决方案
执行 react-native run-android 安装Android APP后却是一屏大红幕报 Unable to resolve module ‘AccessibilityInfo’ 的异常 ...
- Oracle无监听程序
小编在使用oracle时经常遇到“ 报错“ORA-12541: TNS: 无监听程序”” 多方搜索,找到一个很好的解决方法,给大家分享一下: 1 从开始菜单中打开“Oracle Net Configu ...
- 【转载】 深度学习总结:用pytorch做dropout和Batch Normalization时需要注意的地方,用tensorflow做dropout和BN时需要注意的地方,
原文地址: https://blog.csdn.net/weixin_40759186/article/details/87547795 ------------------------------- ...