【问题标题】:Grafana - InfluxDB 2 - Label/Alias dataGrafana - InfluxDB 2 - 标签/别名数据
【发布时间】:2021-06-24 20:09:23
【问题描述】:

我正在将我的面板从使用 SQL 语法(从 InfluxDB 版本 1.X)迁移到新的 influx 语法(InfluxDB 版本 2)。

数据标签存在问题。它包括我用来过滤它的属性。例如,如果我从包含 2 天的范围中选择数据,它会将数据拆分。请看下面的截图:

这完全把图表弄乱了。基本代码如下所示:

from(bucket: "main")
  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)
  |> filter(fn: (r) =>
      r._measurement == "POWER" and
      r._field == "value" and
      r.device == "living_room"
  )
  |> aggregateWindow(every: v.windowPeriod, fn: sum)

显然应该只是“POWER”和“CURRENT”。

我尝试了十几种不同的方法,但都想不出一个可行的解决方案。

例如,如果我这样做:

from(bucket: "main")
  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)
  |> filter(fn: (r) =>
      r._measurement == "POWER" and
      r._field == "value" and
      r.device == "living_room"
  )
  |> aggregateWindow(every: v.windowPeriod, fn: sum)
  |> map(fn: (r) => ({ POWER: r._value }))

它说“数据没有时间字段”。

我也试过

from(bucket: "main")
  |> range(start: v.timeRangeStart, stop:v.timeRangeStop)
  |> filter(fn: (r) =>
      r._measurement == "POWER" and
      r._field == "value" and
      r.device == "living_room"
  )
  |> aggregateWindow(every: v.windowPeriod, fn: sum)
  |> yield(name: "POWER")

这也不起作用。我尝试了许多其他方法,但均未成功。

我该如何解决这个问题?

【问题讨论】:

    标签: grafana influxdb influxdb-2 flux-influxdb


    【解决方案1】:

    经过数小时的反复试验,我得出了一个可行的解决方案。我想其他用户可能会偶然发现同样的问题,因此我不会删除问题而是提供我的解决方案。

    我基本上必须映射所需的字段和标签并分配所需的标签,而不是仅仅映射应该显示的值(因为这样就丢失了日期/时间数据)。

    解决方案如下:

    from(bucket: "main")
      |> range(start: v.timeRangeStart, stop:v.timeRangeStop)
      |> filter(fn: (r) =>
          r._measurement == "POWER" and
          r._field == "value" and
          r.device == "living_room"
          )
      |> aggregateWindow(every: v.windowPeriod, fn: max)
      |> map(fn: (r) => ({ _value:r._value, _time:r._time, _field:"Power (W)" }))
    

    Power (W) 是要使用的标签/别名。

    我希望 Influx 能够提供一种更简单的方法来为所需字段设置别名。目前的方法不是很直观。

    【讨论】:

    • 如果您有多个系列,您可能希望在查询中包含标签或其他字段,如果您只想重命名该字段,那么您应该使用“r with”运算符来携带在内容上,只重命名该字段。示例:|> map(fn: (r) => ({ r with _field:"Power (W)" }))
    【解决方案2】:

    Grafana 也可以解决这个问题。您可以使用带有正则表达式的“属性覆盖”功能来覆盖标签。

    您可以在此处找到有关 grafana 正则表达式的信息: https://grafana.com/docs/grafana/latest/variables/filter-variables-with-regex/

    您的标签的解决方案可能是这样的:

    /(POWER)/
    

    (取决于您的 grafana 版本。在 8.1.1 版本上测试)

    【讨论】:

      【解决方案3】:

      有点类似于 Sebastian Kollmar 的建议,但我不确定这是否正是他的意思 - 我的一位同事想出了这个:

      只需很少或没有更改,这可能会达到您想要的效果。

      【讨论】:

        猜你喜欢
        • 2017-08-03
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 1970-01-01
        • 2021-12-22
        相关资源
        最近更新 更多