2.Beats 配置文件格式
2019-04-20 本文已影响0人
歌哥居士
概述
Beats配置文件采用YAML格式。
- 同级(同一个父级)的配置缩进级别相同。
- 字典,格式为
key: value
,:
后面加个空格。
person:
name: Baozi
age: 22
- 列表,以
-
开头,后面加个空格。
colors:
- Red
- Green
- Blue
- 缩写的列表和字典类似JSON,{}表示字典,[]表示列表。
person: {name: "Baozi", age: 22}
colors: ["Red", "Green", "Blue"]
- Beats配置由字典和列表组成,一个Filebeat配置示例,为了帮助理解,我把几种形式都写了出来:
filebeat:
inputs:
- type: log
paths:
- /var/log/*.log
multiline:
pattern: '^['
match: after
filebeat.inputs:
- type: log
paths: ["/var/log/*.log"]
multiline.pattern: '^['
multiline.match: after
filebeat.inputs:
- type: log
paths:
- /var/log/system.log
- /var/log/wifi.log
- type: log
paths:
- "/var/log/apache2/*"
fields:
apache: true
fields_under_root: true
命名空间
官网解释有点拗口,按我的理解简单解释下:读配置文件时,根据配置全路径,解析成命名空间
,为折叠格式
。
- 直接看示例:
output:
elasticsearch:
index: 'beat-%{[beat.version]}-%{+yyyy.MM.dd}'
会被解析成:output.elasticsearch.index: 'beat-%{[beat.version]}-%{+yyyy.MM.dd}'
,这就是所谓的命名空间
、折叠格式
啦。
- 解析列表时,下标从0开始:
filebeat:
inputs:
- type: log
会被解析成: filebeat.inputs.0.type: log
。
- 配置时可以直接使用
折叠格式
,和按照缩进等级的一起使用。
filebeat.inputs:
- type: log
paths: ["/var/log/*.log"]
multiline.pattern: '^['
multiline.match: after
output.elasticsearch.hosts: ["http://localhost:9200"]
数据类型
- Boolean
true|yes|on、false|no|off
enabled: true
disabled: false
- Number
不加引号的数字
integer: 123
negative: -1
float: 5.4
-
String
支持双引号、单引号、无引号。
双引号,\
会被用来转义。
单引号,\
不会被用来转义。
无引号,不要使用在YAML中具有特殊含义的符号。
正则表达式,特殊字符串,在加载时被编译成正则表达式。定义正则表达式时建议使用单引号
的形式,因为这时\
不会用来转义。 -
Duration
数值为整数或小数。
单位为ns(纳秒),us(微秒),ms(毫秒), s(秒), m(分), h(小时)
有时使用0或负数表示禁用。
duration1: 2.5s
duration2: 6h
duration_disabled: -1s
环境变量
- ${ 环境变量 }:引用环境变量,如果没有就会替换成空字符串。
- ${ 变量:默认值 }:引用环境变量,如果没有就使用默认值。
- ${ 变量:?错误提示 }:引用环境变量,如果没有就返回自定义的错误信息。
- 如果你需要在配置文件中使用
${
,可以用$${
来表示。 - 更新环境变量后需要重启Beats,因为解析YAML之前就会将这些变量替换为实际值,而不是实时解析变量。
- 命令行启动时可以使用
—E
指定或覆盖环境变量。 - 引用环境变量示例:
环境变量 | 示例 | 结果 |
---|---|---|
export NAME=elastic | name: ${NAME} | name: elastic |
没有设置 | name: ${NAME} | name: |
export NAME=elastic | name: ${NAME:beats} | name: elastic |
没有设置 | name: ${NAME:beats} | name: beats |
export NAME=elastic | name: ${NAME:?你需要设置环境变量} | 没有。返回自定义的错误信息。 |
没有设置 | name: ${NAME:?你需要设置环境变量} | name: elastic |
- 引用复杂环境变量:
定义复杂变量
export ES_HOSTS="10.45.3.2:9220,10.45.3.1:9230"
引用
output.elasticsearch:
hosts: '${ES_HOSTS}'
引用变量
- 引用变量可以将多个变量组合成一个,又或者重用相同的变量。
- 与引用环境变量语法相同。
- 只能引用
折叠格式
的设置名称。 - 示例:
filebeat.registry: ${path.data}/registry
es.host: '${ES_HOST:localhost}'
output.elasticsearch:
hosts: ['http://${es.host}:9200']
重复配置的情况
namespace1:
subnamespace:
host: localhost
sleep: 1s
namespace2:
subnamespace:
host: localhost
sleep: 1s
可以被重写为:
namespace1: ${shared}
namespace2: ${shared}
shared:
subnamespace:
host: localhost
sleep: 1s
一些提示
- 使用空格而不是制表符缩进。一般每个缩进等级使用2个空格。
- Beats提供了示例配置文件,可以作为很好的参考。
- 可以使用test config检查配置文件格式是否正确:
所用的beat的名称 test config -c beat名称.yml
- 正则表达式最好使用单引号包围起来。
- 路径最好也用单引号,尤其是Windows的路径。
- 避免在数字前加0(
09
)。加0开头,如果是有效8进制会转为整数,否则转为浮点数,避免这种问题就是不加0开头或使用单引号。