kibana:将脚本字段设置为时间字段名

lx0bsm1f  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(717)

我有一个基于时间的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的,希望有人能帮我。
-托比

igetnqfo

igetnqfo1#

解决方法:kibana管理员必须重新索引索引,并将时间戳的类型设置为date。现在时间戳在创建模式时是可见的,并且可以选择作为时间字段名。

相关问题