使用logstash接收syslog,针对同一端口区分不同索引

使用logstash接收syslog,针对同一端口区分不同索引,第1张

使用logstash接收syslog,针对同一端口区分不同索引 概述

之前已经实现了syslog到logstash到elasticsearch的一个syslog收集过程。但是有个问题一直困扰我,就是有些设备因为比较老,不支持将syslog送到不同的端口,所以他们的日志在kibana里就很难区分,也就不太好针对性的去做解析了。

折腾了一下午,google无数+es论坛的帮助,基本解决了这个问题。

解决方法

大致的思路还是在logstash上做文章。我们知道,logstash的配置文件分为三个部分,即input、filter和output。

首先在input这里,参数如下。这里需要注意的是,host是logstash的监听地址,而不是发送syslog的源地址。

    syslog{
        type => "syslog-generic"
        host => "1.2.3.4"
        port => 514
    }

那么,所有送到514端口的日志,我们都会给他打上一个syslog-generic的type。

重点来了,在filter部分,我们这样写:

 if [host] == "1.2.3.4" {
    mutate {
      replace => { "[type]" => "syslog-dns-query"}
    }
  }

这段也很简单,如果host是1.2.3.4,那么我们把type replace为syslog-dns-query。当然,这里也是可以设置grok语法的。
至于output部分就不说了,正常 *** 作即可。

总结

第一个问题是如何区分。在input哪里,我们没法区分端口,那就简单一点,直接监听514并且给一个默认的type。

最重要的来了,我们其实可以分析下收到的日志


这张图,如果我们要用这里的severity的话,我们就得使用[fields][severity],在es论坛看了半天没搞明白这个fields是啥,在这里其实就能看出来了。

这张图,我们可以看到标红部分的host,是一个text字段,那么我们直接就可以匹配了。如果是数组可能还麻烦一点。
同时他还有其他一些字段也可以利用,比如tag啥的。

这样一来,其实很简单是不是?

另外,似乎据说logstash的性能不是太好,下面可以考虑用pipeline或者其他形式来实现。好在logstash+syslog的形式不需要对原设备进行改造或者安装软件,还是很方便的。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5715261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存