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 完成它时,它就会是这样。
我是 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 完成它时,它就会是这样。