首页  编辑  

Kibana中使用Script Field对字段的值进行处理后进行运算

Tags: /计算机文档/软件应用技巧/   Date Created:
本文介绍了一种处理 Elasticsearch 字段数据的方法。
用户需要管理索引的权限才能够使用 script fields!
Kibana中,如果要对一个字段,比如"field":"1234ms",进行处理,想替换掉掉ms,获取数字进行处理,怎么办?
elasticsearch - Kibana: pie chart slices based on substring of a field - Stack Overflow
考虑如下 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 来对字段进行预处理。
Script Field
  1. 在 Kibana 中,菜单中,找到 Stack Management, 点击左边的 Index Patterns
  2. 切换到 [Script fields]页面,点击 [Add scripted field]
  3. 新建脚本,类似下面:

    脚本代码如下:
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

未完成……