一、YAML格式簡介
Beats的配置文件基於YAML,這種文件格式比XML和JSON等常用的數據格式更容易讀寫。
在Beats中所有的YAML文件都以字典開始,一個無序的鍵值對。除了字典,YAML還支持列表、數值、字符串和其他的數據類型。相同列表或字典的所有成員必須有相同的縮進級別。
1、字典由具有相同縮進級別的key:value組成,冒號后面必須有一個空格
name: John Doe age: 34 country: Canada
2、列表由“-”表示,所有的列表成員在相同縮進級別由“-”開始
- Red - Green - Blue
3、beats中使用列表和字典來構建結構化配置
filebeat: inputs: - type: log paths: - /var/log/*.log multiline: pattern: '^[' match: after
4、列表和字典也可以用縮寫的方式表示,縮寫方式有點類似於JSON格式,字典使用{},列表使用[]
person: {name: "John Doe", age: 34, country: "Canada"} colors: ["Red", "Green", "Blue"]
二、Namespacing
1、所有的設置都使用字典和列表。讀取配置文件時,通過使用設置名稱及其父結構的名稱的完整路徑,這些設置將被壓縮到名稱設置中。
如:
output: elasticsearch: index: 'beat-%{[beat.version]}-%{+yyyy.MM.dd}'
將被壓縮成: output.elasticsearch.index: 'beat-%{[beat.version]}-%{+yyyy.MM.dd}' 全名涉及到所有的父級結構
2、列表創建的時候以0開始
filebeat:
inputs:
- type: log
將被壓縮為:filebeat.inputs.0.type: log
不僅可以以縮進的方式,也可以以折疊的方式
三、配置文件的數據類型
配置文件中的設置的值將被轉換為beats所需的值,如果設置的值的類型不是配置文件所要求的值類型,那么啟動將會報錯。
1、Boolean
enabled: true disabled: false
2、Number
integer: 123 negative: -1 float: 5.4
3、String
在YAML中,字符串支持多種格式,雙引號(“ ”)、單引號(’ ‘)、無引號()
4、Duration
時間必須帶有單位,如ns, us, ms, s, m, h
duration1: 2.5s duration2: 6h duration_disabled: -1s
5、正則表達式
因為在YAML和正則表達式中使用"\"進行字符串的轉義,因此建議在使用正則表達式的時候使用單引號字符串,當使用單引號字符串的時候\不會被轉義
6、格式串(打印的格式)
constant-format-string: 'constant string' field-format-string: '%{[fieldname]} string' format-string-with-date: '%{[fieldname]}-%{+yyyy.MM.dd}'
四、環境變量
1、可以在配置文件中引用環境變量,設置為在運行期間需要用到的值;如
${VAR}
var是環境變量的名稱
2、當啟動時,變量的值將會被環境變量的值替換。除非指定默認值或自定義錯誤文本,否則會被當做空字符串處理
指定默認值:
${VAR:default_value}
指定自定義錯誤文本
${VAR:?error_text}
例子:

4、在環境變量中指定復雜的變量
可以使用類似JSON的語法使用復雜的變量,如字典、列表;
如:
ES_HOSTS="10.45.3.2:9220,10.45.3.1:9230"
output.elasticsearch: hosts: '${ES_HOSTS}'
五、引用變量
1、Beats中設置可以引用其他設置,將多個可選的自定義值拼接到新值中,如Filebeat默認的注冊表文件為:
filebeat.registry: ${path.data}/registry
path.data是隱式設置的,可以在命令行重寫,也可以在配置文件重寫
2、如es.host
es.host: '${ES_HOST:localhost}' output.elasticsearch: hosts: ['http://${es.host}:9200']
3、普通的引用,沒有默認的值,沒有拼接,通過其他字符串來引用完整的命名空間,如:
namespace1: subnamespace: host: localhost sleep: 1s namespace2: subnamespace: host: localhost sleep: 1s
可以重寫為:
namespace1: ${shared} namespace2: ${shared} shared: subnamespace: host: localhost sleep: 1s
六、命令行參數
使用-c指定配置文件,如果不指定則使用默認的配置文件;可以通過在啟動時使用-E指定配置文件

如:配置文件里的配置如下
output.elasticsearch: hosts: ["http://localhost:9200"] username: username password: password
如果在啟動的時候,加上
-E output='{elasticsearch.enabled: false, console.pretty: true}'
那么配置文件相當於:
output.elasticsearch: enabled: false hosts: ["http://localhost:9200"] username: username password: password output.console: pretty: true