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

wwodge7n  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(298)

我正在查看logstash的时间戳数据,它似乎关闭了4个小时。同样,在摄入过程中,我有一个日期时间: yyyyMMdd HH:mm 这是美国东部时间(纽约)当地的,但在同一个4小时内被视为关闭。
我不确定logstash是如何确定当前时间的,但我想它可能是特定于主机的?当我看着我的机器 date 返回星期一10月19日17:32:25 utc 2020这是一个4小时的差异,从我目前(13:32),但机器是准确的。
我想的是,在这个logstash机器上,对@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
  ]
}

我注意到的一件事是,bustime-response.vehcile.tmstmp的日期会话将iso日期创建为utc,而接收的日期是一个简单的本地日期 yyyyMMdd HH:mm 我需要转换成东部时区的格式。

vsdwdz23

vsdwdz231#

如果我理解正确的话,你正在使用 date 与字段一起过滤 tmstpm 创建 @timestamp 领域。
格式 yyyyMMdd HH:mmtmstpm 字段中没有任何有关与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"
}

这条路 `@timestamp` 将使用值创建字段 `2020-10-19T15:43:00Z` 当地时间是11:43时的utc时间。
你也可以使用 `timezone => "-0400"` 

相关问题