elasticsearch - 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 字段。
我已经搜索了几个小时,觉得我一定遗漏了一些明显的东西!
提前致谢!
解决方案
好的,部分想通了......我看不到如何在我的原始索引中填充@timestamp 字段但我可以看到 Kibana 可视化使用 kibana 索引模式,它查看 elasticsearch 索引......指定日期字段
我可以创建一个新的 kibana 索引模式,导出我的仪表板和可视化,编辑 JSON 文件以替换 kibana 索引模式的 ID(实际上设置一个静态索引模式 ID,以便我可以轻松地在 dev 和 prod 环境之间移动)然后导入我的仪表板和可视化,现在将查看新的 kibana 索引模式,该模式查看我的日期字段而不是 @timestamp 字段
推荐阅读
- php - PHP插入并获取范围标识
- c# - 如何在线保护 SQL Server 数据库
- python - 导入错误:没有名为“secrets”的模块 - python manage.py 在拉入 Digital Ocean 后无法正常工作
- r - 在 DATE 和 ID 之后对变量进行排名
- python - 输入登录名和密码
- android - 避免在错误代码列表中插入项目
- javascript - React Hook Form - 手动更新预注册对象中的一些字段
- c# - 无法在 Ubuntu 主机上运行已编译的 .Net Core 应用程序
- mysql - 我可以在触发器中进行查询吗?
- azure-service-fabric - 同一个 Service Fabric Actor 应用程序中是否有大量的 Actor?