获取Logstash-forwarder机器的IP地址

chi*_*may 7 elasticsearch logstash kibana logstash-grok logstash-forwarder

我在我的系统上设置了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 }
}
Run Code Online (Sandbox Code Playgroud)

在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" }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的Kibana界面从Elasticsearch获取索引日志后的样子. 在此输入图像描述

所以我的问题是,我需要一种方法来检索logstash-forwarder的IP地址,即54.249.59.224,以防有日志事件.

我之所以这么说是在一个真实的场景中,我们可能会有许多logstash-forwarders(比如10),其中所有10个都将日志发送到我们的logstash-server.所以我需要标记所有日志事件,以便我可以识别哪个logstash-server发送了哪个日志事件.

我需要使用IP地址(也许还有一些其他信息)来搜索Kibana界面中的日志事件.

有人可以帮我这样做吗?:)

或者,如果有人更好地了解如何以不同的方式有效地做到这一点,那么你们非常欢迎!

小智 3

您将需要修改 Lumberjack 输入过滤器和服务器才能执行此操作。请参阅以下差异:

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

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

在这些更改合并到logstash-forwarder和logstash-input-lumberjack之前,现在使用它的最简单方法是直接修改已安装的文件。如果您使用当前的 Debian 软件包,它们位于此处:

/opt/logstash/lib/logstash/inputs/lumberjack.rb
/opt/logstash/vendor/bundle/jruby/1.9/gems/jls-lumberjack-0.0.20/lib/lumberjack/server.rb
Run Code Online (Sandbox Code Playgroud)

在输入过滤器配置文件(例如 /etc/logstash/conf.d/01-lumberjack-input.conf)中添加:

client_address_field => "client_address"
Run Code Online (Sandbox Code Playgroud)

你的logstash配置应该是这样的:

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"
  }
}
Run Code Online (Sandbox Code Playgroud)

重新启动计算机上的logstash,并检查该client_address字段现在是否已添加到每条消息中。