Filebeat企业级日志采集实战指南
一、Filebeat核心架构与部署
1.1 Filebeat安装与配置
安装方法:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.22-amd64.deb
dpkg -i filebeat-7.17.22-amd64.deb
关键目录说明:
- 配置文件目录:
/etc/filebeat/
- 数据存储目录:
/var/lib/filebeat/
(记录采集进度) - 模块目录:
/usr/share/filebeat/modules/
1.2 Filebeat核心架构
Filebeat采用模块化设计,主要包含两大核心组件:
-
Input(输入):
- 负责从各种数据源采集数据
- 支持多种输入类型:
stdin
、log
、tcp
、udp
、syslog
等 - 内置自动发现功能(Autodiscover)
-
Output(输出):
- 将采集的数据发送到目标系统
- 支持多种输出类型:Elasticsearch、Logstash、Kafka、Redis等
- 支持负载均衡和故障转移
1.3 基础配置案例
标准输入到标准输出(测试用):
# 01-stdin-to-stdout.yaml
filebeat.inputs:
- type: stdin
output.console:
pretty: true
标准输入到Elasticsearch:
# 02-stdin-to-es.yaml
filebeat.inputs:
- type: stdin
output.elasticsearch:
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
二、生产环境部署方案
2.1 后台运行方式
方案一:nohup方式
nohup filebeat -e -c /path/to/config.yaml > filebeat.log 2>&1 &
方案二:Systemd服务(推荐)
# /lib/systemd/system/filebeat.service
[Unit]
Description=Filebeat Service
After=network.target
[Service]
ExecStart=/usr/bin/filebeat -e -c /etc/filebeat/filebeat.yml
Restart=always
[Install]
WantedBy=multi-user.target
管理命令:
systemctl daemon-reload
systemctl enable --now filebeat
2.2 TCP日志采集方案
服务端配置:
# 03-tcp-to-es.yaml
filebeat.inputs:
- type: tcp
host: "0.0.0.0:9000"
output.elasticsearch:
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
客户端发送测试:
echo "测试日志数据" | nc 10.0.0.92 9000
三、高级配置与优化
3.1 自定义索引模板
# 04-tcp-to-es-custom-index.yaml
output.elasticsearch:
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
index: "custom-index-%{+yyyy.MM.dd}"
setup.ilm.enabled: false
setup.template:
name: "custom-template"
pattern: "custom-index-*"
overwrite: false
settings:
index.number_of_shards: 3
index.number_of_replicas: 1
3.2 文件日志采集配置
# 05-log-to-es.yaml
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
fields:
app_name: "production"
fields_under_root: true
output.elasticsearch:
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
3.3 多行日志处理
filebeat.inputs:
- type: log
paths:
- /var/log/java-app/*.log
multiline:
pattern: '^\['
negate: true
match: after
四、系统日志采集实践
4.1 Ubuntu系统日志采集
# 06-log_ubuntu_system-to-es.yaml
filebeat.inputs:
- type: log
paths:
- /var/log/syslog
- /var/log/*.log
exclude_files: [".gz$"]
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
output.elasticsearch:
hosts: ["http://10.0.0.91:9200","http://10.0.0.92:9200","http://10.0.0.93:9200"]
indices:
- index: "syslog-%{+yyyy.MM.dd}"
when.contains:
message: "error"
五、生产环境最佳实践
-
性能优化建议
- 适当调整
harvester_buffer_size
(默认16KB) - 使用
bulk_max_size
控制批量写入大小 - 启用
pipelining
提高吞吐量
- 适当调整
-
可靠性保障
- 配置
queue.mem.events
控制内存队列大小 - 设置
backoff
策略处理临时故障 - 启用
logging.metrics
监控采集状态
- 配置
-
安全配置
- 使用SSL/TLS加密传输
- 配置基于角色的访问控制
- 敏感信息使用Keystore存储
-
监控与维护
- 定期检查Registry文件状态
- 监控Filebeat自身日志
- 使用Metricbeat监控Filebeat运行状态
六、Kibana数据分析
在Kibana中可以使用KQL(Kibana Query Language)进行高效查询:
# 搜索包含特定关键词的日志
message : "error" AND host.name : "web-server-01"
# 时间范围查询
@timestamp >= now()-1h
# 字段存在性检查
service.name exists
通过本指南,您应该已经掌握了Filebeat在企业环境中的核心应用技术。实际部署时,请根据具体业务需求和环境特点进行调整优化。