【问题标题】:Gawk mktime() generates incorrect Timestamp for InfluxDBGawk mktime() 为 InfluxDB 生成不正确的时间戳
【发布时间】:2016-11-22 23:40:30
【问题描述】:

我正在使用 curl 将一些数据解析到 InfluxDB。数据点是 Netflow 记录,我正在尝试将 Netflow 时间戳转换为 InfluxDB 所需的精度格式。

我原来的时间戳是这样的:

2016-11-22 04:23:25.0

我正在使用 sed 将 '-' 和 ':' 替换为空格:

sed 's/-/ /g' | \
sed 's/:/ /g' | \

结果:

2016 11 22 04 23 25.0

然后我使用这些字段传递给 gawk mktime()。这似乎生成了一个正确的时间戳,但是当我用 Grafana 查看原始记录时,它们都显示了 1969 年的时间戳。我确定有什么明显的我忽略了?

【问题讨论】:

    标签: bash curl awk sed influxdb


    【解决方案1】:
    1. 没有理由使用 Sed:

      $ echo '2016-11-22 04:23:25.0' | awk '{gsub(/[-:]/, FS); print mktime($0)}'
      1479810205
      
    2. 生成的时间戳是正确的:

      $ date --date=@1479810205
      Tue, Nov 22, 2016  4:23:25 AM
      

    【讨论】:

    • 我修改了 awk 语句以匹配你的我没有得到不同的结果。我回去查看了 InfluxDB 行协议文档,发现时间戳比他们提供的示例短得多。我相信 mktime() 正在生成具有秒精度的时间戳,而不是 InfluxDB 默认的纳秒。我更新了我的 curl 语句以指定 Influx API 的秒精度,这似乎解决了我的问题。