这听起来应该很简单 - 我确定我不是第一个有这个问题的人。所以我必须错过一些明显的东西。Logstash如何找出日志来自的主机的名称?
我正在设置一个Logstash实例来从多个应用程序收集日志,每个应用程序都运行在不同的Amazon EC2主机上。
我希望Logstash知道每个日志消息来自哪里的主机的名称,以便触发某些行为(例如使用“grok”来解析仅存在于特定应用程序日志中的字段,或者发送电子邮件仅针对某个应用程序发出警报)。我无法使用日志消息的实际文本,因为每个日志消息的格式不同。
我以为我可以使用内置的“主机”字段,但事实证明这只是一个IP地址。这是可能做一个反向DNS每次收到日志消息的时间查找,像
filter {
mutate {
add_field => { "hostname" => "%{host}" }
}
dns {
action => "replace"
reverse => [ "hostname" ]
add_tag => [ "dns_lookup" ]
}
if "myapplication" in [hostname] {
# do something
}
}
但是,让像亚马逊的基于IP地址的名称中的一个“IP-10-1-1-23.ec2.internal ”。
我只想让Logstash看到“hostname”命令显示的同名。那可能吗?或者我可以以某种方式使日志发送应用程序显式地将他们的主机名添加到他们发送的数据中?
如果相关,应用程序使用Logstash TCP协议(通过python-logstash)发送它们的日志,但它们是否可以轻松使用syslog或任何其他协议。
Filebeat在每个主机上运行单独的Logstash实例的优点是什么(所有的日志都发送到同一个Elasticsearch实例)? – gesgsklw
在一个Logstash中完成所有处理,而Filebeat是一个小型的Go应用程序,而不是一个巨大的JVM应用程序与您的应用程序竞争资源 –