gpt4 book ai didi

elasticsearch - 无痛脚本Kibana 6.4.2不使用匹配器进行匹配,但使用条件表达式进行匹配

转载 作者:行者123 更新时间:2023-12-02 23:15:37 24 4
gpt4 key购买 nike

您好,我正在尝试在kibana脚本字段中使用正则表达式获取日志消息的子字符串。我遇到了一个有趣的场景,但没有加起来。我将消息字段转换为关键字,因此可以对其执行脚本化的字段操作。

当我与条件匹配时,例如:

if (doc['message'].value =~ /(\b(?:\d{1,3}\.){3}\d{1,3}\b)/) { 
return "match"
} else {
return "no match"
}

这将匹配ip并正确返回消息中有一个ip。但是,每当我尝试执行将匹配的文本拆分为子字符串的匹配器功能时,都找不到任何匹配项。

遵循Elastic的文档指南以进行此操作,位于此处:
https://www.elastic.co/blog/using-painless-kibana-scripted-fields

这是他们提供的示例脚本,用于匹配日志消息中ip的第一个八位字节。但是,如果日志消息中确实有IP地址,则此操作不返回任何匹配项。无论我做什么,我什至不能匹配仅文本字符,它返回0个匹配项。

我也在集群的elasticsearch.yml中启用了rexex。
def m = /^([0-9]+)\..*$/.matcher(doc['message'].value);
if ( m.matches() ) {
return Integer.parseInt(m.group(1))
} else {
return m.matches() + " - " + doc['message'].value;
}

这将返回0个匹配项。即使我使用与条件相同的表达式:

/(\b(?:\d{1,3}。){3}\d{1,3}\b)/

匹配器仍将返回false。

任何想法我在这里做错了根据应该正常工作的文档。

当值存在于if条件中时,我尝试使用subs-strings,但日志消息之间存在很多差异。如果我只是在脚本字段中使用条件的话,我也看不到一种拆分并浏览输出列表以选择带ip的方法。

关于如何解决这个问题的任何想法:

这是返回表格的示例
def m = /^([0-9]+)\..*$/.matcher(doc['message'].value);
if ( m.matches() ) {
return Integer.parseInt(m.group(1))
} else {
return m.matches() + " - " + doc['message'].value;
}

有趣的是,它们全都返回false,这实际上只是在查找带有的数字。而且我已经尝试过各种正则表达式组合,但都没有碰运气。
[
{
"_id": "VRYK_2kB0_nHZ_3qyRwt",
"Source-IP": [
"false - #Version: 1.0"
]
},
{
"_id": "VhYK_2kB0_nHZ_3qyRwt",
"Source-IP": [
"false - 2019-02-17 00:34:11 127.0.0.1 GET /status/web - 8611 - 127.0.0.1 ELB-HealthChecker/2.0 - 200 0 0 31"
]
},
{
"_id": "VxYK_2kB0_nHZ_3qyRwt",
"Source-IP": [
"false - #Software: Microsoft Internet Information Services 10.0"
]
},
{
"_id": "WBYK_2kB0_nHZ_3qyRwt",
"Source-IP": [
"false - #Date: 2019-03-26 00:00:08"
]
},
{
"_id": "WRYK_2kB0_nHZ_3qyRwt",
"Source-IP": [
127.0.0.1 ELB-HealthChecker/2.0 - 200 0 0 15"
]
},
{

最佳答案

最终结果如下:

if (doc["message"].value != null) { 
def m = /(\b(?:\d{1,3}\.){3}\d{1,3}\b)/.matcher(doc["message"].value);
if (m.find()) { return m.group(1) }
else { return "no match" }
}
else { return "NULL"}

关于elasticsearch - 无痛脚本Kibana 6.4.2不使用匹配器进行匹配,但使用条件表达式进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com