zoukankan      html  css  js  c++  java
  • 关于Logstash中grok插件的正则表达式例子

    原文地址:https://www.cnblogs.com/stozen/p/5638369.html

    一、前言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    常用表达式

    • 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: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

    Log表达式

    • LOGLEVEL
      日志等级

      比如:AlertalertALERTError

    三、创建自己的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位字母、数字、下划线组成

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

  • 相关阅读:
    二分图模板(洛谷P3386)
    2013提高组复赛Day1
    2014Noip提高组复赛Day2题解
    Noip2016Day2T2 蚯蚓
    poj1655 Balancing Act
    codevs1919创世纪
    bzoj1040[ZJOI2008]骑士
    codevs1521 华丽的吊灯
    【20200414】ZumaV3-算法与数据结构课程作业
    【20171111】 Codevs 1214 线段覆盖
  • 原文地址:https://www.cnblogs.com/cq-yangzhou/p/10818130.html
Copyright © 2011-2022 走看看