Logstash通過管道完成資料的採集與處理,管道配置中包含input、output和filter(可選)外掛程式,input和output用來配置輸入和輸出資料來源、filter用來對資料進行過濾或預先處理。本文為您介紹阿里雲Logstash管道設定檔的詳細說明。
本文內容參考了Logstash官方文檔,最新內容請參見Structure of a Config File。
您可以通過設定檔管理方式修改Logstash的設定檔,完成資料的採集與處理。詳細資料,請參見通過設定檔管理管道。
設定檔結構
Logstash的管道設定檔對每種類型的外掛程式都提供了一個單獨的配置部分,用於處理管道事件。
input {
...
}
filter {
...
}
output {
...
}
每個配置部分可以包含一個或多個外掛程式。例如,指定多個filter外掛程式,Logstash會按照它們在設定檔中出現的順序進行處理。
重要
- 如果管道配置中有類似last_run_metadata_path的參數,您需要將其設定為Logstash服務的檔案路徑。目前阿里雲Logstash後端開放了
/ssd/1/<Logstash執行個體ID>/logstash/data/
路徑供您測試使用,且該目錄下的資料不會被刪除,因此在使用時,請確保磁碟有充足的使用空間。指定參數路徑後,Logstash會在對應路徑下自動組建檔案,但不支援查看檔案內容。 - 為了提升安全性,如果在配置管道時使用了JDBC驅動,需要在jdbc_connection_string參數後面添加
allowLoadLocalInfile=false&autoDeserialize=false
,否則當您在添加Logstash設定檔的時候,調度系統會拋出校正失敗的提示,例如jdbc_connection_string => "jdbc:mysql://xxx.drds.aliyuncs.com:3306/<資料庫名稱>?allowLoadLocalInfile=false&autoDeserialize=false"
。
外掛程式配置
外掛程式的配置包括外掛程式名稱,以及名稱中包含的一組外掛程式配置屬性。例如,以下input部分包含了兩個beats外掛程式,每個beats外掛程式中都配置了port和host屬性。
input {
beats {
port => 8000
host => "118.11.xx.xx"
}
beats {
port => 8001
host => "192.168.xx.xx"
}
}
外掛程式支援的屬性因外掛程式類型而異,各外掛程式的詳細資料請參見輸入外掛程式、輸出外掛程式、過濾器外掛程式和轉碼器外掛程式。
實值型別
配置外掛程式時,您可以設定外掛程式的實值型別,例如布爾值、列表、雜湊等。外掛程式支援的實值型別如下。
數組
目前不推薦使用此類型,而建議使用標準類型(例如String),使用外掛程式定義
:list => true
屬性,以便更好地進行類型檢查。數群組類型目前被用於處理不需要類型檢查的雜湊表或混合類型列表,樣本如下。 users => [ {id => 1, name => bob}, {id => 2, name => jane} ]
列表
列表本身不具備類型特徵,但其所包含的屬性具有類型特徵,這樣就可以鍵入檢查多個值。您可以通過列表的形式,在聲明參數時指定啟用檢查
:list => true
,樣本如下。 path => [ "/var/log/messages", "/var/log/*.log" ]
uris => [ "http://elastic.co", "http://example.net" ]
以上樣本,將path配置為一個列表,該列表中包含2個字串。uris也為一個列表,如果所包含的URL無效,會導致事件處理失敗。
布爾類型
布爾類型的值必須為true或者false,且不需要引號標註,樣本如下。
ssl_enable => true
位元組類型
位元組類型的欄位,代表有效位元組單位的字串欄位。這是在外掛程式選項中,聲明特定大小的便捷方法。位元組類型支援十進位(k M G T P E Z Y)和二進位(Ki Mi Gi Ti Pi Ei Zi Yi)。二進位單位為base-1024,十進位單位為base-1000。該欄位不區分大小寫,並且支援值和單位之間的空格。如果未指定單位,則整數字串表示位元組數。樣本如下。
my_bytes => "1113" # 1113 bytes
my_bytes => "10MiB" # 10485760 bytes
my_bytes => "100kib" # 102400 bytes
my_bytes => "180 mb" # 180000000 bytes
轉碼器
轉碼器是對資料進行編碼或者解碼後的目標資料類型,在輸入和輸出外掛程式中都可以使用。輸入轉碼器提供了在資料輸入之前對其進行解碼的功能。輸出轉碼器,提供了在資料輸出之前對其進行編碼的功能。使用輸入或輸出轉碼器後,您不需要在Logstash管道中單獨使用過濾器。
您可以參考官方提供的編譯解譯器外掛程式文檔,尋找可用的轉碼器。樣本如下。
codec => "json"
雜湊
雜湊格式是指定索引值對的集合,例如"field1" => "value1"
。
重要 多個索引值對使用空格進行分隔,而不是逗號。
樣本如下。
match => {
"field1" => "value1"
"field2" => "value2"
...
}
# 單獨一行,多個索引值對使用空格進行分隔,而不是逗號。
match => { "field1" => "value1" "field2" => "value2" }
數值
必須是有效數值(浮點數或整數)。樣本如下。
port => 33
密碼
密碼是一個沒有記錄或列印的單值字串。樣本如下。
my_password => "password"
URI
URI可以是任何內容,例如完整的URL或者簡單的標識符(如foobar)。如果URI中包含類似
http://user:paas@example.net
的密碼,那麼密碼部分不會被記錄或列印。樣本如下。 my_uri => "http://foo:bar@example.net"
路徑
路徑是代表有效作業系統路徑的字串。樣本如下。
my_path => "/tmp/logstash"
字串
字串必須是單個字元序列,且必須用雙引號或單引號括起來。
逸出序列
預設情況下,Logstash不啟用逸出序列。如果您希望在帶引號的字串使用逸出序列,需要在logstash.yml中設定
config.support_escapes: true
。設定後,字串(雙精確度和單精確度)將會按照下表進行轉義。逸出字元 | 意義 | ASCII碼值(十進位) |
\r | 斷行符號 | 013 |
\n | 換行 | 010 |
\t | 跳到下一個Tab位置 | 009 |
\\ | 反斜線 | 092 |
\" | 雙引號 | 034 |
\' | 單引號 | 039 |
樣本如下。
name => 'It\'s a beautiful day'
注釋
注釋以
#
開頭,不需要在行首。樣本如下。# 這是一條注釋。
input { # 您也可以在行內添加註釋。
# ...
}