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 { # 您也可以在行內添加注釋。
# ...
}