在 Ubuntu 上把 syslog 对接到 ELK(Elasticsearch + Logstash + Kibana),常见做法有三种,按使用频率从高到低:
最常用、最稳定,适合生产环境
Ubuntu 默认使用 rsyslog,日志通常在:
/var/log/syslog/var/log/auth.log确保 rsyslog 在运行:
sudo systemctl status rsyslog
sudo apt update
sudo apt install filebeat -y
编辑:
sudo vim /etc/filebeat/filebeat.yml
示例(读取 syslog):
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/log/syslog
- /var/log/auth.log
output.logstash:
hosts: ["logstash-ip:5044"]
如果用 ES 直连(不推荐新手):
output.elasticsearch:
hosts: ["http://es-ip:9200"]
启动:
sudo systemctl enable filebeat
sudo systemctl start filebeat
sudo vim /etc/logstash/conf.d/syslog.conf
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{DATA:program}: %{GREEDYDATA:msg}" }
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "syslog-%{+YYYY.MM.dd}"
}
}
重启 Logstash:
sudo systemctl restart logstash
syslog-*适合 不装 Filebeat 的场景
input {
syslog {
port => 514
type => "rsyslog"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "rsyslog-%{+YYYY.MM.dd}"
}
}
sudo vim /etc/rsyslog.d/10-elk.conf
*.* @@logstash-ip:514
重启:
sudo systemctl restart rsyslog
⚠️ 注意:514 是特权端口,可能需要 sudo setcap
如果你用 Docker ELK:
/var/log# Filebeat
sudo filebeat test output
# Logstash
sudo tail -f /var/log/logstash/logstash-plain.log
在 Logstash 中加:
date {
match => ["timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss"]
}
sudo usermod -aG adm filebeat
✅ 生产环境:Filebeat + Logstash
✅ 简单测试:rsyslog → Logstash
❌ 不推荐:直接 ES 写 syslog(缺乏解析)
如果你愿意,我可以: