我是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是相关的(相同的用户)。
它应该做的最后一件事是找到不寻常的动作序列(例如,没有相应的注销的登录)
是否可以在不必手动配置所有类型的日志的情况下实现这一切?如果没有,你能指出这个多通道索引的一些例子,即使它涉及手动配置吗?
答案 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完成后它就会是这样。