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 看到"主机名"命令显示的相同名称。这可能吗?或者我可以以某种方式让日志发送应用程序将其主机名显式添加到它们发送的数据中?

如果相关,应用程序使用Logstash TCP协议(通过python-logstash)发送日志,但它们是否可以轻松地使用syslog或任何其他协议。

Logstash 找不到远程机器的主机名,在日志中获取此信息的方法是在将日志发送到 logstash 之前将其添加到主机上。

Filebeat是一种日志传送工具,用于获取日志文件并将其发送到Logstash,它会在发送事件之前将信息添加到事件中,因此,如果您的应用程序记录到文件中,我建议您查看Filebeat。

另一种选择是自定义您的日志,以自己在运输过程中的某个位置包含主机名。

无论哪种方式,主机名都应在发送到 logstash 之前添加到日志事件中。

相关内容

  • 没有找到相关文章

最新更新