我已经在我的系统上设置了 Elasticsearch、Logstash、Kibana 日志查看工具。我的配置中现在有 2 台机器(Amazon EC2 实例):
- 54.251.120.171 - 安装 ELK 的 Logstash-server
- 54.249.59.224 - Logstash-forwarder - 将“/var/logs/messages”日志发送到 Logstash-server
在 logstash-server 上,这是我的配置(在不同文件中)的样子:-
input {
lumberjack {
port => 5000
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}
在 logstash-forwarder 上,这是我的配置文件的样子,它将 /var/log/messages、/var/log/secure 日志转发到 logstash-server
{
"network": {
"servers": [ "54.251.120.171:5000" ],
"timeout": 15,
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
},
"files": [
{
"paths": [
"/var/log/messages",
"/var/log/secure"
],
"fields": { "type": "syslog" }
}
]
}
这是我的 Kibana 界面从 Elasticsearch 获取索引日志后的样子。
所以我的问题是,如果有日志事件,我需要一种方法来检索 logstash-forwarder 的 IP 地址,即 54.249.59.224。
我问这个问题的原因是在一个真实的场景中,我们可能有很多logstash-forwarder(比如10个),其中所有10个都将日志发送到我们的logstash-server。所以我需要以某种方式标记所有日志事件,以便我可以识别哪个 logstash-server 发送了哪个日志事件。
我需要使用 IP 地址(可能还有其他一些信息)在 Kibana 界面中搜索日志事件。
有人可以帮我这样做吗?:)
或者如果有人对如何以不同的方式有效地做到这一点有更好的想法,不客气!