CentOS Syslog 与 ELK Stack 集成方法
一 架构与方案选择
二 方案一 Syslog 直连 Logstash
input {
udp {
port => 514
type => "syslog"
codec => json { charset => "UTF-8" }
}
# tcp {
# port => 514
# type => "syslog"
# codec => json { charset => "UTF-8" }
# }
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:syslog_message}" }
overwrite => [ "message" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
target => "@timestamp"
}
mutate {
remove_field => [ "syslog_timestamp", "pid", "program" ]
}
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "syslog-%{+YYYY.MM.dd}"
user => "elastic"
password => "YourElasticPassword"
}
stdout { codec => rubydebug } # 调试时可开启
}
# 全部日志发往 Logstash(UDP)
*.* @logstash-server-ip:514
# 如需 TCP
# *.* @@logstash-server-ip:514
三 方案二 通过 Filebeat 转发 Syslog
input {
beats {
port => 5044
}
}
filter {
if [fileset][module] == "system" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:syslog_message}" }
overwrite => [ "message" ]
}
syslog_pri { }
date {
match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
target => "@timestamp"
}
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "syslog-beats-%{+YYYY.MM.dd}"
user => "elastic"
password => "YourElasticPassword"
}
stdout { codec => rubydebug }
}
filebeat.inputs:
- type: filestream
id: syslog
paths:
- /var/log/messages
- /var/log/secure
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
output.logstash:
hosts: ["logstash-server-ip:5044"]
四 服务端组件安装与 Kibana 配置
五 验证与常见问题