關於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安裝路徑]\vendor\bundle\jruby\x.x\gems\logstash-patterns-core-x.x.x\patterns\grok-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:\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

日期時間表達式

  • 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位字母、數字、下划線組成

還有很多,需要您在業務中靈活運用!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM