elasticsearch elasticsearch:从字段中提取数字
我使用elasticsearch和kibana来存储日志。 现在我想从一个字段中提取一个数字,并将其存储到一个新字段中 例如,有这样一个: accountExist执行时间:1046毫秒 我想提取数字(1046)并在kibana的一个新字段中查看它 可能吗?怎样?elasticsearch elasticsearch:从字段中提取数字,elasticsearch,kibana,elasticsearch,Kibana,我使用elasticsearch和kibana来存储日志。 现在我想从一个字段中提取一个数字,并将其存储到一个新字段中 例如,有这样一个: accountExist执行时间:1046毫秒 我想提取数字(1046)并在kibana的一个新字段中查看它 可能吗?怎样? 感谢您的帮助您需要在编制索引之前/期间执行此操作 在Elasticsearch中,您可以在索引期间获得所需内容: 使用定义新的分析器来包装正则表达式(出于您的目的,捕获字符串中的连续数字-) 在映射中创建新的数字字段以保存提取的时间
感谢您的帮助您需要在编制索引之前/期间执行此操作 在Elasticsearch中,您可以在索引期间获得所需内容:
对于测试目的可能很有帮助。虽然没有性能,但如果必须避免重新编制索引,可以在kibana中使用脚本字段 简介如下:
- 通过在elasticsearch.yaml中添加以下内容来启用无痛正则表达式支持: script.painless.regex.enabled:true
- 重新启动elasticsearch
- 通过管理->索引模式->脚本字段,在Kibana中创建一个新的脚本字段
- 选择painless作为语言,选择number作为类型
- 创建实际脚本,例如:
- 要执行新字段,您必须完全重新加载网站,只需在打开的发现网站上重新搜索,将无法获取新字段。(这几乎让我放弃了让它工作的努力——。-)
- 在发现或可视化中使用脚本
您可以在查询内部生成脚本字段,如下所示:但这似乎有点太过隐蔽,难以轻松维护://如前所述,这必须在索引期间完成,因此要为现有数据添加脚本字段,您需要重新索引。这是一个不错的策略:令人沮丧的是,你不得不走这么长的路,做一些琐碎的事情。kibana很难从文本中提取值以进行绘图等,这有什么原因吗?假设您想梳理过去一周的日志(10MM记录),查找耗时1秒以上的请求。在数据库中,您需要对10MM行进行表扫描,处理一个10 mm的正则表达式,然后进行转换和比较。。。。那要花很长时间!如果您从一开始就将执行时间加载到它自己的(索引的)字段中,您将能够在一个btree(微秒?)中的几跳中找到记录。Kibana依赖于Elasticsearch擅长的东西:聚合,而不是繁重的工作。恐怕这个解决方案行不通。请参见
复制的是字段值,而不是术语(由分析过程产生)。
我对其进行了测试,事实上,在将分析复制到新字段而不是从分析器产生的术语之前,这将不起作用。您的参数是正确的。必须在目的地字段上执行分析(提取号码)。但事后来看,即使您提取了数字部分,您也会对目标字段进行“文本”分析,因此标记的最终“术语”将是“文本”类型,而不是预期的数字。在过去,我总是在发送要索引的记录之前处理这种文本解析。你对此有答案吗?我在找sameWe用logstash脚本解决了这个问题。有了grok,你可以做很多事情。
def logMsg = params['_source']['log_message'];
if(logMsg == null) {
return -10000;
}
def m = /.*accountExist execution time: ([0-9]+) ms.*$/.matcher(params['_source']['log_message']);
if ( m.matches() ) {
return Integer.parseInt(m.group(1))
} else {
return -10000
}