Filebeat生产环境部署与管理最佳实践
一、系统服务化部署
- 在生产环境中,Filebeat应该以系统服务方式运行,确保持久化和高可用性。以下是完整的生产环境部署方案
1. 创建Systemd服务文件
/etc/systemd/system/filebeat.service:
[Unit]
Description=Filebeat sends log files to Logstash or Elasticsearch.
Documentation=https://www.elastic.co/beats/filebeat
After=network.target
[Service]
ExecStart=/usr/share/filebeat/bin/filebeat \
-c /etc/filebeat/filebeat.yml \
--path.home /usr/share/filebeat \
--path.config /etc/filebeat \
--path.data /var/lib/filebeat \
--path.logs /var/log/filebeat
Restart=always
RestartSec=10
MemoryLimit=512M
CPUQuota=80%
[Install]
WantedBy=multi-user.target
2. 启用并启动服务
systemctl daemon-reload
systemctl enable --now filebeat
systemctl status filebeat
二、多日志源采集方案
方案1:单实例多输入配置(推荐)
/etc/filebeat/filebeat.yml:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
tags: ["nginx"]
fields:
log_type: "nginx_access"
processors:
- add_fields:
target: ""
fields:
service: "web-frontend"
- type: log
enabled: true
paths:
- /opt/tomcat/logs/catalina.out
tags: ["tomcat"]
multiline:
pattern: '^[0-9]{2}-[A-Za-z]{3}-[0-9]{4}'
negate: true
match: after
fields:
log_type: "tomcat_app"
output.elasticsearch:
hosts: ["es-node1:9200", "es-node2:9200"]
indices:
- index: "nginx-access-%{+yyyy.MM.dd}"
when.contains:
tags: "nginx"
- index: "tomcat-app-%{+yyyy.MM.dd}"
when.contains:
tags: "tomcat"
方案2:多实例独立部署(资源隔离)
Nginx采集实例 /etc/filebeat-nginx/filebeat.yml:
filebeat.inputs:
- type: log
paths: ["/var/log/nginx/*.log"]
output.elasticsearch:
hosts: ["es-cluster:9200"]
index: "nginx-access-%{+yyyy.MM.dd}"
# 单独的数据目录
path.data: /var/lib/filebeat-nginx
Tomcat采集实例 /etc/filebeat-tomcat/filebeat.yml:
filebeat.inputs:
- type: log
paths: ["/opt/tomcat/logs/catalina.out"]
multiline:
pattern: '^\['
negate: true
match: after
output.elasticsearch:
hosts: ["es-cluster:9200"]
index: "tomcat-app-%{+yyyy.MM.dd}"
path.data: /var/lib/filebeat-tomcat
对应Systemd服务文件:
# /etc/systemd/system/filebeat-nginx.service
[Service]
ExecStart=/usr/share/filebeat/bin/filebeat -c /etc/filebeat-nginx/filebeat.yml
...
# /etc/systemd/system/filebeat-tomcat.service
[Service]
ExecStart=/usr/share/filebeat/bin/filebeat -c /etc/filebeat-tomcat/filebeat.yml
...
三、生产环境关键配置
1. 资源限制
# 控制内存使用
queue.mem:
events: 4096
flush.min_events: 1024
flush.timeout: 5s
# 限制CPU使用
max_procs: 2
2. 网络与重试
output.elasticsearch:
bulk_max_size: 500
worker: 3
compression_level: 3
retry:
max_retries: 5
backoff:
init: 1s
max: 60s
3. 日志轮转
# /etc/logrotate.d/filebeat
/var/log/filebeat/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root root
postrotate
systemctl try-restart filebeat
endscript
}
四、Kubernetes部署方案(可选)
filebeat-daemonset.yaml:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
spec:
template:
spec:
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:8.12.0
volumeMounts:
- name: varlog
mountPath: /var/log
- name: tomcat-logs
mountPath: /opt/tomcat/logs
- name: config
mountPath: /usr/share/filebeat/filebeat.yml
subPath: filebeat.yml
resources:
limits:
memory: "512Mi"
cpu: "500m"
volumes:
- name: varlog
hostPath:
path: /var/log
- name: tomcat-logs
hostPath:
path: /opt/tomcat/logs
- name: config
configMap:
name: filebeat-config
五、监控与维护
1. 健康检查接口
curl http://localhost:5066/stats?pretty
2. 关键监控指标
- 采集速率(events/s)
- 发送到ES的成功/失败计数
- 内存使用情况
- 文件描述符数量
3. 版本升级流程
- 备份配置文件和数据目录
- 逐个实例滚动升级
- 验证新版本兼容性
- 监控系统稳定性
六、选择建议
| 场景 | 推荐方案 | 优点 |
|---|---|---|
| 少量日志源 | 单实例多输入 | 管理简单,资源占用少 |
| 日志量大/类型多 | 多实例部署 | 资源隔离,独立扩展 |
| 容器环境 | Kubernetes DaemonSet | 自动扩缩,动态配置 |
| 高安全要求 | 独立实例+加密 | 数据隔离,安全控制 |
对于大多数生产环境,单实例多输入配置是最佳选择,除非:
- 不同日志源有显著不同的性能需求
- 需要完全隔离的安全要求
- 日志量极大导致单个实例资源不足
无论采用哪种方案,都应通过Systemd或Kubernetes等编排工具实现持久化运行,而不是手动启动。
浙公网安备 33010602011771号