我尝试填充的功能是在kibana中创建一个度量标准,显示“未经验证”的用户数。 我发送用户注册时发送的日志,然后发送用户验证时的日志。
所以我想要的计数是注册人数和经过验证的人数之间的差异。
在kibana,我不能做这样的数学运算,所以我找到了一个解决方法: 我添加了一个名为“unvalidated”的“脚本字段”,当用户注册时它等于1,而当用户验证他的帐户时则为-1。 “未经验证”字段的总和应该是未经验证的用户数。
这是我在脚本字段中定义的脚本:
doc['ctxt_code'].value == 1 ? 1 : doc['ctxt_code'].value == 2 ? -1 : 0
使用:
ctxt_code 1作为注册日志
ctxt_code 2作为验证日志
当我的所有日志都有“ctxt_code”时,此设置很有效,但是当没有此字段的日志被推送时,kibana会抛出以下错误:
Field [ctxt_code] used in expression does not exist in mappings
我无法理解这个错误,因为kibana说:
If a field is sparse (only some documents contain a value), documents missing the field will have a value of 0
情况就是这样。
任何人都有线索?
答案 0 :(得分:2)
没有ctxt_code
字段的日志就可以了......但是你必须在索引中有这个字段的映射。我看到你用logstash-*
查询了多个索引,所以你可能会找到一个没有它的索引。
您可以在所有索引中包含您的字段的映射。只需进入Sense并使用:
PUT logstash-*/_mappings/[your_mapping_name]
{
"properties": {
"ctxt_code": {
"type": "short", // or any other numeric type, including dates
"index": "not_analyzed" // Only works for non-analyzed fields.
}
}
}
如果您愿意,可以从命令行执行此操作:CURL -XPUT 'http://[elastic_server]/logstash-*/_mappings/[your_mapping_name]' -d '{ ... same JSON ... }'