官方配置说明:https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html
官方参考yml文件:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-reference-yml.html,也可以看安装目录中的filebeat.reference.yml文件,里面有很多可使用的参数供查询
参数 | 参数示例 | 参数说明 |
---|---|---|
type | log | 从日志文件中读取行作为输入 |
Stdin | 从标准输入中读取事件作为输入 | |
Kafka | 以kafka集群中的topics作为输入 | |
Redis | 以Redis slowlogs读取entries作为输入 | |
paths | - /var/log/*.log - c:\elasticsearch\logs\* | 1.配置采集路径,全局路径; 2.可使用通配符,目录不递归; 3.但要确保一个文件在所有输入中没有定义多次; 4.配置多个文件,每行以dash (-)开头。 |
encoding | plain/utf-8 ...... | 用于读取包含国际字符的数据的文件编码 |
exclude_lines | ['^DBG'] | 在输入中排除符合正则表达式列表的那些行, 左侧取值表示排除以DBG字符开头的行。 |
include_lines | ['^ERR', '^WARN'] | 1.一组正则表达式,用于匹配你想要包含的行。Filebeat只会导出那些匹配这组正则表达式的行。默认情况下,所有的行都会被导出。空行被忽略。 2.如果指定了multipline设置,每个多行消息先被合并成单行以后再执行include_lines过滤。 3.左侧取值表示Filebeat导出以ERR或者WARN开头的行 |
harvester_buffer_size | 20048 | 当抓取一个文件时每个harvester使用的buffer的字节数。默认是16384 |
exclude_files | [".gz$"] | 一组正则表达式,用于匹配你想要忽略的文件。默认没有文件被排除。 左侧取值例子表示忽略.gz的文件 |
fields | level: debug | 1.向输出的每一条日志添加额外的信息。例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值,数组,字典或这些的任何嵌套组合 2.左侧取值表示会在es中多添加一个字段,格式为 "filelds":{"level":"debug"},方便后续对日志进行分组统计。 |
fields_under_root | true | 要将自定义字段存储为顶级字段,请将该fields_under_root选项设置为true。如果在常规配置中声明了重复字段,则其值将被此处声明的值覆盖 |
tags | ["service-X", "web-tier"] | 1.标签列表包含在每个发布事务的tags字段。标签可用很容易的按照不同的逻辑分组服务器 2.左侧取值示例表示一个web集群服务器可以对beat添加上webservers标签然后在kibana的visualisation界面以该标签过滤和查询整组服务器 |
json | json.keys_under_root: true json.add_error_key: true json.message_key: log | 这些选项使Filebeat能够解码构造为JSON消息的日志。Filebeat逐行处理日志,因此只有当每行有一个JSON对象时,JSON解码才起作用 |
tail_files | true | 如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。 【如果此选项设置为true,则Filebeat将开始在每个文件的末尾而不是开头读取新文件。 当此选项与日志轮换结合使用时,可能会跳过新文件中的第一个日志条目。 默认设置为false。 此选项适用于Filebeat尚未处理的文件。 如果您之前运行过Filebeat并且文件的状态已经保留,则tail_files将不会应用。要将tail_files应用于所有文件,必须停止Filebeat并删除注册表文件。 请注意,这样做会删除以前的所有状态。】 |
支持输出 | 参数 | 取值示例 | 取值说明 |
---|---|---|---|
logstash | hosts | ["127.0.0.1:5044"] | 指定Logstash服务器 |
@metadata | "@metadata": { "beat": "filebeat", "version": "7.5.2" } | Filebeat使用@metadata字段将元数据发送到Logstash; 左侧示例在logstash中获取使用如下: output { 元数据默认在控制台上不显示,设置metadata => true显示,示例: | |
loadbalance | true | 如果设置为true并且配置了多个Logstash主机,则输出插件将在所有Logstash主机上平衡已发布的事件。如果设置为false,则输出插件仅将所有事件发送到一个主机(随机确定),如果选定的主机变得无响应,则输出插件将切换到另一个主机。默认值为false | |
index | filebeat | 指定索引名称"filebeat" | |
简单示例: output.logstash: | |||
kafka | hosts | ["kafka1:9092", "kafka2:9092", "kafka3:9092"] | kafka集群服务器 |
topic | '%{[fields.log_topic]}' | 指定主题 | |
required_acks | 1 | broker要求的ACK可靠性级别。0=无响应,1=等待本地提交,-1=等待所有副本提交。默认值为1 | |
compression | gzip | 压缩格式 | |
max_message_bytes | 1000000 | JSON编码消息的最大允许大小。较大的消息将被丢弃。要避免此问题,请确保Filebeat不会生成大于max_message_bytes的事件 | |
简单示例: output.kafka: # message topic selection + partitioning required_acks: 1 | |||
redis | 官方说明:https://www.elastic.co/guide/en/beats/filebeat/current/redis-output.html | ||
简单示例 output.redis: |
配置中遇到的坑:
1、配置文件里面有特殊字符,比如括号(),要这样写:
include_lines: ['Java HotSpot\(TM\)'] ,下面这种写法是错误的 include_lines: ["Java HotSpot\(TM\)"],会报错
原因是:由于正则表达式和YAML使用\来转义字符串中的字符,强烈建议在定义正则表达式时使用单引号字符串。 当使用单引号字符串时,YAML解析器不会将\字符解释为换码符号