在 CentOS 上用 Filebeat 监控应用日志的完整实践
一 安装与目录结构
sudo yum install filebeat -ysudo systemctl enable filebeat && sudo systemctl start filebeatsudo systemctl status filebeat、sudo journalctl -u filebeat -f二 最小可用配置与启动
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/myapp/*.log
fields:
type: myapp
env: prod
output.elasticsearch:
hosts: ["localhost:9200"]
index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
sudo filebeat test config -c /etc/filebeat/filebeat.ymlsudo filebeat test output -c /etc/filebeat/filebeat.ymlsudo systemctl restart filebeatsudo tail -f /var/log/filebeat/filebeat三 常见场景配置要点
- type: log
enabled: true
paths:
- /var/log/myapp/app.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
max_lines: 1000
timeout: 3s
- type: log
enabled: true
paths:
- /var/log/myapp/*.log
include_lines: ['^ERROR', '^WARN']
exclude_lines: ['^DEBUG']
- type: log
enabled: true
paths:
- /var/log/myapp/*.log
ignore_older: 24h
close_inactive: 1h
clean_inactive: 72h
- type: log
enabled: true
paths:
- /var/log/myapp/*.log
tail_files: true
- type: log
enabled: true
paths:
- /var/log/myapp/access.log
tags: ["access"]
fields:
app: myapp
log_type: access
fields_under_root: true
# 启用模块(示例:nginx)
sudo filebeat modules enable nginx
# 编辑模块配置(可按需调整日志路径与解析规则)
sudo vi /etc/filebeat/modules.d/nginx.yml
# 启动
sudo systemctl restart filebeat
四 输出到 Elasticsearch 或 Logstash
output.elasticsearch:
hosts: ["es-host1:9200", "es-host2:9200"]
index: "myapp-%{[agent.version]}-%{+yyyy.MM.dd}"
# 如启用安全认证
# username: "elastic"
# password: "YourPassword"
# filebeat.yml
output.logstash:
hosts: ["logstash-host:5044"]
# Logstash 示例(/etc/logstash/conf.d/beats-input.conf)
input {
beats { port => 5044 }
}
output {
elasticsearch {
hosts => ["es-host:9200"]
index => "myapp-%{+yyyy.MM.dd}"
}
}
五 索引与生命周期管理、Kibana 可视化
setup.ilm.enabled: false
setup.template.name: "myapp"
setup.template.pattern: "myapp-*"
output.elasticsearch:
index: "myapp-%{+yyyy.MM.dd}"
setup.template.enabled: true
setup.template.name: "myapp"
setup.template.pattern: "myapp-*"
setup.template.overwrite: true
setup.template.settings:
index.number_of_shards: 3
index.number_of_replicas: 1