Logstash通過管道完成數(shù)據(jù)的采集與處理,管道配置中包含input、output和filter(可選)插件,input和output用來配置輸入和輸出數(shù)據(jù)源、filter用來對數(shù)據(jù)進行過濾或預(yù)處理。本文為您介紹阿里云Logstash管道配置文件的詳細(xì)說明。

本文內(nèi)容參考了Logstash官方文檔,最新內(nèi)容請參見Structure of a Config File

您可以通過配置文件管理方式修改Logstash的配置文件,完成數(shù)據(jù)的采集與處理。詳細(xì)信息,請參見通過配置文件管理管道

配置文件結(jié)構(gòu)

Logstash的管道配置文件對每種類型的插件都提供了一個單獨的配置部分,用于處理管道事件。
input {
  ...
}

filter {
  ...
}

output {
  ...
}

每個配置部分可以包含一個或多個插件。例如,指定多個filter插件,Logstash會按照它們在配置文件中出現(xiàn)的順序進行處理。

重要
  • 如果管道配置中有類似last_run_metadata_path的參數(shù),您需要將其設(shè)置為Logstash服務(wù)的文件路徑。目前阿里云Logstash后端開放了/ssd/1/<Logstash實例ID>/logstash/data/路徑供您測試使用,且該目錄下的數(shù)據(jù)不會被刪除,因此在使用時,請確保磁盤有充足的使用空間。指定參數(shù)路徑后,Logstash會在對應(yīng)路徑下自動生成文件,但不支持查看文件內(nèi)容。
  • 為了提升安全性,如果在配置管道時使用了JDBC驅(qū)動,需要在jdbc_connection_string參數(shù)后面添加allowLoadLocalInfile=false&autoDeserialize=false,否則當(dāng)您在添加Logstash配置文件的時候,調(diào)度系統(tǒng)會拋出校驗失敗的提示,例如jdbc_connection_string => "jdbc:mysql://xxx.drds.aliyuncs.com:3306/<數(shù)據(jù)庫名稱>?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"
  }
}

插件支持的屬性因插件類型而異,各插件的詳細(xì)信息請參見輸入插件輸出插件過濾器插件編解碼器插件

值類型

配置插件時,您可以設(shè)置插件的值類型,例如布爾值、列表、哈希等。插件支持的值類型如下。

數(shù)組

目前不推薦使用此類型,而建議使用標(biāo)準(zhǔn)類型(例如String),使用插件定義:list => true屬性,以便更好地進行類型檢查。數(shù)組類型目前被用于處理不需要類型檢查的哈希表或混合類型列表,示例如下。
users => [ {id => 1, name => bob}, {id => 2, name => jane} ]

列表

列表本身不具備類型特征,但其所包含的屬性具有類型特征,這樣就可以鍵入檢查多個值。您可以通過列表的形式,在聲明參數(shù)時指定啟用檢查:list => true,示例如下。
path => [ "/var/log/messages", "/var/log/*.log" ]
uris => [ "http://elastic.co", "http://example.net" ]

以上示例,將path配置為一個列表,該列表中包含2個字符串。uris也為一個列表,如果所包含的URL無效,會導(dǎo)致事件處理失敗。

布爾類型

布爾類型的值必須為true或者false,且不需要引號標(biāo)注,示例如下。
ssl_enable => true

字節(jié)類型

字節(jié)類型的字段,代表有效字節(jié)單位的字符串字段。這是在插件選項中,聲明特定大小的便捷方法。字節(jié)類型支持十進制(k M G T P E Z Y)和二進制(Ki Mi Gi Ti Pi Ei Zi Yi)。二進制單位為base-1024,十進制單位為base-1000。該字段不區(qū)分大小寫,并且支持值和單位之間的空格。如果未指定單位,則整數(shù)字符串表示字節(jié)數(shù)。示例如下。
 my_bytes => "1113"   # 1113 bytes
 my_bytes => "10MiB"  # 10485760 bytes
 my_bytes => "100kib" # 102400 bytes
 my_bytes => "180 mb" # 180000000 bytes

編解碼器

編解碼器是對數(shù)據(jù)進行編碼或者解碼后的目標(biāo)數(shù)據(jù)類型,在輸入和輸出插件中都可以使用。輸入編解碼器提供了在數(shù)據(jù)輸入之前對其進行解碼的功能。輸出編解碼器,提供了在數(shù)據(jù)輸出之前對其進行編碼的功能。使用輸入或輸出編解碼器后,您不需要在Logstash管道中單獨使用過濾器。

您可以參考官方提供的編譯解釋器插件文檔,查找可用的編解碼器。示例如下。
codec => "json"

哈希

哈希格式是指定鍵值對的集合,例如"field1" => "value1"

重要 多個鍵值對使用空格進行分隔,而不是逗號。
示例如下。
match => {
  "field1" => "value1"
  "field2" => "value2"
  ...
}
# 單獨一行,多個鍵值對使用空格進行分隔,而不是逗號。
match => { "field1" => "value1" "field2" => "value2" }

數(shù)值

必須是有效的數(shù)值(浮點數(shù)或整數(shù))。示例如下。
port => 33

密碼

密碼是一個沒有記錄或打印的單值字符串。示例如下。
my_password => "password"

URI

URI可以是任何內(nèi)容,例如完整的URL或者簡單的標(biāo)識符(如foobar)。如果URI中包含類似http://user:paas@example.net的密碼,那么密碼部分不會被記錄或打印。示例如下。
 my_uri => "http://foo:bar@example.net"

路徑

路徑是代表有效操作系統(tǒng)路徑的字符串。示例如下。
my_path => "/tmp/logstash"

字符串

字符串必須是單個字符序列,且必須用雙引號或單引號括起來。

轉(zhuǎn)義序列

默認(rèn)情況下,Logstash不啟用轉(zhuǎn)義序列。如果您希望在帶引號的字符串使用轉(zhuǎn)義序列,需要在logstash.yml中設(shè)置config.support_escapes: true。設(shè)置后,字符串(雙精度和單精度)將會按照下表進行轉(zhuǎn)義。
轉(zhuǎn)義字符意義ASCII碼值(十進制)
\r回車013
\n換行010
\t跳到下一個Tab位置009
\\反斜杠092
\"雙引號034
\'單引號039
示例如下。
name => 'It\'s a beautiful day'

注釋

注釋以#開頭,不需要在行首。示例如下。
# 這是一條注釋。

input { # 您也可以在行內(nèi)添加注釋。
  # ...
}