kibana - 将 Elastic Search 数字字段转换为文本值
问题描述
我有一个包含大量数据的 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 reasonMap;
reasonMap[200] = 'OK';
reasonMap[201] = 'Created';
def reason = reasonMap[doc['statuscode'].value];
if (reason != null)
{
return reason;
}
return doc['statuscode'].value;
不过,我无法使此代码正常工作。问题还在于这对于具有多达 150 个值的地图是否足够好。
谢谢
编辑
经过一些试验和错误......以及大量谷歌搜索,这就是我想出的有效方法(注意密钥需要以字符而不是数字开头):
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 中表现良好。
推荐阅读
- node.js - 如何通过对话流发送电子邮件
- excel - 如何根据空白/标准清除单元格
- python-3.x - Python requests.post 响应正文说 b'Wrong capacity Value and wrong headers
- angular - 覆盖 Date.prototype.toJSON 以解决 Angular 7 中的 TimeZone 问题
- python - 在kivy中随机获取线程异常
- ios - UiCollectionView 不显示
- nginx - 未添加 nginx 标头
- android - 如何在方法android kotlin中忽略Mockito Matcher中的参数
- vb.net - 如果条件导致异常。如何纠正?
- php - “新的 PhpOffice\PhpSpreadsheet\Spreadsheet()”如何工作