在logstash中自动检测日志类型

时间:2017-03-21 09:36:42

标签: logstash elastic-stack

我是logstash,elasticsearch和kibana(ELK)的新手。

我知道我可以创建过滤器来解析特定日志并从中提取一些字段。对于每种类型的日志,我都需要配置特定的过滤器。由于我有大约20种不同的服务,每种服务都写着大约一百种不同类型的日志,这对我来说太难了。

对于日志类型,我指的是具有参数更改的特定模板的日志

这是一些日志的示例:

Log1:用户Peter已登录

Log2:用户John已登录

Log3:Peter发送消息“hello”

Log4:John发送的消息“再见”

我希望ELK自动发现这里有两种类型的日志

Type1:用户%1已登录

Type2:%2发送的消息“%1”

这可能吗?有没有这样做的例子?我不想为每种类型的日志手动编写模板,我希望它能够自动发现。

然后还提取参数。这就是我希望在索引中看到的内容

Log1:Type1,params:Peter

Log2:Type1,params:John

Log3:Type2,params:hello,Peter

Log4:Type2,params:bye,John

之后我希望ELK再次扫描我的索引并发现Type1的参数%1通常是Type2中的参数%2(用户名)。此外,它应该发现Log1和Log3是相关的(相同的用户)。

它应该做的最后一件事是找到不寻常的动作序列(例如,没有相应的注销的登录)

是否可以在不必手动配置所有类型的日志的情况下实现这一切?如果没有,你能指出这个多通道索引的一些例子,即使它涉及手动配置吗?

1 个答案:

答案 0 :(得分:1)

Logstash没有这样的发现,你必须自己进行语言解析。它既乏味又重复,但它完成了工作。根据您影响其他领域的能力,您可以在此处选择一些选项:

  • 如果这些日志的格式可更改,请考虑推送身份验证日志记录标准。这样你只需要一种模式。
  • 考虑采用模块化方法生成过滤器管道。 Log1个模式位于一个模块中,Log2位于另一个模块中。它使可维护性更容易。

你对这个问题表示同情。我现在必须将Logstash与许多系统的身份验证日志记录集成在一起,并且每个系统都会根据编写它的开发人员的想法来描述他们正在做的事情(这可能发生在25年前的一些情况)。

对于我们开发的产品,我至少可以影响日志记录的外观。从自然语言grok格式转移到其他格式(例如kv甚至json)对于简化解析问题或我来说还有很长的路要走。诀窍在于让人们相信我们只会通过Kibana查看日志,为什么我们需要:

  

用户%{user}已登录到区域%{zone}

中的应用程序%{app}

什么时候可以

  

user =“%{user}”app =“%{app}”zone =%{zone}

甚至:

  

{“user”:%{user},“app”:%{app},“zone”:%{zone}}

因为无论如何,当Logstash完成后它就会是这样。