elasticsearch Logstash似乎正在接收时间戳不正确的数据?,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Logstash似乎正在接收时间戳不正确的数据?,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Logstash似乎正在接收时间戳不正确的数据?

elasticsearch Logstash似乎正在接收时间戳不正确的数据?,elasticsearch,logstash,elasticsearch,Logstash,我正在查看logstash的时间戳数据,它似乎关闭了4个小时。同样,在摄入过程中,我有一个datetime:yyyyMMdd HH:mm,它是美国东部时间(纽约)本地的,但在同样的4个小时内被传送为off 我不确定logstash如何确定当前时间,但我认为它可能是特定于主机的?查看我的机器时,运行date返回周一10月19日17:32:25 UTC 2020,这与我当前的时间(13:32)相差4小时,但机器是准确的 我想的是,在这个日志存储机器上,对@timestaamp对象有一种误解。我最近的

我正在查看logstash的时间戳数据,它似乎关闭了4个小时。同样,在摄入过程中,我有一个datetime:
yyyyMMdd HH:mm
,它是美国东部时间(纽约)本地的,但在同样的4个小时内被传送为off

我不确定logstash如何确定当前时间,但我认为它可能是特定于主机的?查看我的机器时,运行
date
返回周一10月19日17:32:25 UTC 2020,这与我当前的时间(13:32)相差4小时,但机器是准确的

我想的是,在这个日志存储机器上,对@timestaamp对象有一种误解。我最近的日志记录显示:2020年10月19日09:33:00.000,这是4个小时的不同

我假设时间戳是在logstash中设置的,而不是在elastic中设置的,但我可以看出,可能存在某种误解

我目前正在使用最新的docker容器,它们都是7.9.2。摄取的数据时间戳是不正确的,同样地,我注意到一些摄取的数据以上述格式摄取,但没有设置的日期时间进行调整

我期望的最终目标是:修复这种离散性,然后索引报告的时间戳上的数据,而不是curl请求的时间

摄取的数据:

// http://realtime.portauthority.org/bustime/api/v3/getvehicles?key=hC5Di7VSYU3hjmw2gAqHtKdec&rt=65,67,69,7,71,71A,71B,71C,71D,74&format=json

{
  "bustime-response": {
    "vehicle": [
      {
        "vid": "6141",
        "rtpidatafeed": "Port Authority Bus",
        "tmstmp": "20201019 11:53",
        "lat": "40.45320129394531",
        "lon": "-79.7513656616211",
        "hdg": "176",
        "pid": 7788,
        "rt": "67",
        "des": "Downtown",
        "pdist": 0,
        "dly": false,
        "spd": 0,
        "tatripid": "9333",
        "origtatripno": "11348066",
        "tablockid": "067 -066",
        "zone": "",
        "mode": 0,
        "psgld": "HALF_EMPTY"
      }
    ],
    "error": [
      {
        "rt": "65",
        "msg": "No data found for parameter"
      },
      {
        "rt": "7",
        "msg": "No data found for parameter"
      }
    ]
  }
}
来自Kibana的JSON条目:

{
  "_index": "transit-pittsburgh-2020.10.19",
  "_type": "_doc",
  "_id": "y60WQnUBgX7z6iMwvAaJ",
  "_version": 1,
  "_score": null,
  "_source": {
    "@timestamp": "2020-10-19T14:19:00.000Z",
    "bustime-response": {
      "error": [
        {
          "msg": "No data found for parameter",
          "rt": "65"
        },
        {
          "msg": "No data found for parameter",
          "rt": "7"
        },
        {
          "msg": "No data found for parameter",
          "rt": "71"
        }
      ],
      "vehicle": {
        "rtpidatafeed": "Port Authority Bus",
        "pdist": 72453,
        "tablockid": "067 -066",
        "hdg": "66",
        "vid": "6141",
        "lat": "40.433110918317524",
        "rt": "67",
        "dly": false,
        "origtatripno": "11348056",
        "bk_tmstmp": "20201019 14:19",
        "tatripid": "9249",
        "mode": 0,
        "tmstmp": "20201019T14:19",
        "pid": 7294,
        "psgld": "FULL",
        "lon": "-79.7984379359654",
        "spd": 20,
        "zone": "",
        "geo_location": "40.433110918317524,-79.7984379359654",
        "des": "CCAC Boyce"
      }
    },
    "@version": "1"
  },
  "fields": {
    "@timestamp": [
      "2020-10-19T14:19:00.000Z"
    ],
    "bustime-response.vehicle.tmstmp": [
      "2020-10-19T14:19:00.000Z"
    ]
  },
  "sort": [
    1603117140000
  ]
}

我注意到的一件事是,bastime-response.vehcile.tmstmp的日期对话正在创建一个ISO日期作为UTC,而接收的日期是一个简单的本地
yyyyMMdd HH:mm
格式,我需要将其转换为EST时区。

如果我理解正确,您正在使用
Date
过滤器和字段
tmstpm
创建
@timestamp
字段

tmstpm
字段的格式
yyyyymmdd HH:mm
没有任何有关UTC偏移量的信息,因此,如果您仅对该字段使用
date
过滤器,而不指定该时间有偏移量,则该时间将被视为UTC时间

使用您的示例,
20201019 11:53

date {
    match => ["tmstmp", "yyyyMMdd HH:mm"]
}
Losgtash将创建
@timestamp
字段作为
2020-10-19T11:43:00Z
,并且在您的时区中,这个时间是
2020-10-19T07:43:00Z
,这是错误的

您需要告诉logstash您的原始时间字段与UTC位于不同的时区

date {
    match => ["tmstmp", "yyyyMMdd HH:mm"]
    timezone => "America/New_York"
}
这样,将使用值
2020-10-19T15:43:00Z
创建
@timestamp
字段,该值是当地时间为11:43时的UTC时间


如果我理解正确,您也可以使用
timezone=>“-0400”

来创建
@timestamp
字段

tmstpm
字段的格式
yyyyymmdd HH:mm
没有任何有关UTC偏移量的信息,因此,如果您仅对该字段使用
date
过滤器,而不指定该时间有偏移量,则该时间将被视为UTC时间

使用您的示例,
20201019 11:53

date {
    match => ["tmstmp", "yyyyMMdd HH:mm"]
}
Losgtash将创建
@timestamp
字段作为
2020-10-19T11:43:00Z
,并且在您的时区中,这个时间是
2020-10-19T07:43:00Z
,这是错误的

您需要告诉logstash您的原始时间字段与UTC位于不同的时区

date {
    match => ["tmstmp", "yyyyMMdd HH:mm"]
    timezone => "America/New_York"
}
这样,将使用值
2020-10-19T15:43:00Z
创建
@timestamp
字段,该值是当地时间为11:43时的UTC时间


您也可以使用
timezone=>“-0400”

Logstash使用主机时间设置时间戳,如果您未指定此时间具有时区偏移,则它将被视为UTC时间,因为elasticsearch将所有日期存储为UTC。使用Kibana时,它将使用浏览器默认时间,并显示时区中的对应时间。你在哪里看到了差异?你能分享一个你正在摄取的日志和你的管道配置的例子吗?是的,我能分享它。当然可以我过几天就把它寄出去minutes@leandrojmp在kibana中添加了摄取数据与json表示输出的转储。Logstash使用主机时间设置时间戳,如果未指定此时间具有时区偏移,则将其视为UTC时间,因为elasticsearch将所有日期存储在UTC中。使用Kibana时,它将使用浏览器默认时间,并显示时区中的对应时间。你在哪里看到了差异?你能分享一个你正在摄取的日志和你的管道配置的例子吗?是的,我能分享它。当然可以我过几天就把它寄出去minutes@leandrojmp与kibana中的json表示输出相比,添加了大量摄取的数据。这是一个非常棒的答案。这是一个非常棒的答案。