Ubuntu下Filebeat配置文件详解
Filebeat是Elastic开发的轻量级日志采集工具,其配置文件默认位于/etc/filebeat/filebeat.yml(YAML格式)。以下是核心配置项的详细说明及实战示例:
1. 基础配置:filebeat.inputs(输入源定义)
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
2. 输出配置:output(数据目的地)
output定义Filebeat将采集的日志发送到哪里,支持elasticsearch、logstash、kafka、redis等目标。
2.1 输出到Elasticsearch
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节点管道(用于数据预处理)
2.2 输出到Logstash
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证书路径
2.3 输出到Kafka
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 # 单条消息最大字节数(避免过大被丢弃)
3. 数据处理:processors(预处理步骤)
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"] # 删除敏感字段
4. 模块配置:filebeat.modules(预构建模块)
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"]
5. 高级配置
5.1 日志级别(logging)
调整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
5.2 自动发现(autodiscover)
适用于容器化环境(如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+[\\-`('.|_]"] # 排除空行或特殊字符行
6. 验证与启动
- 测试配置文件语法:
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)进行可视化分析。
以上就是关于“Ubuntu下Filebeat配置文件详解”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm