kibana - 将 Elastic Search 数字字段转换为文本值

标签 kibana dashboard elasticsearch-painless

我有一个 Elastic Search 集群,里面有很多不错的数据,我为它们创建了一些不错的 Kibana 仪表板。

对于下一个级别,我决定查看脚本化字段,以使某些仪表板更加美观。

我想将一些数字字段转换为更容易理解的文本值。作为我想要做的和我尝试过的一个例子,我将使用 http 响应状态代码字段,大多数人会很容易理解,但也说明了问题。

我们记录数字状态代码(200、201、302、400、404、500 等)。我可以创建一个数据表可视化,告诉我每个状态代码的计数。但我想在我的仪表板中显示文本原因。

我可以创建一个包含大量 IF 语句的无痛脚本,如下所示:

if (doc['statuscode'].value == 200) {return "OK";}
if (doc['statuscode'].value == 201) {return "Created";}
if (doc['statuscode'].value == 400) {return "Bad Request";}
return doc['statuscode'].value;

但我认为这不是很好。

但由于我很可能有大约 150 个不同的值,并且该列表不会经常更改,因此我可以忍受维护静态 map 。但是我还没有找到任何在无痛脚本中实现 map 或字典的例子。

我正在考虑实现这样的事情:
Map reasonMap;
reasonMap[200] = 'OK';
reasonMap[201] = 'Created';

def reason = reasonMap[doc['statuscode'].value];
if (reason != null)
{
   return reason;
}

return doc['statuscode'].value;

我一直无法使此代码工作。问题还在于,这对于具有多达 150 个值的 map 是否足够好。

谢谢

编辑

经过一些试验和错误......以及大量的谷歌搜索,这就是我想出的有效方法(请注意, key 需要以字符而不是数字开头):
def reasonMap = 
[
  's200': 'OK',
  's201': 'Created'
];
def key = 's' + doc['statuscode'].value

def reason = reasonMap[key];
if (reason != null)
{
   return reason;
}

return doc['statuscode'].value;

最佳答案

应该是

def reason = reasonMap[doc['statuscode']value];

它将在 150 个值的 Map 中表现良好。

关于kibana - 将 Elastic Search 数字字段转换为文本值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51774854/

相关文章:

php - 使用 php jquery ajax 从数据库获取仪表板计数

azure - 如何在 Microsoft Azure IoT 中创建流数据的自定义仪表板?

elasticsearch - 将数据从 SSD 引退到 HDD

mongodb - 如何使用Logstash将数据从mongodb同步到elasticsearch

elasticsearch - 计算Logstash中不同事件之间的差异或增量

R flexdashboard删除标题栏

elasticsearch - Elasticsearch轻松更新唯一元素列表

elasticsearch - 如何检查 Elasticsearch 无痛参数中是否存在 key ?

node.js - 如何在Node.js中添加多行无痛代码

elasticsearch - 如何从Kibana仪表板远程访问Elasticsearch?