【发布时间】:2016-07-07 17:07:23
【问题描述】:
这听起来应该很容易——我确定我不是第一个遇到这个问题的人。所以我肯定遗漏了一些明显的东西。
我正在设置一个 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 看到“主机名”命令显示的相同名称。那可能吗?或者我能否以某种方式让日志发送应用程序将它们的主机名显式添加到它们发送的数据中?
如果相关,应用程序使用 Logstash TCP 协议(通过 python-logstash)发送它们的日志,但它们也可以轻松地使用 syslog 或任何其他协议。
【问题讨论】:
标签: logging dns logstash monitoring elastic-stack