概述

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: afterfilebeat.inputs:- type: log  paths: ["/var/log/*.log"]  multiline.pattern: '^['  multiline.match: afterfilebeat.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

命名空间

官网解释有点拗口,按我的理解简单解释下:读配置文件时,根据配置全路径,解析成命名空间,为折叠格式。<br/>

  • 直接看示例:
output:  elasticsearch:    index: 'beat-%{[beat.version]}-%{+yyyy.MM.dd}'

会被解析成:output.elasticsearch.index: 'beat-%{[beat.version]}-%{+yyyy.MM.dd}',这就是所谓的命名空间折叠格式啦。<br/>

  • 解析列表时,下标从0开始:
filebeat:  inputs:    - type: log

会被解析成: filebeat.inputs.0.type: log

  • 配置时可以直接使用折叠格式,和按照缩进等级的一起使用。
filebeat.inputs:- type: log  paths: ["/var/log/*.log"]  multiline.pattern: '^['  multiline.match: afteroutput.elasticsearch.hosts: ["http://localhost:9200"]

数据类型

  • Boolean<br/>

true|yes|on、false|no|off

enabled: truedisabled: false
  • Number<br/>

不加引号的数字

integer: 123negative: -1float: 5.4
  • String<br/>

支持双引号、单引号、无引号。<br/>
双引号,\会被用来转义。<br/>
单引号,\不会被用来转义。<br/>
无引号,不要使用在YAML中具有特殊含义的符号。<br/>
正则表达式,特殊字符串,在加载时被编译成正则表达式。定义正则表达式时建议使用单引号的形式,因为这时\不会用来转义。

  • Duration<br/>

数值为整数或小数。<br/>
单位为ns(纳秒),us(微秒),ms(毫秒), s(秒), m(分), h(小时)<br/>
有时使用0或负数表示禁用。

duration1: 2.5sduration2: 6hduration_disabled: -1s

环境变量

  • ${ 环境变量 }:引用环境变量,如果没有就会替换成空字符串。
  • ${ 变量:默认值 }:引用环境变量,如果没有就使用默认值。
  • ${ 变量:?错误提示 }:引用环境变量,如果没有就返回自定义的错误信息。
  • 如果你需要在配置文件中使用${,可以用$${来表示。
  • 更新环境变量后需要重启Beats,因为解析YAML之前就会将这些变量替换为实际值,而不是实时解析变量。
  • 命令行启动时可以使用—E指定或覆盖环境变量。
  • 引用环境变量示例:
环境变量示例结果
export NAME=elasticname: ${NAME}name: elastic
没有设置name: ${NAME}name:
export NAME=elasticname: ${NAME:beats}name: elastic
没有设置name: ${NAME:beats}name: beats
export NAME=elasticname: ${NAME:?你需要设置环境变量}没有。返回自定义的错误信息。
没有设置name: ${NAME:?你需要设置环境变量}name: elastic
  • 引用复杂环境变量:<br/>

定义复杂变量

export ES_HOSTS="10.45.3.2:9220,10.45.3.1:9230"

引用<br/>

output.elasticsearch:  hosts: '${ES_HOSTS}'

引用变量

  • 引用变量可以将多个变量组合成一个,又或者重用相同的变量。
  • 与引用环境变量语法相同。
  • 只能引用折叠格式的设置名称。
  • 示例:<br/>
filebeat.registry: ${path.data}/registry
es.host: '${ES_HOST:localhost}'output.elasticsearch:  hosts: ['http://${es.host}:9200']

重复配置的情况<br/>

namespace1:  subnamespace:    host: localhost    sleep: 1snamespace2:  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开头或使用单引号。