騰訊雲 Elasticsearch 進階篇(二十六)Logstash講解與實戰

前言|

在講下一個關鍵插件filter插件前,簡單說一些Codec編碼插件,普及一下這個概念,方便後面學習。

一、Logstash編碼插件(Codec)

其實我們就已經用過編碼插件codec了,也就是這個rubydebug,它就是一種codec,雖然它一般只會用在stdout插件中,作為配置測試或者調試的工具。 編碼插件(Codec)可以在logstash輸入或輸出時處理不同類型的數據,因此,Logstash不只是一個input–>filter–>output的數據流,而是一個input–>decode–>filter–>encode–>output的數據流。

Codec支援的編碼格式常見的有plain、json、json_lines等。下面依次介紹。

1、codec插件之plain

plain是一個空的解析器,它可以讓用戶自己指定格式,也就是說輸入是什麼格式,輸出就是什麼格式。下面是一個包含plain編碼的事件配置文件,如圖:

事件配置文件截圖

那麼我們啟動一下服務?

啟動成功

我們驗證一下:隨便通過鍵盤輸入一些字元「hello world」,看輸出:如下

驗證輸出結果

從結果我們可以看到:經過Logstash處理的日誌加了幾個欄位,一個是時間戳 一個是主機名,這2個欄位是必加的。

所以,輸入什麼,輸出就是什麼。這就是Plain 編碼格式

2、codec插件之json、json_lines(最經常使用的編碼格式)

如果發送給logstash的數據內容為json格式,可以在input欄位加入codec=>json來進行解析,這樣就可以根據具體內容生成欄位,方便分析和儲存。如果想讓logstash輸出為json格式,可以在output欄位加入codec=>json,下面是一個包含json編碼的事件配置文件,如圖:

JSON編碼配置文件

那我們來執行一下:如下圖:發現從標準鍵盤輸入:輸出的格式為JSON格式

結論:

以上就是json格式的輸出,可以看出,json每個欄位是key:values格式,多個欄位之間通過逗號分隔。有時候,如果json文件比較長,需要換行的話,那麼就要用json_lines編碼格式了。操作方法跟上面一樣,將JSON改為JSON_lines即可

JSON換行輸出

二、總結:

本節簡單講解了一下Logstash的編碼格式插件。通過它,我們可以定義輸入輸出的格式。總的來說,Logstash是一個input–>decode–>filter–>encode–>output的數據流。下一節,我們重點來講Logstash的過濾器插件(filter),非常重要,跟著我來吧。。