7

システムに 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 アドレス (おそらく他の情報も) を使用する必要があります。

誰かがこれを行うのを手伝ってもらえますか? :)

または、誰かがこれを別の方法で効果的に行う方法についてより良いアイデアを持っている場合は、大歓迎です!

4

2 に答える 2

3

You will need to modify the Lumberjack input filter and server to do this. See the following diffs:

https://github.com/stanhu/logstash-input-lumberjack/commit/0861c9d95caa46370f17a82353710bc78ea2c82e

https://github.com/stanhu/logstash-forwarder/commit/b711d273a24ab3fe1b4a7b6005d2f26983cac859

Until these changes get merged into logstash-forwarder and logstash-input-lumberjack, the easiest way to use this right now is to modify your installed files directly. If you're using the current Debian packages, they are here:

/opt/logstash/lib/logstash/inputs/lumberjack.rb
/opt/logstash/vendor/bundle/jruby/1.9/gems/jls-lumberjack-0.0.20/lib/lumberjack/server.rb

To the input filter configuration file (e.g. /etc/logstash/conf.d/01-lumberjack-input.conf), add:

client_address_field => "client_address"

Your logstash config should look something like this:

input {
  lumberjack {
    host => "localhost"
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
    client_address_field => "client_address"
  }
}

Restart logstash on the machine, and check whether the client_address field is now being added to each message.

于 2015-01-22T23:00:58.130 に答える