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插件中都配置了porthost屬性。
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 { # 您也可以在行內添加注釋。
  # ...
}