通过比较两次测量来触发警报
Kapacitor 允许您基于两个或多个测量值创建警报。在本指南中,我们将比较两个测量值 m1 和 m2,并在这两个测量值不同时触发警报。作为额外奖励,我们还将包含一个查询,可用于绘制两个测量值之间的百分比差异图。
比较测量值并创建警报
以下 TICKscript 流式传输 m1 和 m2 测量值,将它们连接,进行比较,并在两个测量值不同时触发警报。
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" }}')绘制测量值之间的百分比差异图
使用 TICKscript 中定义的 data 流来计算 m1 和 m2 之间的差值,将其转换为浮点数,将该差值除以 m1 和 m2 的实际值,然后乘以 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()这可用于创建类似以下的图表

完整的 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()此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Kapacitor 和本文档提供反馈和错误报告。要获取支持,请使用以下资源: