前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Logstash的grok表达式与Filebeat的日志过滤

Logstash的grok表达式与Filebeat的日志过滤

作者头像
WindCoder
发布2018-09-19 12:00:50
5K0
发布2018-09-19 12:00:50
举报
文章被收录于专栏:WindCoder

9.附录

9.1 grok表达式

grok为Logstash 的Filter的一个插件,又因为存在表达式要配置,最开始当成过滤条件的配置了。随着深入了解,发现这个只是一个数据结构化转换工具,主要作用就是把String类型的字符串转为key-value形式。

比如这里的ngix logs的格式为:

代码语言:javascript
复制
 '$remote_addr - $remote_user [$msec] [$time_iso8601] sid:"$cookie_sid" "$request" '
                      '$status $body_bytes_sent ref:"$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

打印日志为:

代码语言:javascript
复制
192.168.0.221 - - [1488865947.648] [2017-03-07T13:52:27+08:00] sid:"1cbf1328-d6f4-4fa8-bb7a-768012c89419" "GET /learner/js/styles.bundle.js HTTP/1.0" 304 0  ref:"http://dev.qc.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393" "121.0.0.234"

所以上面01-logstash-initial.conf中的grok表达式为:

代码语言:javascript
复制
%{IPORHOST:[nginx][access][client_ip]} - %{DATA:[nginx][access][user_name]} %{DATA:[nginx][access][msec]} \[%{DATA:[nginx][access][time_iso8601]}\] sid:\"%{DATA:[nginx][access][cookie_sid]}\" \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} ref:\"%{DATA:[nginx][access][referer]}\" \"%{DATA:[nginx][access][user_agent]}\" \"%{DATA:[nginx][access][x_forwarded]}\"

一个小表达式的格式为%{IPORHOST:[nginx][access][client_ip]},以:分界,其中IPORHOST为grok内置表达式的匹配规则,[nginx][access][client_ip]为自定义名称,可以为任意值。最后写入时至少要用""包起来,之后也可以再加一层[]。表达式匹配规则允许自定义,具体方式可见 Grok filter plugin

可以在 http://grokdebug.herokuapp.com/ 上面在线调试所需要等 grok 正则表达式,具体操作如下图:

9.2 过滤日志

日志的过滤工作可以在Filebeat中进行,在配置 filebeat.yml中的input时,配置好stdin类型下的include_lines或者exclude_lines即可。例:

代码语言:javascript
复制
filebeat.inputs:
- type: stdin
  ...
  include_lines: ['^ERR', '^WARN']

include_lines:正则表达式列表,用于匹配希望Filebeat包含的行。Filebeat仅导出与列表中的正则表达式匹配的行。默认情况下,将导出所有行。空行被忽略。

exclude_lines:正则表达式列表,用于匹配您希望Filebeat排除的行。Filebeat会删除与列表中的正则表达式匹配的所有行。默认情况下,不会删除任何行。空行被忽略。

如果这两个同时被定义,Filebeat将始终先执行include_lines,再执行exclude_lines。执行顺序与这两个选项的定义顺序无关。

详情可见 Stdin input

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.附录
    • 9.1 grok表达式
      • 9.2 过滤日志
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档