Google cloud platform 谷歌云功能超时如何通知?

Google cloud platform 谷歌云功能超时如何通知?,google-cloud-platform,google-cloud-functions,Google Cloud Platform,Google Cloud Functions,我已经在Stackdriver中启用了通知,并且收到了异常通知电子邮件 问题是我没有收到任何超时通知 当Google Cloud函数因超时而终止时,有什么方法可以得到通知吗?即使超时没有被报告为错误,您仍然可以为超时日志条目设置一个度量,然后针对超过零阈值的度量发出警报 从GCP控制台,转到Stackdriver日志查看器(/logs/viewer),并构建如下过滤器: 第三行是“包含”文本过滤器。超时消息始终包含此文本。您可以根据需要添加其他内容或修改 单击创建度量。给度量命名为“函数超时”,

我已经在Stackdriver中启用了通知,并且收到了异常通知电子邮件

问题是我没有收到任何超时通知


当Google Cloud函数因超时而终止时,有什么方法可以得到通知吗?

即使超时没有被报告为错误,您仍然可以为超时日志条目设置一个度量,然后针对超过零阈值的度量发出警报

  • 从GCP控制台,转到Stackdriver日志查看器(/logs/viewer),并构建如下过滤器:
  • 第三行是“包含”文本过滤器。超时消息始终包含此文本。您可以根据需要添加其他内容或修改

  • 单击创建度量。给度量命名为“函数超时”,并确保类型为counter。您可以将可选字段留空。提交表单,您应该被重定向到/logs/metrics

  • 在“用户定义的指标”下,您应该看到新的指标。单击右侧的三点按钮,然后选择从度量创建警报

  • 为警报策略指定一个有意义的名称。在“目标”下,您还可能会收到一些关于无法生成线图的红色文本。单击有用的链接,将对齐器切换为mean,将聚合器切换为none。然后在配置下,将条件设置为“高于”,阈值设置为“0”,并设置为“最近值”

  • 根据需要继续构建通知和文档。确保您添加了通知通道,以便收到警报。UI应该在每个字段上包含提示


  • 更多详细信息请参见。

    提出了一种解决方法,在云函数超时之前强制执行一个错误。就工作流而言,我认为这更容易控制,并且能够将所有错误整合到一个地方,而不必在其他地方配置设置

    基本上类似于下面的代码片段:

    exports.cloudFunction = async (event, context, callback) => {
        try {
            const timeout = setTimeout(function(){ 
                throw new Error(`Timeout: ${event}`); 
            }, 58000); // 2sec buffer off the default 60s timeout
    
            // DO SOMETHING
    
            clearTimeout(timeout);
            callback();
    
        } catch(e) {
    
            // HANDLE ERROR
    
            callback(e);
        }
    }
    
    • 使用仪表板顶部的搜索框导航到“创建警报策略”
    • 在“您想要跟踪什么?”下,单击“添加条件”
    • 按如下方式配置新条件:

    • 单击“添加”
    • 单击“下一步”
    • 选择通知频道或创建新的通知频道
    • 我未选中“事件解决通知”
    • 单击“下一步”
    • 提供描述性警报名称和可选文档
    • 单击“保存”
    • 确保在策略顶部看到“已启用”一词以及绿色复选标记

    这听起来像是超时被记录为非错误这一事实的副作用。这是一个已知的问题,如果您提交bug报告以添加您的声音,可能会有所帮助。Firebase对此有一个表单,但我不知道云。我删除了
    resource.labels.function\u name=“[YOUR\u function\u name\u HERE]”
    行,因此它适用于所有部署的谷歌云功能。您仍然可以恢复相同的数据,因为资源类型具有funciton_名称作为标签。缺点是日志量更大,但通常我希望在我的任何功能超时时收到警报。
    exports.cloudFunction = async (event, context, callback) => {
        try {
            const timeout = setTimeout(function(){ 
                throw new Error(`Timeout: ${event}`); 
            }, 58000); // 2sec buffer off the default 60s timeout
    
            // DO SOMETHING
    
            clearTimeout(timeout);
            callback();
    
        } catch(e) {
    
            // HANDLE ERROR
    
            callback(e);
        }
    }