关于Logstash中grok插件的正则表达式例子
一、前言
近期需要对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位字母、数字、下划线组成 |
还有很多,需要您在业务中灵活运用!
关于Logstash中grok插件的正则表达式例子的更多相关文章
- 使用logstash的grok插件解析springboot日志
使用logstash的grok插件解析springboot日志 一.背景 二.解决思路 三.前置知识 四.实现步骤 1.准备测试数据 2.编写`grok`表达式 3.编写 logstash pipel ...
- Logstash使用grok插件解析Nginx日志
grok表达式的打印复制格式的完整语法是下面这样的: %{PATTERN_NAME:capture_name:data_type}data_type 目前只支持两个值:int 和 float. 在线g ...
- logstash 中multiline插件的用法
input { stdin { codec =>multiline { charset=>... #可选 字符编码 max_bytes=>... #可选 bytes类型 设置最大的字 ...
- Logstash的grok以及Ruby
logstash的grok插件的用途是提取字段,将非格式的内容进行格式化, input { file { path => "/var/log/http.log" } } fi ...
- Logstash详解之——filter模块-grok插件
1. grok插件:能匹配一切数据,但是性能和对资源的损耗也很大. grok内置字段类型参见: https://blog.csdn.net/cui929434/article/details/9439 ...
- logstash -grok插件语法介绍
介绍 logstash拥有丰富的filter插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!Grok 是 Logsta ...
- logstash实战filter插件之grok(收集apache日志)
有些日志(比如apache)不像nginx那样支持json可以使用grok插件 grok利用正则表达式就行匹配拆分 预定义的位置在 /opt/logstash/vendor/bundle/jruby/ ...
- logstash中的redis插件
redis作为logstash中的官方broker,既有input插件,还有output插件. redis input插件 data_type属性: 有三种类型, list -> BLPOP - ...
- logstash之Filter插件
Logstash之所以强悍的主要原因是filter插件:通过过滤器的各种组合可以得到我们想要的结构化数据 1:grok正则表达式 grok**正则表达式是logstash非常重要的一个环节**:可以通 ...
随机推荐
- 平衡二叉树 (牛客国庆day2)解锁二叉树打表姿势&&找规律套路
链接:https://www.nowcoder.com/acm/contest/202/F来源:牛客网 平衡二叉树,顾名思义就是一棵“平衡”的二叉树.在这道题中,“平衡”的定义为,对于树中任意一个节点 ...
- group by多字段分组
在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据.比如有一个学生选课表,表结构如下: Table: Subject_Selection S ...
- HBase客户端访问超时的多个因素及参数
在一个需要低延时响应的hbase集群中,使用hbase默认的客户端超时配置简直就是灾难. 但是我们可以考虑在客户端上加上如下几个参数,去改变这种状况: 1. hbase.rpc.timeout: RP ...
- 用一个时钟在FPGA中计算直方图
直方图对数字数据的分析通常是一种有用的工具.不过,要从一个直方图获得可靠的结果,必须获得大量数据,通常是要10万到100万个点.如果需要分析一个ADC的数字输出,可以采用一片FPGA(图1). 图中显 ...
- NGINX: 反向代理 Nexus
Nginx 反向代理 nexus 的服务, 一直卡在 Initialize... 解决方式是添加一个 header X-Forwarded-Proto: proxy_set_header X-Forw ...
- 边缘检测:Canny算子,Sobel算子,Laplace算子
1.canny算子 Canny边缘检测算子是John F.Canny于 1986 年开发出来的一个多级边缘检测算法.更为重要的是 Canny 创立了边缘检测计算理论(Computational the ...
- dokuwiki安装部署
dokuwiki的地址:https://www.dokuwiki.org/dokuwiki# 1.部署dokuwiki 在D:\xampp\htdocs(xampp安装目录)新建一个doku文件夹,把 ...
- 设计模式之Factory
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: Factory Pattern有3种当然是全部是creational pattern. 1.S ...
- 主成分分析(PCA)及其在R里的实现
主成分分析(principal component analysis,PCA)是一种降维技术,把多个变量化为能够反映原始变量大部分信息的少数几个主成分.设X有p个变量,为n*p阶矩阵,即n个样本的p维 ...
- GBK UTF-16 UTF-8 编码表
GBK UTF-16 UTF-8 ================== D2BB 4E00 E4 B8 80 一 B6A1 4E01 E4 B8 81 丁 C6DF 4E03 E4 ...