如何使用谷歌云监控监控云函数错误率?

Tho*_* P. 5 monitoring google-cloud-functions google-cloud-monitoring

当云函数在 30 分钟内超过 90% 的执行返回非正常状态代码时,我希望收到警报。

我正在过滤的系列是 cloudfunctions.googleapis.com/function/execution_count. 在所有记录中,我想统计那些满足 的记录metric.status != 'ok'。如果过去 30 分钟内的所有记录中有 90% 满足此条件,我想发出警报。

我查看了 Google Cloud 的监控查询语言文档,发现了有关比率的部分: https: //cloud.google.com/monitoring/mql/examples#qlx-ratio-ratio

我的条件是这样写的:

fetch cloud_function
| metric 'cloudfunctions.googleapis.com/function/execution_count'
| { filter metric.status != 'ok'
  ; ident }
| group_by [resource.function_name]
| ratio
| window 30m
| condition ratio >= 0.9 '1'
Run Code Online (Sandbox Code Playgroud)

它似乎有效,并且图表显示了正确的值。但是,似乎只要函数返回错误代码,即使有其他成功执行来补偿问题,也会引发警报。

例如,这是发出警报时的指标图表,我在“监控”>“警报”> 中获得该图表(单击“事件”部分中的最后一个警报) 事件发生时的图表

警报中报告的功能是processPurchase

我缺少什么可能会导致问题吗?查看图表,似乎不应触发警报。然而,我有关于警报的事件和通知。几分钟后就解决了。

Jos*_*llo 3

我不认为\xe2\x80\x99tratio 可能是你的最佳选择,因为ratio 计算两个对齐的输入表的值列的比率。

\n

我想你可以尝试使用以下代码:

\n
fetch cloud_function\n| metric \'cloudfunctions.googleapis.com/function/execution_count\'\n| align rate(30m)\n| every 30m\n| group_by [metric.status],\n    [value_execution_count_percentile: percentile(value.execution_count, 90)]\n
Run Code Online (Sandbox Code Playgroud)\n

正如你所看到的 I\xe2\x80\x99m 使用相同的指标cloudfunctions.googleapis.com/function/execution_count\n但使用 30 分钟的周期和 90% 的百分比而不是条件比率。

\n

编辑1

\n

我创建了一个简单的云函数来生成随机错误,

\n
import random\ndef hello_world(request):\n    request_json = request.get_json()\n    x = random.randint(1,2)\n    if x%2 ==0:\n        raise NameError("my error x.x")\n    else:\n        return f\'Hello World!\'\n
Run Code Online (Sandbox Code Playgroud)\n

然后我使用您发布的指标作为基础来生成我的指标:

\n
fetch cloud_function\n| metric \'cloudfunctions.googleapis.com/function/execution_count\'\n| { t_0:\n      filter metric.status != \'ok\'\n      | align delta()\n      | group_by [resource.function_name],\n          [value_execution_count_aggregate: aggregate(value.execution_count)]\n  ; t_1:\n      ident\n      | align delta()\n      | group_by [resource.function_name],\n          [value_execution_count_aggregate: aggregate(value.execution_count)] }\n| ratio\n| window 5m\n| condition ratio >= 0.5 \'1\'\n\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

我只是将比例移至ratio >= 0.5 \'1\'而不是 0.9,并将窗口减小到 5m,以免花费一整天的时间来获取数据。

\n

但在我的警报配置中,我使用了:\n如果所有时间序列都违反,则条件触发\n通过在查询编辑器中使用条件运算符编辑阈值 = 5

\n

在此输入图像描述

\n

使用此配置,I\xe2\x80\x99m 仅在满足条件时才会收到警报,而不是在函数返回错误代码时立即收到警报。

\n