在 CentOS 上让 Filebeat 与 Logstash 协同工作
一 架构与端口约定
二 安装与目录
sudo yum install filebeatsudo yum install logstashsudo systemctl start|enable filebeat、sudo systemctl start|enable logstashsudo journalctl -u filebeat -f、sudo journalctl -u logstash -f。三 最小可用配置示例
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
output.logstash:
hosts: ["localhost:5044"]
input {
beats {
port => 5044
}
}
filter {
# 示例:解析 Apache 访问日志;其他日志请替换为合适的 grok 模式
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "filebeat-%{+YYYY.MM.dd}"
}
}
四 验证与常见问题
sudo systemctl status filebeat、sudo systemctl status logstashsudo journalctl -u filebeat -f、sudo journalctl -u logstash -fnc -vz <logstash_ip> 5044curl -X GET "localhost:9200/_cat/indices?v"curl -X GET "localhost:9200/filebeat-*/_search?pretty"stdout { codec => rubydebug } 观察事件结构。filebeat test config、filebeat test output(可快速发现配置与输出连通性问题)。五 进阶用法
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/logs/app1/*.log
fields:
project: "app1"
- type: log
enabled: true
paths:
- /opt/logs/app2/*.log
fields:
project: "app2"
fields_under_root: true
output.logstash:
hosts: ["logstash:5044"]
input { beats { port => 5044 } }
filter {
if [project] == "app1" {
mutate { add_field => { "index_prefix" => "filebeat-app1" } }
} else if [project] == "app2" {
mutate { add_field => { "index_prefix" => "filebeat-app2" } }
} else {
mutate { add_field => { "index_prefix" => "filebeat-default" } }
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "%{[index_prefix]}-%{+YYYY.MM.dd}"
}
}
- type: log
enabled: true
paths:
- /apps/usr/appdata/logs/*.log
multiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]'
multiline.negate: false
multiline.match: after