首页 > 解决方案 > Elasticsearch 未填充时间戳/无法在 kibana 可视化中更改时间戳过滤器

问题描述

我在 docker 中运行 Elasticsearch / Kibana 7.6.2

我最初使用创建新索引的 kibana upload import csv 从 csv 文件加载新索引

我在仪表板上创建了几十个可视化效果,一切都很好

我已经使用清除了索引中的数据_delete_by_query

并使用从 JSON 文件重新加载数据curl myindex/_bulk

这一切都奏效了,但@timestamp 没有填充到我的索引中,所以现在所有的可视化都找不到任何数据,因为它似乎固定在使用@timestamp 作为日期过滤器。我无法创建新的可视化,因为我无法让默认过滤器使用我的日期字段(填充得很好)

我重新加载使用

myindex/_bulk
{ "index" : {} }
{"RECORDS" : -27620,"KPI_DATE" : "2020-04-01","KPI_TYPE" : "Net Sales","DEPARTMENT" : "Sales","BRANCH" : "My Company","BRAND" : "My Company","ORDER" : "1110"}
{ "index" : {} }
{"RECORDS" : -20880,"KPI_DATE" : "2020-04-06","KPI_TYPE" : "Net Sales","DEPARTMENT" : "Sales","BRANCH" : "My Company","BRAND" : "My Company","ORDER" : "1110"}
{ "index" : {} }
{"RECORDS" : -3981.5,"KPI_DATE" : "2020-02-21","KPI_TYPE" : "NET +/-","DEPARTMENT" : "Sales","BRANCH" : "My Company","BRAND" : "My Company","ORDER" : "1110"}

数据全部导入,但 @timestamp 尚未填充

GET myindex/_search?size=0
{
  "aggs": {
    "min_date": {"min": {"field": "KPI_DATE", "format": "yyyy-MM-dd"}},
    "max_date": {"max": {"field": "KPI_DATE", "format": "yyyy-MM-dd"}},
    "min_timestamp": {"min": {"field": "@timestamp"}},
    "max_timestamp": {"max": {"field": "@timestamp"}}
  }
}

正确显示最小/最大 KPI_DATE 但 @timestamp 为空

  "aggregations" : {
    "max_date" : {
      "value" : 1.5873408E12,
      "value_as_string" : "2020-04-20"
    },
    "min_date" : {
      "value" : 1.4278464E12,
      "value_as_string" : "2015-04-01"
    },
    "max_timestamp" : {
      "value" : null
    },
    "min_timestamp" : {
      "value" : null
    }
  }

我尝试使用更新@timestamp

POST myindex/_update_by_query
{
  "query": {"match_all": {}},
  "script": {
    "source": "ctx._source._timestamp = ctx._source.KPI_DATE"
  }
}

返回一个错误,指出该字段是我无法更新的元数据字段,Field [_timestamp] is a metadata field and cannot be added inside a document. Use the index API request parameters

我的映射看起来像这样,日期看起来不错:

{
  "mapping": {
    "_doc": {
      "_meta": {
        "created_by": "ml-file-data-visualizer"
      },
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "BRANCH": {
          "type": "keyword"
        },
        "BRAND": {
          "type": "keyword"
        },
        "DEPARTMENT": {
          "type": "keyword"
        },
        "KPI_DATE": {
          "type": "date",
          "format": "iso8601"
        },
        "KPI_TYPE": {
          "type": "keyword"
        },
        "ORDER": {
          "type": "integer"
        },
        "RECORDS": {
          "type": "float"
        }
      }
    }
  }
}

它自动添加了@timestamp,我无法确定它是否已被弃用,因为我在过去几个小时内一直在阅读试图解决此问题的各种内容!

那我该怎么办?!我宁愿不从头开始!

我要么需要能够将 kibana 默认过滤器更改为不使用 @timestamp(我确定它会自动设置它),要么我需要能够让它填充我索引中的 @timestamp 字段。

我已经搜索了几个小时,觉得我一定遗漏了一些明显的东西!

提前致谢!

标签: elasticsearchkibana

解决方案


好的,部分想通了......我看不到如何在我的原始索引中填充@timestamp 字段但我可以看到 Kibana 可视化使用 kibana 索引模式,它查看 elasticsearch 索引......指定日期字段

我可以创建一个新的 kibana 索引模式,导出我的仪表板和可视化,编辑 JSON 文件以替换 kibana 索引模式的 ID(实际上设置一个静态索引模式 ID,以便我可以轻松地在 dev 和 prod 环境之间移动)然后导入我的仪表板和可视化,现在将查看新的 kibana 索引模式,该模式查看我的日期字段而不是 @timestamp 字段


推荐阅读