为什么我不能在Elastic Search索引模板中将@TimestampMap到_Timestamp?

2ledvvac  于 2022-09-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(141)

我将Logstash与Elasticearch一起使用,因此,@Timestamp字段是必填的文档字段。@timestamp字段的值始终为ISO8601格式。

来自Logstash的一些Events/Documents没有特殊的timestamp字段(请不要将其与_Timestamp字段混淆;这是从grok解析获得的另一个字段),因此我决定使用以下索引模板将@timestampMap到_timestamp

{
  "settings" : {...},
  "template" : "logstash-myindex-*",
  "mappings": {
    "_id" : {
      "path": "myid"
    },
    "_timestamp" : {
      "enabled" : true,
      "stored" : true,
      "path" : "@timestamp",
      "format": "YYYY-MM-dd'T'HH:mm:ss.SSS'Z'"
    },
    "property" : {
      "@timestamp" : {
        "type": "date",
        "format": "YYYY-MM-dd'T'HH:mm:ss.SSS'Z'"
      },
      "myid" : {
        "type": "string",
        "index": "not_analyzed"
      }
    }
  }
}

当我执行搜索时:

POST logstash-myindex-2014.12.16/_search
{
  "fields": ["_timestamp", "_source"],
  "query": {
    "match_all": {}
  }
}

我返回的结果是这样的(只显示了一个示例文档):

{
    "_id": "AUeo39n78xpe_2ggb", 
    "_index": "logstash-myindex-2014.12.16", 
    "_score": 1.0, 
    "_source": {
      "@timestamp": "2014-12-16T13:47:09.703Z", 
      "@version": "1", 
      "myid": "AUeo39n78xpe_2ggb"
      "timestamp": 1418737629,
    }, 
    "_type": "logs",
    "fields": {
      "_timestamp": 1418737629000
    }
}

好的,在这里您可以看到_idpath属性正在工作。它获取字段myid的值并将其应用于_id

现在,继续到_timestamp。这就是事情变得奇怪的地方。它不仅不获取@timestamp(2014-12-16T13:47:09.703Z)的值,而是获取特殊时间戳字段的值(如上所述,这是通过grok解析原始日志消息获得的字段),然后将其转换为毫秒。

期望的结果是_timestamp将采用@timestamp保持的任何值。有人能告诉我这是怎么回事吗?以前有人经历过这种情况吗?在名为timestamp的字段和ElasticSearch的_timestamp字段之间是否存在某种冲突?

juud5qan

juud5qan1#

在Elasticearch内部,所有日期都存储为Epoch毫秒-因此_timestamp格式看起来很好。

使用Epoch converter将时间戳1418737629000转换为Tue, 16 Dec 2014 13:47:09 GMT

这看起来非常接近您的@timestamp值-毫秒已被丢弃,仅此而已。有没有可能是时区的改变让你感到不安?

相关问题