InfluxDB - 状态持续时间的聚合数据

标签 influxdb kapacitor

我在 InfluxDB 中有一个测量来跟踪系统的状态。例如,考虑以下措施:

03/22/18 00:00:00AM    STATUS_A
03/22/18 09:00:00AM    STATUS_B
03/22/18 13:00:00AM    STATUS_C
03/22/18 18:00:00AM    STATUS_B
03/22/18 19:00:00AM    STATUS_D
03/22/18 21:00:00AM    STATUS_A

我现在需要做的是导出系统每天处于每个状态的时间。在上面的例子中,期望的结果是这样的

STATUS_A    12h (from 00:00 to 09:00 and from 21:00 to 24:00)
STATUS_B    5h (from 09:00 to 13:00 and from 18:00 to 19:00)
STATUS_C    5h (from 13:00 to 18:00)
STATUS_D    2h (from 09:00 to 21:00)

我对 TICK 堆栈非常陌生,所以我可能会遗漏一些非常基本的东西。我正在考虑使用 Kapacitor 来创建聚合结果,但我真的不知道如何获取结果

最佳答案

您提到了 TICK 堆栈,所以我假设您使用的是 InfluxDB 版本 1。

在 InfluxDB 中报告给定状态的总持续时间是可行的,但只能在 Flux 中报告,而不是在 InfluxQL 中(很容易)。 您可以尝试以下步骤:

  1. 通过配置更改在 v1.8 中启用 Flux here

  2. 样本通量可以是:

    from(bucket: "yourDatabaseName/autogen") |> 范围(开始: 2018-03-20T00:00:00Z, 停止: 2018-03-20T23:59:59Z) |> 过滤器(fn: (r) => r._measurement == "yourMeasurementName") |> stateDuration(fn: (r) => r._value == "STATUS_A", 列: "state", 单位: 1h)

尽管社区已经等待了一段时间,但在 InfluxQL 中仍然无法做到这一点。查看更多详情here .

关于InfluxDB - 状态持续时间的聚合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49550199/

相关文章:

未找到 statsd influxdb 保留策略

influxdb - 如何使用刻度脚本 (Kapacitor) 更改标签名称?

alert - 如果出现故障,我如何仅使用 kapacitor 发送一个警报?

linux - 如何以编程方式在 influxdb 中创建数据库和用户?

influxdb - 如何在 influxdb 选择查询中格式化时间

java - 如何在java中获取当前时间(以纳秒为单位)?

go - kapacitor不运行表明失败

influxdb - 如何从缺少字段的 Influx 数据库中查询?

docker - 使用入口点脚本初始化 influxdb2 桶