filebeat.yml 配置文件
filebeat.yml
是 Filebeat 的主配置文件,用于定义如何从日志源收集数据、处理数据并将其发送到指定的目标系统(如 Elasticsearch、Logstash 等)。以下是对 filebeat.yml
的详细解读,包括配置项的解释以及示例。
Filebeat 配置结构
典型的 filebeat.yml
配置结构主要包含以下几个部分:
- Inputs(输入):定义日志来源。
- Outputs(输出):定义日志的输出目标。
- Processors(处理器):日志的预处理配置。
- Logging(日志记录):Filebeat 自身的日志记录设置。
- Setup(初始化):设置 Filebeat 的索引模板、仪表板等。
1. Inputs(输入)
filebeat.inputs
配置项用于定义 Filebeat 从哪些源收集日志数据。
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/mysql/mysql.log # 指定日志文件路径
- /var/log/mysql/error.log
encoding: utf-8 # 设置日志文件的编码类型
exclude_lines: ['^#'] # 排除匹配此正则的行(如以 # 开头的注释)
include_lines: ['^ERR', '^WARN'] # 仅包含匹配此正则的行
exclude_files: ['\.gz$'] # 排除匹配此正则的文件(如 .gz 压缩文件)
scan_frequency: 10s # 每隔 10 秒检查新日志
multiline.pattern: '^ERROR' # 处理多行日志,匹配行的开头为 ERROR
multiline.negate: true # 启用非匹配模式
multiline.match: after # 将多行日志合并为一条日志
关键配置说明:
- paths:日志文件的路径,可以使用通配符,如
/var/log/*.log
。 - exclude_lines/include_lines:通过正则表达式排除或包含特定日志行。
- multiline:用于处理多行日志,例如 Java 异常堆栈,或复杂的错误日志。
- scan_frequency:控制 Filebeat 扫描新日志的频率。
2. Outputs(输出)
Filebeat 支持多种输出目标,包括 Elasticsearch、Logstash、Kafka 等。你需要根据具体场景配置。
输出到 Elasticsearch:
output.elasticsearch:
hosts: ["http://localhost:9200"] # Elasticsearch 地址
username: "elastic" # Elasticsearch 用户名
password: "changeme" # Elasticsearch 密码
index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}" # 索引的命名格式
pipeline: "my-pipeline" # 指定 Ingest pipeline 来处理日志
输出到 Logstash:
output.logstash:
hosts: ["localhost:5044"] # Logstash 地址
ssl.enabled: true # 启用 SSL 加密传输
ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-ca.pem"] # SSL 证书路径
输出到 Kafka:
output.kafka:
hosts: ["kafka:9092"]
topic: "filebeat" # Kafka 主题
partition.round_robin: # 使用轮询的方式发送到分区
reachable_only: true
required_acks: 1 # Kafka 应答级别
关键配置说明:
- output.elasticsearch:直接将日志发送到 Elasticsearch,常用于无需额外处理的场景。
- output.logstash:将日志发送到 Logstash 进行进一步处理,然后由 Logstash 发往 Elasticsearch 或其他系统。
- output.kafka:日志发送到 Kafka 队列,适用于分布式系统。
3. Processors(处理器)
processors
用于对日志进行预处理,处理器可以按顺序应用于每条日志事件。
processors:
- add_fields:
target: '' # 添加新字段到日志中
fields:
log_type: mysql # 设置 log_type 字段为 "mysql"
- drop_fields:
fields: ["agent", "host"] # 删除不需要的字段
- rename:
fields:
- from: "message"
to: "mysql_log" # 重命名字段
- dissect:
tokenizer: "%{timestamp} %{loglevel} %{message}" # 使用 dissect 解析字段
field: "message"
target_prefix: "parsed" # 将解析的字段放入 "parsed" 下
关键配置说明:
- add_fields:为每条日志添加自定义字段,便于后续查询或过滤。
- drop_fields:删除不需要的字段,减少数据量。
- dissect:通过简单的模式匹配来提取字段,适合结构化日志。
4. Logging(日志记录)
控制 Filebeat 自身的日志记录,帮助调试和排错。
logging.level: info # 日志级别,可以是 debug, info, warning, error
logging.to_files: true # 是否写入文件
logging.files:
path: /var/log/filebeat # Filebeat 日志文件的存放路径
name: filebeat.log # 日志文件名
keepfiles: 7 # 保留的日志文件数量
permissions: 0644 # 文件权限
关键配置说明:
- logging.level:日志级别,调试时建议使用
debug
级别,以便获取更多详细信息。 - logging.files:定义日志的保存路径和文件名,默认日志存储在标准输出。
5. Setup(初始化)
setup
部分用于初始化 Filebeat 在 Elasticsearch 中的索引模板、仪表板等。
setup.kibana:
host: "localhost:5601" # Kibana 地址
setup.template.settings:
index.number_of_shards: 1 # 设置索引的分片数量
index.codec: best_compression # 使用最佳压缩方式
setup.dashboards.enabled: true # 是否自动加载 Filebeat 仪表板
关键配置说明:
- setup.kibana:用于将 Filebeat 与 Kibana 集成。
- setup.template:用于设置 Elasticsearch 索引模板的参数。
- setup.dashboards:是否自动导入 Filebeat 提供的 Kibana 仪表板。
6. 示例配置
以下是一个完整的 filebeat.yml
示例,它从 MySQL 日志中收集日志,处理后发送到 Elasticsearch:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/mysql/mysql.log
- /var/log/mysql/error.log
exclude_lines: ['^#'] # 排除注释行
multiline.pattern: '^ERROR'
multiline.negate: true
multiline.match: after
processors:
- add_fields:
target: ''
fields:
log_type: mysql
output.elasticsearch:
hosts: ["http://localhost:9200"]
username: "elastic"
password: "changeme"
index: "filebeat-mysql-%{+yyyy.MM.dd}"
setup.kibana:
host: "localhost:5601"
setup.template.settings:
index.number_of_shards: 1
总结
filebeat.yml
配置文件具有很强的灵活性,能够根据不同的日志源和处理需求进行定制。通过定义不同的输入、处理器和输出,可以满足多种日志采集场景。