ⓘ
本文介绍了一种处理 Elasticsearch 字段数据的方法。
用户需要管理索引的权限才能够使用 script fields!
Kibana中,如果要对一个字段,比如"field":"1234ms",进行处理,想替换掉掉ms,获取数字进行处理,怎么办?
考虑如下 Elasticsearch 数据:
{
"_index": ".your_index_name",
"_type": "_doc",
"_id": "Ex_2qYUBEsbjEiTYPsPw",
"_version": 1,
"_score": 1,
"_source": {
"USER_ID": "root",
"LOG_TYPE": "TRACE",
"FUNCTION_ID": "6104",
"@version": "1",
"CONTENT": "{\"duration\":\"337ms\"}",
"@timestamp": "2023-01-13T07:09:21.842Z"
}
}
对于其中的 CONTENT 字段的值 {"duration":"337ms"} 的数据,其中duration的值,是无法直接被Kibana计算使用的,如何来把其中的数字提取出来进行运算呢?
可以在字段的JSON处理中,添加脚本来实现:
{
"script": "( _value.indexOf(' ') > 0 ? _value.substring(0, _value.indexOf(' ')) : _value )"
}
Elasticsearch 和 Kibana 提供了 script field 和 runtime field 来对字段进行预处理。
- 在 Kibana 中,菜单中,找到 Stack Management, 点击左边的 Index Patterns
- 切换到 [Script fields]页面,点击 [Add scripted field]
- 新建脚本,类似下面:
脚本代码如下:
if (doc['CONTENT.keyword'].size() != 0) {
def m = /^\D*(\d+)ms.*$/.matcher(doc['CONTENT.keyword'].value);
if (m.matches()) {
return Integer.parseInt(m.group(1))
}
}
return -1;
此后,在Kibana中,就可以把 my_dration 字段当作普通字段进行统计和运算了。
Runtime field
Runtime field 需要服务器开启权限才可以添加Runtime field
未完成……