2026年关于Logstash中grok插件的正则表达式例子

关于Logstash中grok插件的正则表达式例子近期需要对 Nginx 产生的日志进行采集 问了下度娘 业内最著名的解决方案非 ELK Elasticsearc Logstash Kibana 莫属 Logstash 负责采集日志 Elasticsearc 负责存储 索引日志 Kibana 则负责通过 Web 形式展现日志 今天 我要说的是 Logstash 它可以从多种渠道采集数据 包括控制台标准输入 日志文件 队列等等

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属。

Logstash负责采集日志,Elasticsearch负责存储、索引日志,Kibana则负责通过Web形式展现日志。

今天,我要说的是Logstash,它可以从多种渠道采集数据,包括控制台标准输入、日志文件、队列等等,只要你能想到,都可以通过插件的方式实现。

其中,日志源提供的日志格式可能并不是我们想要插入存储介质里的格式,所以,Logstash里提供了一系列的filter来让我们转换日志

Grok就是这些filters里最重要的一个插件,下面我就说说它。

大多数Linux使用人员都有过用正则表达式来查询机器中相关文件或文件里内容的经历,在Grok里,我们也是使用正则表达式来识别日志里的相关数据块。

有两种方式来使用正则表达式:

  1. 直接写正则来匹配
  2. 用Grok表达式映射正则来匹配

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

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

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

# Windows下路径 [你的logstash安装路径]vendorbundlejrubyx.xgemslogstash-patterns-core-x.x.xpatternsgrok-patterns 

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

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



比如:1234BobAlex.Wong

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



比如:stoneGary_Luabc-123

  • EMAILADDRESS
    电子邮件



比如:

  • HTTPDUSER
    Apache服务器的用户,可以是EMAILADDRESSUSERNAME



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



比如:0-12343987

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



比如:0185.23

  • BASE16NUM
    十六进制数字,整数



比如:0x0045fa2d-0x3F8709

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



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



比如:StringILoveYou

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



  • SPACE
    空格字符串



  • QUOTEDSTRING 或 QS
    带引号的字符串



比如:“This is an apple”‘What is your name?’

  • UUID
    标准UUID



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

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



  • IP
    IP地址,IPv4或IPv6地址



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

  • HOSTNAME
    主机名称



  • IPORHOST
    IP或者主机名称



  • HOSTPORT
    主机名(IP)+端口



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

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



比如:/usr/local/nginx/sbin/nginxc:windowssystem32clr.exe

  • URIPROTO
    URI协议



比如:httpftp

  • URIHOST
    URI主机



比如:www.stozen.net10.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
    月份名称



比如:JanJanuary

  • MONTHNUM
    月份数字



比如:03912

  • MONTHDAY
    日期数字



比如:03931

  • DAY
    星期几名称



比如:MonMonday

  • YEAR
    年份数字



  • HOUR
    小时数字



  • MINUTE
    分钟数字



  • SECOND
    秒数字



  • TIME
    时间



比如:00:01:23

  • DATE_US
    美国日期格式



比如:10-15-198210/15/1982

  • DATE_EU
    欧洲日期格式



比如:15-10-198215/10/198215.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

  • LOGLEVEL
    日志等级



比如:AlertalertALERTError

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

表达式 正则表达式 说明 DATE_CHS %{YEAR}[./-]%{MONTHNUM}[./-]% 中国人习惯的日期格式 ZIPCODE_CHS [1-9]d 国内邮政编码 GAME ACCOUNT [a-zA-Z][a-zA-Z0-9] 游戏账号,首字符为字母,4-15位字母、数字、下划线组成

还有很多,需要您在业务中灵活运用!

小讯
上一篇 2026-04-23 19:16
下一篇 2026-04-23 19:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/276432.html