通过比较两个指标触发警报
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 和本文档提供反馈和错误报告。要获得支持,请使用以下资源