我在弹性索引中捕获了日志,索引中的变量“ message”包含整个日志消息。我想将该数据拆分为多个字段,例如timstamp,ip等。 注意:使用POST,日志可以直接从我们的应用程序中抽取到Elastic中。
我创建了grok来拆分这些信息,但是我不确定如何实时进行转换。
{
"_index" : "logs_exception",
"_type" : "_doc",
"_id" : "9RI-BGoBwdzZ5ffB3_Sj",
"_score" : 2.4795628,
"_source" : {
"CorrelationId" : "bd3fc7d6-ca39-44e1-9a59-xxasdasd1",
"Message" : "2019-04-10 10:36:27,780 [8] ERROR LoggingService.TestConsole.Program [(null)] - System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain."
}
我们可以创建一个弹性管道来从其中一个索引进料并应用grok并将其推回到另一个索引吗?或最好的方法是什么?
答案 0 :(得分:1)
最好的方法是将Ingest node配置为在将文档编入es之前对其进行预处理。
在您的情况下,您需要一个Grok Processor来匹配消息字段并将其分成多个字段,下面是一个示例管道定义,其中带有Grok Processor来将文档引入到弹性文件中
{
"description" : "...",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{DATESTAMP:timestamp}%{SPACE}%{SPACE}\[(?<misc1>.*)\]%{SPACE}%{WORD:loglevel}%{SPACE}%{JAVACLASS:originator}%{SPACE}\[(?<misc2>.*)\]%{SPACE}%{GREEDYDATA:data}"]
}
}
]
}
使用上述管道定义后,您的数据将按如下所示编制索引。
{
"_index" : "logs_exception",
"_type" : "_doc",
"_id" : "9RI-BGoBwdzZ5ffB3_Sj",
"_score" : 2.4795628,
"_source" : {
"CorrelationId" : "bd3fc7d6-ca39-44e1-9a59-xxasdasd1",
"timestamp" : "19-04-10 10:36:27,780",
"misc1" : 8,
"loglevel": ERROR,
"originator": "LoggingService.TestConsole.Program",
"misc2": (null),
"data" : "- System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain.",
"Message" : "2019-04-10 10:36:27,780 [8] ERROR LoggingService.TestConsole.Program [(null)] - System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain."
}
答案 1 :(得分:0)
您可以使用json过滤器:
Go