【问题标题】:InfluxDB 2.0 - How to convert double to dateTime:RFC3339InfluxDB 2.0 - 如何将双精度转换为 dateTime:RFC3339
【发布时间】:2021-01-26 10:15:56
【问题描述】:

我正在使用 InfluxDB 刮板尝试 https://github.com/percona/mongodb_exporter。我发现它被插入为double

我的目标是获取最后一个数据点并将其转换为dateTime:RFC3339

环境:

  • influxdb:v2.0.1
  • mongodb_exporter:v0.20.1

mongodb_exporter 指标

# HELP mongodb_mongod_replset_member_election_date The timestamp the node was elected as replica leader
# TYPE mongodb_mongod_replset_member_election_date gauge
mongodb_mongod_replset_member_election_date{name="mongo-sh0-0.mongo-sh0.default.svc.cluster.local:27017",set="rs0",state="PRIMARY"} 1.611023449e+09

我尝试了很多方法,但都不起作用。

试试 1

from(bucket: "mongo-swag")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mongodb_mongod_replset_member_election_date")
  |> filter(fn: (r) => r["_field"] == "gauge")
  |> last()
  |> toInt()
  |> toTime()

错了。获取1970-01-01T00:00:01.611023449Z。在这种情况下应该是2021-01-19T02:30:49+00:00

试试 2

from(bucket: "mongo-swag")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mongodb_mongod_replset_member_election_date")
  |> filter(fn: (r) => r["_field"] == "gauge")
  |> last()
  |> toString()
  |> toTime()

错误:

 runtime error @8:6-8:14: toTime: failed to evaluate map function: parsing time "1611023449" as "2006-01-02": cannot parse "023449" as "-"

试试 3

from(bucket: "mongo-swag")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mongodb_mongod_replset_member_election_date")
  |> filter(fn: (r) => r["_field"] == "gauge")
  |> last()
  |> map(fn:(r) => ({ r with _value: time(v: r._value) }))

错误:

 runtime error @6:6-6:59: map: failed to evaluate map function: cannot convert float to time

【问题讨论】:

    标签: prometheus influxdb influxql


    【解决方案1】:

    https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/built-in/transformations/type-conversions/totime/

    toTime() 假设所有数字输入值都是纳秒纪元时间戳。

    因为epoch时间是second,所以需要转换成nanosecond

    map(fn: (r) => ({ r with _value: r._value * 1000 * 1000 * 1000 }))
    

    完整查询

    from(bucket: "mongo-swag")
      |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
      |> filter(fn: (r) => r["_measurement"] == "mongodb_mongod_replset_member_election_date")
      |> last()
      |> toInt()
      |> map(fn: (r) => ({ r with _value: r._value * 1000 * 1000 * 1000 }))
      |> toTime()
    

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 2010-10-16
      • 2012-09-23
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多