在 CentOS 上用 Filebeat 转发日志,通常目标是把系统日志(如 /var/log/messages、/var/log/secure、systemd journal 等)发送到 Elasticsearch / Logstash / Kafka 等后端。下面给你一套从安装到配置的完整方案,适合生产环境直接使用。
# 导入 Elastic GPG Key
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# 添加 yum 源
cat <<EOF | sudo tee /etc/yum.repos.d/elastic.repo
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
# 安装 Filebeat
yum install -y filebeat
配置文件路径:
/etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages
- /var/log/secure
- /var/log/cron
- /var/log/boot.log
- /var/log/maillog
output.elasticsearch:
hosts: ["http://elasticsearch:9200"]
✅ 适合:
systemd 日志比 /var/log/messages 更完整。
filebeat.inputs:
- type: systemd
enabled: true
path: /var/log/journal
✅ 优点:
⚠️ 注意:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
⚠️ 不建议生产直接这样用(会采集很多无用日志)
output.logstash:
hosts: ["logstash:5044"]
Logstash 示例:
input {
beats {
port => 5044
}
}
filter {
if [log][file][path] =~ "secure" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{WORD:program}: %{GREEDYDATA:msg}" }
}
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "centos-logs-%{+YYYY.MM.dd}"
}
}
systemctl enable filebeat
systemctl start filebeat
systemctl status filebeat
# Filebeat 状态
systemctl status filebeat
# 查看日志
journalctl -u filebeat -f
usermod -aG adm filebeat
usermod -aG root filebeat
或临时测试:
chmod 644 /var/log/secure
getenforce
临时关闭测试:
setenforce 0
✅ 生产建议:
✅ 添加索引生命周期(ILM)
✅ 开启 JSON 日志解析
✅ 设置 fields.type: system 区分日志来源
✅ 限制采集历史日志:
scan_frequency: 10s
harvester_buffer_size: 16384
CentOS
└── Filebeat
├── Logstash
│ └── Elasticsearch
└── Kibana
或
CentOS → Filebeat → Elasticsearch → Kibana
你可以告诉我:
我可以直接给你 一份可复制粘贴的完整 filebeat.yml 配置。