Documentation

通过比较两个测量值触发警报

Kapacitor 允许您基于两个或多个测量值创建警报。 在本指南中,我们将比较两个测量值,m1m2,并在这两个测量值不同的时候创建一个警报。 除此之外,我们还将包含一个可以用于绘制这两个测量值之间百分比差异的查询。

比较测量并创建警报

以下的 TICKscript 流式处理 m1m2 测量值,连接它们,比较它们,并在两个测量值不同的情况下触发警报。

var window_size = 1m

// Stream m1
var m1 = stream
  |from()
    .measurement('m1')
  |window()
    .period(window_size)
    .every(window_size)
    .align()
  |count('value')
    .as('value')

// Stream m2
var m2 = stream
  |from()
    .measurement('m2')
  |window()
    .period(window_size)
    .every(window_size)
    .align()
  |count('value')
    .as('value')

// Join m1 and m2
var data = m1
    |join(m2)
        .as('m1', 'm2')

// Compare the joined stream and alert when m1 and m2 values are different
data
  |alert()
    .crit(lambda: "m1.value" != "m2.value")
    .message('values were not equal m1 value is {{ index .Fields "m1.value" }} m2 value is {{ index .Fields "m2.value" }}')

绘制测量值之间百分比差异的图

使用上面定义的 data 数据流来计算 m1m2 之间的差异,将其转换为浮点数,将该差异除以 m1m2 的实际值,然后将其乘以 100。这将为每个给出百分比差异。将差异存储为 diffs 测量中的新字段:

data
  // Calculate the difference between m1 and m2
  |eval(lambda: "m1.value" - "m2.value")
    .as('value_diff')
    .keep()
  // Calculate the % difference of m1 and m2
  |eval(lambda: (float("value_diff") / float("m1.value")) * 100.0, lambda: (float("value_diff") / float("m2.value")) * 100.0)
    .as('diff_percentage_m1', 'diff_percentage_m2')
  // Store the calculated differences in the 'diffs' measurement
  |influxDBOut()
    .measurement('diffs')
    .database('mydb')
    .create()

这可以用于创建类似于的可视化:

Graph the percentage difference between two measurements

完整的 TICKscript

下面是完整的、未注释的TICKscript:

var window_size = 1m

var m1 = stream
  |from()
    .measurement('m1')
  |window()
    .period(window_size)
    .every(window_size)
    .align()
  |count('value')
    .as('value')

var m2 = stream
  |from()
    .measurement('m2')
  |window()
    .period(window_size)
    .every(window_size)
    .align()
  |count('value')
    .as('value')

var data = m1
  |join(m2)
    .as('m1', 'm2')

data
  |alert()
    .crit(lambda: "m1.value" != "m2.value")
    .message('values were not equal m1 value is {{ index .Fields "m1.value" }} m2 value is {{ index .Fields "m2.value" }}')

data
  |eval(lambda: "m1.value" - "m2.value")
    .as('value_diff')
    .keep()
  |eval(lambda: (float("value_diff") / float("m1.value")) * 100.0, lambda: (float("value_diff") / float("m2.value")) * 100.0)
    .as('diff_percentage_m1', 'diff_percentage_m2')
  |influxDBOut()
    .measurement('diffs')
    .database('mydb')
    .create()


Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: