grok logstash配置 Grok 正則捕獲

2021-10-12 14:27:36 字數 2152 閱讀 9916

grok 正則捕獲

grok 是 logstash 最重要的外掛程式。你可以在 grok 裡預定義好命名正規表示式,在稍後(grok引數或者其他正規表示式裡)引用它。

正規表示式語法

運維工程師多多少少都會一點正則。你可以在 grok 裡寫標準的正則,像下面這樣:

\s+(?\d+(?:\.\d+)?)\s+

小貼士:這個正規表示式寫法對於 perl 或者 ruby 程式設計師應該很熟悉了,python 程式設計師可能更習慣寫 (?ppattern),沒辦法,適應一下吧。

現在給我們的配置檔案新增第乙個過濾器區段配置。配置要新增在輸入和輸出區段之間(logstash 執行區段的時候並不依賴於次序,不過為了自己看得方便,還是按次序書寫吧):

input }

filter }

執行 logstash 程序然後輸入 "begin 123.456 end",你會看到類似下面這樣的輸出:

"message" => "begin 123.456 end",

"@version" => "1",

"@timestamp" => "2014-08-09t11:55:38.186z",

"host" => "raochenlindemacbook-air.local",

"request_time" => "123.456"

漂亮!不過資料型別好像不太滿意……request_time 應該是數值而不是字串。

我們已經提過稍後會學習用 logstash::filters::mutate 來轉換字段值型別,不過在 grok 裡,其實有自己的魔法來實現這個功能!

grok 表示式語法

注意:在新版本的logstash裡面,pattern目錄已經為空,最後乙個commit提示core patterns將會由logstash-patterns-core gem來提供,該目錄可供使用者存放自定義patterns

下面是從官方檔案中摘抄的最簡單但是足夠說明用法的示例:

username [a-za-z0-9._-]+

user %

第一行,用普通的正規表示式來定義乙個 grok 表示式;第二行,通過列印賦值格式,用前面定義好的 grok 表示式來定義另乙個 grok 表示式。

grok 表示式的列印複製格式的完整語法是下面這樣的:

%小貼士:data_type 目前只支援兩個值:int 和 float。

所以我們可以改進我們的配置成下面這樣:

filter % %"

重新執行程序然後可以得到如下結果:

"message" => "begin 123.456 end",

"@version" => "1",

"@timestamp" => "2014-08-09t12:23:36.634z",

"host" => "raochenlindemacbook-air.local",

"request_time" => 123.456

這次 request_time 變成數值型別了。

最佳實踐

實際運用中,我們需要處理各種各樣的日誌檔案,如果你都是在配置檔案裡各自寫一行自己的表示式,就完全不可管理了。所以,我們建議是把所有的 grok 表示式統一寫入到乙個地方。然後用 filter/grok 的 patterns_dir 選項來指明。

如果你把 "message" 裡所有的資訊都 grok 到不同的字段了,資料實質上就相當於是重複儲存了兩份。所以你可以用 remove_field 引數來刪除掉 message 字段,或者用 overwrite 引數來重寫預設的 message 字段,只保留最重要的部分。

重寫引數的示例如下:

filter %"

overwrite => ["message"]

小貼士多行匹配

在和 codec/multiline 搭配使用的時候,需要注意乙個問題,grok 正則和普通正則一樣,預設是不支援匹配回車換行的。就像你需要 =~ //m 一樣也需要單獨指定,具體寫法是在表示式開始位置加 (?m) 標記。如下所示:

match => %",

"message", "(?m)%"

logstash 會按照這個定義次序依次嘗試匹配,到匹配成功為止。雖說效果跟用 | 分割寫個大大的正則是一樣的,但是可閱讀性好了很多。

最後也是最關鍵的,我強烈建議每個人都要使用 grok debugger 來除錯自己的 grok 表示式。

4g記憶體 mysql mysql 4G記憶體配置表

client password your password socket tmp mysql.sock 通訊協議等等的儲存,mysqld 必須同時有此行 mysql.sock若丟失,臨時連線資料庫方法 usr local mysql bin mysql uroot p1 protocol tcp h...

oracle11g 網路配置

1 檢視監聽 c lsnrctl status lsnrctl for 32 bit windows version 11.2.0.1.0 production on 29 3月 2015 21 13 14 正在連線到 description address protocol ipc key ext...

win10 配置g 環境

一 配置g 編譯器的環境 1.將g 編譯器的位置新增到環境變數path中,安裝了c ide的可以在ide的安裝目錄下尋找 例如 c mysoftware dev dev cpp mingw64 bin 2.新建系統變數include 大小寫都行 將include的位置新增進去 例如 c mysoft...