专栏首页石瞳禅的互联网实验室关于Logstash中grok插件的正则表达式例子

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

一、前言

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

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

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

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

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

二、Grok提供的常用Patterns说明及举例

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

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

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

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

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

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

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

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

2.1 常用表达式

USERNAME 或 USER

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

比如:1234BobAlex.Wong

EMAILLOCALPART

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

比如:stoneGary_Luabc-123

EMAILADDRESS

电子邮件

比如:stone@abc.comGary_Lu@gmail.comabc-123@163.com

HTTPDUSER

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

INT

整数,包括0和正负整数

比如:0-12343987

BASE10NUM 或 NUMBER

十进制数字,包括整数和小数

比如:0185.23

BASE16NUM

十六进制数字,整数

比如:0x0045fa2d-0x3F8709

BASE16FLOAT

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

WORD

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

比如:String3529345ILoveYou

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.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:\windows\system32\clr.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

2.2 日期时间表达式

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

2.3 Log表达式

LOGLEVEL

日志等级

比如:AlertalertALERTError

三、创建自己的Grok表达式

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

表达式

正则表达式

说明

DATE_CHS

%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}

中国人习惯的日期格式

ZIPCODE_CHS

[1-9]d{5}

国内邮政编码

GAME_ACCOUNT

a-zA-Z{4,15}

游戏账号,首字符为字母,4-15位字母、数字、下划线组成

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微信JS-SDK分享功能的.Net实现

    为了方便开发者实现微信内的网页(基于微信浏览器访问的网页)功能,比如拍照、选图、语音、位置等手机系统的能力,并方便开发者直接使用微信分享、扫一扫等微信特有的能力...

    石瞳禅
  • 【TensorFlow实战——笔记】第3章:TensorFlow第一步_TensorFlow实现Softmax Regression识别手写数字

    MNIST(Mixed National Institute of Standards and Technology database)是一个非常简单的机器视觉...

    石瞳禅
  • 从京东主页里寻找技术的真相

    刚刚经过“618购物节”的挑战,京东(此文简称JD)首次向大众公布了618的交易额,那就是1199亿元。什么?才1199亿,阿里系小伙伴肯定在后面偷笑,搞了18...

    石瞳禅
  • MySQL慢日志优化的一个案例分析

    首先问题的现象是慢日志报警比较多,这是一套内部运维业务的数据库,涉及两个独立的数据库,我们暂且称为devopsdb(运维管理系统数据库),taskopsdb(任...

    jeanron100
  • 服务器端实时推送技术之SSE

    在讲Server-Sent Events (SSE) 之前,我们先来看看 HTTP 请求- 响应。一个标准的 HTTP 请求- 响应,需要客户端打开一个连接,将...

    边鹏 [进阶者]
  • 超精华生信ID总结,想踏入生信大门的你-值得拥有

    要想成为一名合格的生物信息工程师,首要条件就是能在各大生信数据库中自由翱翔。目前的生信数据库大体可以分为三类:

    生信技能树
  • 你不可不知的Java引用类型之——ReferenceQueue源码详解

    对于软引用、弱引用和虚引用,如果我们希望当一个对象被垃圾回收器回收时能得到通知,进行额外的处理,这时候就需要使用到引用队列了。

    弗兰克的猫
  • [图解] 桶排序

    桶排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序、选择排序、插入排序、归并排序、快速排序和堆排序都是基于比较的排序,而桶排序提出了一种新的思路...

    CoderJed
  • Ajax Get和POST请求注意事项

    (备注:以上蓝色函数可以把“特殊符号、中文”转变为浏览器可以识别不会混淆的信息。编码后的信息为%后接两个十六进制数)

    Debug客栈
  • 知乎质量平台的设计和实现

    其中的每一项工作都产生了大量质量数据,这些数据不仅可以用来衡量 QA 团队工作的效果,我们还可以通过质量数据的发布进一步增强其他团队质量意识,更好的建设全公司的...

    Spark学习技巧

扫码关注云+社区

领取腾讯云代金券