Ubuntu下Filebeat配置文件详解
Filebeat是Elastic开发的轻量级日志采集工具,其配置文件默认位于/etc/filebeat/filebeat.yml(YAML格式)。以下是核心配置项的详细说明及实战示例:
filebeat.inputs是Filebeat的核心模块,用于指定要采集的日志源。每个输入源为一个字典,支持log(文本日志)、docker(容器日志)、stdin(标准输入)等类型。
type:必填,指定输入类型(如log表示文本日志)。enabled:是否启用该输入(默认true)。paths:必填,指定日志文件路径(支持通配符,如/var/log/*.log或/var/log/apache2/*.log)。exclude_files:排除特定文件(如['\.gz$']排除所有.gz压缩文件)。tail_files:若为true,从文件末尾开始读取(适用于日志轮换场景,但需注意可能跳过新文件首条日志)。ignore_older:忽略超过指定时间的文件(如72h忽略72小时前的文件,避免采集历史数据)。multiline:处理多行日志(如Java异常堆栈),需配置pattern(匹配行首的正则表达式,如'^\[')、negate(是否取反,false表示匹配pattern的行作为新事件)、match(关联方式,after表示匹配行追加到前一个事件)。filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/syslog
- /var/log/auth.log
exclude_files: ['\.gz$']
tail_files: true
ignore_older: 24h
multiline:
pattern: '^\['
negate: false
match: after
output定义Filebeat将采集的日志发送到哪里,支持elasticsearch、logstash、kafka、redis等目标。
output.elasticsearch:
hosts: ["localhost:9200"] # Elasticsearch地址(支持多个节点,如["es1:9200", "es2:9200"])
index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}" # 索引名称模板(含Filebeat版本和日期)
username: "elastic" # 认证用户名(若开启安全功能)
password: "your_password" # 认证密码
pipeline: "filebeat_pipeline" # 指定Ingest节点管道(用于数据预处理)
output.logstash:
hosts: ["localhost:5044"] # Logstash地址(支持多个节点)
index: "filebeat-%{+yyyy.MM.dd}" # 索引名称模板
ssl.enabled: true # 是否启用SSL/TLS加密
ssl.certificate_authorities: ["/etc/pki/tls/certs/ca.crt"] # CA证书路径
output.kafka:
hosts: ["kafka1:9092", "kafka2:9092"] # Kafka集群地址
topic: "%{[fields.log_topic]}" # 主题名称(可从事件字段动态获取)
required_acks: 1 # 确认机制(0=无响应,1=等待leader确认,-1=等待所有副本确认)
compression: gzip # 压缩格式(gzip/snappy/lz4)
max_message_bytes: 1000000 # 单条消息最大字节数(避免过大被丢弃)
processors用于在发送数据前对其进行加工,如添加字段、解码JSON、删除敏感信息等。
add_fields:添加自定义字段(如app_name、env)。decode_json_fields:解码JSON格式的日志字段(如将message中的JSON转为结构化数据)。drop_fields:删除指定字段(如删除敏感的password字段)。rename:重命名字段(如将src_ip改为source_ip)。processors:
- add_fields:
target: "" # 添加到根层级(若为"my_field"则嵌套到my_field下)
fields:
app_name: "myapp"
env: "production"
- decode_json_fields:
fields: ["message"] # 解码message字段中的JSON
target: "" # 解码后合并到根层级
- drop_fields:
fields: ["password", "credit_card"] # 删除敏感字段
Filebeat提供了多个预构建模块(如system、apache、nginx、mysql),用于快速采集和解析常见服务的日志(无需手动编写正则表达式)。
sudo filebeat modules enable system # 启用system模块(采集系统日志)
sudo filebeat modules enable apache # 启用apache模块(采集Apache日志)
/etc/filebeat/modules.d/(如system.yml、apache.yml),可通过修改这些文件调整模块行为。filebeat.modules:
- module: system
enabled: true
period: 1h # 日志采集周期(默认10分钟)
syslog:
enabled: true # 采集syslog
var.paths: ["/var/log/syslog", "/var/log/auth.log"]
auth:
enabled: true # 采集auth日志
var.paths: ["/var/log/auth.log"]
调整Filebeat自身的日志输出级别,便于调试(可选error、warning、info、debug)。
logging.level: debug # 设置为debug可查看详细采集过程
logging.to_files: true # 日志输出到文件(默认路径:/var/log/filebeat/filebeat)
logging.files:
path: /var/log/filebeat
name: filebeat.log
keepfiles: 7 # 保留最近7天的日志
permissions: 0644
适用于容器化环境(如Docker、Kubernetes),自动检测新容器并采集其日志。
filebeat.autodiscover:
providers:
- type: docker # 监听Docker事件
hints.enabled: true # 使用Docker hints(容器标签指定采集规则)
config:
- type: container
paths:
- /var/lib/docker/containers/*/*.log # Docker日志路径
exclude_lines: ["^\\s+[\\-`('.|_]"] # 排除空行或特殊字符行
sudo filebeat test config -e # 检查配置文件是否有语法错误
sudo systemctl start filebeat # 启动Filebeat
sudo systemctl enable filebeat # 开机自启
sudo systemctl restart filebeat # 重启(修改配置后需重启生效)
sudo systemctl status filebeat # 查看服务状态
sudo tail -f /var/log/filebeat/filebeat # 查看实时日志
通过以上配置,Filebeat可实现灵活的日志采集、处理和传输。根据实际需求调整参数(如日志路径、输出目标、预处理步骤),并结合Elastic Stack(如Kibana)进行可视化分析。