logstash中日志类型的自动检测

Automatic detection of types of logs in logstash

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

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

对于日志类型,我指的是具有特定模板且参数会发生变化的日志

这是一些日志的例子:

Log1:用户 Peter 已登录

Log2:用户 John 已登录

Log3:消息 "hello" 由 Peter

发送

Log4:消息 "bye" 由 John

发送

我想让ELK自动发现我们这里有两种类型的日志

类型 1:用户 %1 已登录

类型 2:消息“%1”由 %2

发送

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

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

Log1:Type1,参数:Peter

Log2:Type1,参数:John

Log3:Type2,参数:你好,彼得

Log4:Type2,参数:再见,约翰

之后我想让ELK再次扫描我的索引,发现Type1的param %1通常是Type2(用户名)的param %2。它还应该发现 Log1 和 Log3 是相关的(同一用户)。

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

无需手动配置所有类型的日志,这是否可能?如果没有,即使涉及手动配置,你能给我指出这个多通道索引的一些例子吗?

Logstash没有这样的发现,你得自己做语言解析。这是乏味和重复的,但它完成了工作。根据您影响其他领域的能力,您在这里有几个选择:

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

你对这个问题表示同情。到目前为止,我不得不将 Logstash 与许多系统的身份验证日志记录集成在一起,并且每个系统都描述了他们所做的事情有些不同,所有这些都是基于编写它的开发人员的心血来潮(这可能发生在 25 年前某些情况下)。

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

User %{user} logged into application %{app} in zone %{zone}

我们什么时候可以

user="%{user}" app="%{app}" zone=%{zone}

甚至:

{ "user": %{user}, "app": %{app}, "zone": %{zone} }

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