通过函数计算处理报警通知

当云监控Webhook现有的报警通知渠道(钉钉、企业微信、飞书和Slack),以及报警投递渠道(弹性伸缩、日志服务)和轻量消息队列(原 MNS)不能满足您的需求时,可以通过函数计算编写代码来实现更为广泛的需求。

前提条件

  • 请确保您已开通函数计算服务。具体操作,请参见开通函数计算服务

  • 如果您希望云监控通知渠道以外的工具也能收到报警通知,请提前准备好他们的Webhook地址。

应用场景

  • 通过函数计算对报警通知内容的格式进行处理,来实现云监控通知渠道以外的工具接收报警通知。

  • 通过函数计算对报警通知的内容进行处理,来实现云监控报警通知内容的个性化。

步骤一:在函数计算中部署代码函数

  1. 创建服务。

    输入服务名称,其他参数均使用默认值。具体操作,请参见创建服务

  2. 创建函数。

    基本设置区域,输入函数名称请求处理程序类型选择处理事件请求,其他参数均使用默认值。具体操作,请参见创建函数

    本文以运行环境Java 8为例进行介绍。

    说明

    函数高级配置区域的请求处理程序函数入口)必须与函数代码对应,例如:函数默认的请求处理程序example.App::handleRequest,其中example标识为包名,App标识为类名,handleRequest标识为类方法。其他语言要求,请参见函数计算运行时的事件请求处理程序(Event Handler)。

  3. 部署函数代码。

    1. 在目标函数的函数代码页签,先单击右上方的上传代码,然后选择上传JAR包

      说明

      Java是编译型语言,不支持在线查看编辑代码,需要您先在本地完成开发后,再通过OSS或JAR包上传。在Java环境编辑部署代码包,请参见编译部署代码包

      函数代码中JAR包的示例如下。表示云监控的报警通知数据先通过inputStream传给函数,然后您可以修改数据格式,再将其发送到不同的Webhook地址进行其他业务逻辑处理。该代码示例实现了StreamRequestHandler接口,仅将报警通知数据打印出来。

      package example;
      
      import com.aliyun.fc.runtime.Context;
      import com.aliyun.fc.runtime.FunctionInitializer;
      import com.aliyun.fc.runtime.StreamRequestHandler;
      
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.OutputStream;
      
      /**
       * Hello world!
       */
      public class App implements StreamRequestHandler, FunctionInitializer {
      
          public void initialize(Context context) throws IOException {
              //TODO
          }
      
          @Override
          public void handleRequest(
                  InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
              int n;
              StringBuilder sb = new StringBuilder();
              while ((n = inputStream.read()) != -1) {
                  sb.append((char) n);
              }
              System.out.println("alert param");
              System.out.println(sb.toString());
          }
      }
      说明

      代码开发可以参考以下文档:

    2. 通过ZIP、JAR包或WAR包上传代码对话框,先上传代码包,然后单击保存并部署

  4. 测试函数代码。

    1. 在目标函数的函数代码页签,单击测试函数页签。

    2. 测试函数页签,先单击配置测试事件,然后将以下云监控报警通知数据拷贝到创建新测试事件中,再单击测试函数

      执行成功后,您可以查看返回结果、日志输出及业务验证结果。

      {
          "product":"KVstore",
          "metricName":"ShardingCpuUsage",
          "instance":{
              "instanceId":"r-bp1wt5u2ov6e5w****",
              "resource":"r-bp1wt5u2ov6e5w****",
              "instanceName":"online",
              "vpc":{
                  "vswitchInstanceId":"vsw-bp1rpjm10in1wgxd4****",
                  "vpcInstanceId":"vpc-bp1n5sng5dntm3daf****"
              },
              "aliUid":173651113438****,
              "category":"KVSTORE",
              "region":{
                  "regionId":"cn-hangzhou",
                  "availabilityZone":""
              },
              "networkType":"VPC",
              "dimension":{
      
              },
              "desc":"",
              "tags":[
                  {
                      "value":"1",
                      "key":"__level__"
                  }
              ]
          },
          "Average":0.483,
          "userId":"173651113438****",
          "curLevel":"INFO",
          "Maximum":0.483,
          "__ts__":168612****,
          "instanceId":"r-bp1wt5u2ov6e5w****",
          "escalation":{
              "comparisonOperator":"GreaterThanOrEqualToThreshold",
              "expression":"$Average >= 0.1",
              "level":4,
              "statistics":"Average",
              "tag":"INFO",
              "threshold":"0.1",
              "times":1
          },
          "ruleName":"test-tair",
          "nodeId":"r-bp1wt5u2ov6e5w****-db-1",
          "timestamp":1686123300000
      }

步骤二:在云监控中设置报警

  1. 登录云监控控制台

  2. 在左侧导航栏,选择报警服务 > 报警规则

  3. 报警规则页面,单击创建报警规则

  4. 创建报警规则页面,先设置报警规则的基本信息,然后单击高级设置,再打开函数计算开关,最后选择函数计算的地域、服务和函数。

    报警规则相关参数的设置方法,请参见创建报警规则

    说明

    本操作中选择的函数信息必须与步骤一中创建的服务、函数和归属地域保持一致。

  5. 单击确认

步骤三:查看报警触发结果

当已设置函数计算的报警规则发生报警时,会触发调用目标函数。您可以从函数计算控制台查看目标函数的调用日志,并判断调用日志是否符合预期。

  1. 登录函数计算3.0 控制台

  2. 请确认访问的控制台是函数计算2.0,否则您需要在右上角单击返回函数计算 2.0。

  3. 在左侧导航栏,单击服务及函数

  4. 在顶部菜单栏,选择地域。

  5. 服务列表页面,单击目标服务名称。

  6. 函数管理页面,单击目标函数名称。

  7. 先单击调用日志页签,再单击请求列表页签,然后选择目标时间范围。

    说明

    当您初次查看函数的调用日志时,需要单击一键启用,启用日志功能。

  8. 单击目标调用日志对应操作列的请求日志

    您可以查看日志详情。