システムに Elasticsearch、Logstash、Kibana ログ表示ツールをセットアップしました。現在、私の構成には 2 台のマシンがあります (Amazon EC2 インスタンス):
- 54.251.120.171 - ELK がインストールされている Logstash サーバー
- 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" }
}
]
}
これは、Elasticsearch からインデックス付きログを取得した後の Kibana インターフェースの外観です。
私の質問は、ログ イベントが発生した場合に備えて、logstash-forwarder の IP アドレス、つまり 54.249.59.224 を取得する方法が必要です。
私がこれを尋ねている理由は、実際のシナリオです。多くのログスタッシュ フォワーダー (たとえば 10) があり、その 10 個すべてがログをログスタッシュ サーバーに送信している可能性があります。そのため、どの logstash-server がどのログ イベントを送信したかを識別できるように、何らかの方法ですべてのログ イベントにタグを付ける必要があります。
Kibana インターフェイスでログ イベントを検索するには、IP アドレス (おそらく他の情報も) を使用する必要があります。
誰かがこれを行うのを手伝ってもらえますか? :)
または、誰かがこれを別の方法で効果的に行う方法についてより良いアイデアを持っている場合は、大歓迎です!