我在谷歌云中创建了一个函数,每 10 分钟触发一次并向 postgresql 数据库发送查询。它返回一个值。然后我使用 MQL 查询创建了一个警报策略:
fetch cloud_function
| metric 'logging.googleapis.com/user/FUNCTION-NAME'
| align delta(10m)
| group_by [], [value_mean: mean(value.NAME)]
| absent_for (1h)
我感兴趣的是当没有值或值在超过 1 小时的时间内保持不变时收到警报。上面的查询没有发送警报,即使它在超过 12 小时内具有相同的值。也许我的印象是absent_for也说明了价值是相同的。
如何更改我的查询,以便在该值在超过 1 小时的时间内保持不变时能够收到通知?
编辑 2023 年 11 月 10 日 我将查询更改为:
{
fetch cloud_function
| metric 'logging.googleapis.com/user/FUNCTION-NAME'
| group_by [], mean(val())
| align next_younger(10m)
;
fetch cloud_function
| metric 'logging.googleapis.com/user/FUNCTION-NAME'
| group_by [], mean(val())
| align next_older(10m)
}
| outer_join 0,0
| sub
| condition gt(val(), 0)
但现在我面临的问题是显示的最新值是-800K,这不允许触发条件。当前值后面的值是正确的,仅显示差异(2、5、0 等)。所以现在即使我在图表上得到 0 值,也不会触发警报。
我终于找到了解决方案:
fetch cloud_function
| { t_0:
metric 'logging.googleapis.com/user/FUNCTION-NAME'
| align delta()
| group_by 10m, [value_Collector_mean: mean(value.Height)]
; t_1:
metric 'logging.googleapis.com/user/FUNCTION-NAME'
| align delta()
| group_by 20m,
[value_BTC_current_db_max_block_height_mean:
mean(value.Height)] }
| join
| value t_0 - t_1
| condition eq(val(),0)
我将重新测试条件设置为 30 分钟,以免每次等于 0 时都得到它。希望这对其他人有帮助。