我有一个基于时间的kibana,时间字段是一个类型[number](例如1599026948),称为timestamp。时间字段名没有设置,我需要将其设置为timestamp。由于时间戳的格式(数字)不好,我创建了一个名为datetime的脚本字段来获得更好的日期格式。脚本字段datetime的代码:
doc['timestamp'].value * 1000;
它的工作原理如下:
Samples
Input Output
1599027119802 Sep 2, 2020 @ 08:11:59.802
1577833200000 Jan 1, 2020 @ 00:00:00.000
1609455599999 Dec 31, 2020 @ 23:59:59.999
当我查看“discover”选项卡时,我得到警告:“2个碎片中的1个失败您看到的数据可能不完整或错误。”
警告详细信息:
script_exception at shard 0 index MY-INDEX-PATTERN node JgWo2yNxRBeR9mEuYLpK2R
Type script_exeption
Reason runtime error
Script stack org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:94)
org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:41)
doc['timestamp'].value * 1000;
^---- HERE
Script doc['timestamp'].value * 1000;
Lang painless
Caused by type illegal_argument_exeption
Caused by reason No field found for [timestamp] in mapping with types []
我无视警告,继续前进。我需要将时间字段名设置为新字段datetime。
我在控制台中尝试了以下代码:
POST .kibana/_update/MY-INDEX-PATTERN
{
"doc": {
"index-pattern": {
"timeFieldName" : "datetime"
}
}
}
我得到以下结果:
{
"_index" : ".kibana",
"_type" : "_doc",
"_id" : "MY-INDEX-PATTERN",
"_version" : 8,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 887,
"_primary_term" : 4
}
看起来它起作用了,但是当我尝试在 Jmeter 板中创建基于时间的组件或只是更改时间过滤器时,它不起作用,我得到与上面相同的警告(2个碎片中的1个失败了..)
我想时间字段名没有设置为datetime。
我觉得我什么都试过了,但都没用。我真的想避免重新编制索引,还是这是唯一的解决方案?我是新来Kibana的,希望有人能帮我。
-托比
1条答案
按热度按时间igetnqfo1#
解决方法:kibana管理员必须重新索引索引,并将时间戳的类型设置为date。现在时间戳在创建模式时是可见的,并且可以选择作为时间字段名。