elasticsearch Logstash似乎正在接收时间戳不正确的数据?
我正在查看logstash的时间戳数据,它似乎关闭了4个小时。同样,在摄入过程中,我有一个datetime: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对象有一种误解。我最近的
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表示输出相比,添加了大量摄取的数据。这是一个非常棒的答案。这是一个非常棒的答案。