设为首页 收藏本站
查看: 1142|回复: 0

[经验分享] 关于Logstash中grok插件的正则表达式例子

[复制链接]

尚未签到

发表于 2017-7-9 13:52:32 | 显示全部楼层 |阅读模式
一、前言
  近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属。
  Logstash负责采集日志,Elasticsearch负责存储、索引日志,Kibana则负责通过Web形式展现日志。
  今天,我要说的是Logstash,它可以从多种渠道采集数据,包括控制台标准输入、日志文件、队列等等,只要你能想到,都可以通过插件的方式实现。
  其中,日志源提供的日志格式可能并不是我们想要插入存储介质里的格式,所以,Logstash里提供了一系列的filter来让我们转换日志
  Grok就是这些filters里最重要的一个插件,下面我就说说它。

二、Grok提供的常用Patterns说明及举例
  大多数Linux使用人员都有过用正则表达式来查询机器中相关文件或文件里内容的经历,在Grok里,我们也是使用正则表达式来识别日志里的相关数据块。
  有两种方式来使用正则表达式:


  • 直接写正则来匹配
  • 用Grok表达式映射正则来匹配
  在我看来,每次重新写正则是一件很痛苦的事情,为什么不用表达式来一劳永逸呢?

  特别提示:Grok表达式很像C语言里的宏定义

  要学习Grok的默认表达式,我们就要找到它的具体配置路径,路径如下:
  

# Windows下路径  
[你的logstash安装路径]\vendor\bundle\jruby\x.x\gems\logstash-patterns-core-x.x.x\patterns\grok-patterns
  

  现在对常用的表达式进行说明:

常用表达式


  •   USERNAME 或 USER
      
    用户名,由数字、大小写及特殊字符(._-)组成的字符串

      比如:1234、Bob、Alex.Wong等


  •   EMAILLOCALPART
      
    电子邮件用户名部分,首位由大小写字母组成,其他位由数字、大小写及特殊字符(_.+-=:)组成的字符串。注意,国内的QQ纯数字邮箱账号是无法匹配的,需要修改正则

      比如:stone、Gary_Lu、abc-123等


  •   EMAILADDRESS
      
    电子邮件

      比如:stone@abc.com、Gary_Lu@gmail.com、abc-123@163.com等


  • HTTPDUSER  
    Apache服务器的用户,可以是EMAILADDRESS或USERNAME

  •   INT
      
    整数,包括0和正负整数

      比如:0、-123、43987等


  •   BASE10NUM 或 NUMBER
      
    十进制数字,包括整数和小数

      比如:0、18、5.23等


  •   BASE16NUM
      
    十六进制数字,整数

      比如:0x0045fa2d、-0x3F8709等


  • BASE16FLOAT  
    十六进制数字,整数和小数

  •   WORD
      
    字符串,包括数字和大小写字母

      比如:String、3529345、ILoveYou等


  • NOTSPACE  
    不带任何空格的字符串

  • SPACE  
    空格字符串

  •   QUOTEDSTRING 或 QS
      
    带引号的字符串

      比如:"This is an apple"、'What is your name?'等


  •   UUID
      
    标准UUID

      比如:550E8400-E29B-11D4-A716-446655440000


  • MAC  
    MAC地址,可以是Cisco设备里的MAC地址,也可以是通用或者Windows系统的MAC地址

  •   IP
      
    IP地址,IPv4或IPv6地址

      比如:127.0.0.1、FE80:0000:0000:0000:AAAA:0000:00C2:0002等


  • HOSTNAME  
    主机名称

  • IPORHOST  
    IP或者主机名称

  •   HOSTPORT
      
    主机名(IP)+端口

      比如:127.0.0.1:3306、api.stozen.net:8000等


  •   PATH
      
    路径,Unix系统或者Windows系统里的路径格式

      比如:/usr/local/nginx/sbin/nginx、c:\windows\system32\clr.exe等


  •   URIPROTO
      
    URI协议

      比如:http、ftp等


  •   URIHOST
      
    URI主机

      比如:www.stozen.net、10.0.0.1:22等


  •   URIPATH
      
    URI路径

      比如://www.stozen.net/abc/、/api.php等


  •   URIPARAM
      
    URI里的GET参数

      比如:?a=1&b=2&c=3


  •   URIPATHPARAM
      
    URI路径+GET参数

      比如://www.stozen.net/abc/api.php?a=1&b=2&c=3


  •   URI
      
    完整的URI

      比如:http://www.stozen.net/abc/api.php?a=1&b=2&c=3


日期时间表达式


  •   MONTH
      
    月份名称

      比如:Jan、January等


  •   MONTHNUM
      
    月份数字

      比如:03、9、12等


  •   MONTHDAY
      
    日期数字

      比如:03、9、31等


  •   DAY
      
    星期几名称

      比如:Mon、Monday等


  • YEAR  
    年份数字

  • HOUR  
    小时数字

  • MINUTE  
    分钟数字

  • SECOND  
    秒数字

  •   TIME
      
    时间

      比如:00:01:23


  •   DATE_US
      
    美国日期格式

      比如:10-15-1982、10/15/1982等


  •   DATE_EU
      
    欧洲日期格式

      比如:15-10-1982、15/10/1982、15.10.1982等


  •   ISO8601_TIMEZONE
      
    ISO8601时间格式

      比如:+10:23、-1023等


  •   TIMESTAMP_ISO8601
      
    ISO8601时间戳格式

      比如:2016-07-03T00:34:06+08:00


  • DATE  
    日期,美国日期%{DATE_US}或者欧洲日期%{DATE_EU}

  •   DATESTAMP
      
    完整日期+时间

      比如:07-03-2016 00:34:06


  •   HTTPDATE
      
    http默认日期格式

      比如:03/Jul/2016:00:36:53 +0800


Log表达式


  •   LOGLEVEL
      
    日志等级

      比如:Alert、alert、ALERT、Error等


三、创建自己的Grok表达式
  在业务领域中,可能会有越来越多的日志格式出现在我们眼前,而Grok的默认表达式显然已无法满足我们的需求(比如用户身份证号、手机号等信息),所以,我们需要自己动手添加些表达式。

表达式
正则表达式
说明
DATE_CHS
%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}
中国人习惯的日期格式
ZIPCODE_CHS
[1-9]\d{5}
国内邮政编码
GAME_ACCOUNT
[a-zA-Z][a-zA-Z0-9_]{4,15}
游戏账号,首字符为字母,4-15位字母、数字、下划线组成  还有很多,需要您在业务中灵活运用!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-391979-1-1.html 上篇帖子: CCNP路由实验之十四 路由器的訪问控制ACL 下篇帖子: IP路由及静态路由配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表