当云监控Webhook现有的报警通知渠道(钉钉、企业微信、飞书和Slack),以及报警投递渠道(弹性伸缩、日志服务)和轻量消息队列(原 MNS)不能满足您的需求时,可以通过函数计算编写代码来实现更为广泛的需求。
前提条件
请确保您已开通函数计算服务。具体操作,请参见开通函数计算服务。
如果您希望云监控通知渠道以外的工具也能收到报警通知,请提前准备好他们的Webhook地址。
应用场景
通过函数计算对报警通知内容的格式进行处理,来实现云监控通知渠道以外的工具接收报警通知。
通过函数计算对报警通知的内容进行处理,来实现云监控报警通知内容的个性化。
步骤一:在函数计算中部署代码函数
创建服务。
输入服务名称,其他参数均使用默认值。具体操作,请参见创建服务。
创建函数。
在基本设置区域,输入函数名称,请求处理程序类型选择处理事件请求,其他参数均使用默认值。具体操作,请参见创建函数。
本文以运行环境为Java 8为例进行介绍。
说明函数高级配置区域的请求处理程序(函数入口)必须与函数代码对应,例如:函数默认的请求处理程序为example.App::handleRequest,其中example标识为包名,App标识为类名,handleRequest标识为类方法。其他语言要求,请参见函数计算运行时的事件请求处理程序(Event Handler)。
部署函数代码。
在目标函数的函数代码页签,先单击右上方的上传代码,然后选择上传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()); } }
说明代码开发可以参考以下文档:
多语言代码开发,请参见代码开发概述。
代码示例的事件函数(从函数计算代码示例库下载工程,再进行开发比较快捷),请参见事件函数。
Java开发具体说明,请参见事件请求处理程序(Event Handler)。
在通过ZIP、JAR包或WAR包上传代码对话框,先上传代码包,然后单击保存并部署。
测试函数代码。
在目标函数的函数代码页签,单击测试函数页签。
在测试函数页签,先单击配置测试事件,然后将以下云监控报警通知数据拷贝到创建新测试事件中,再单击测试函数。
执行成功后,您可以查看返回结果、日志输出及业务验证结果。
{ "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 }
步骤二:在云监控中设置报警
步骤三:查看报警触发结果
当已设置函数计算的报警规则发生报警时,会触发调用目标函数。您可以从函数计算控制台查看目标函数的调用日志,并判断调用日志是否符合预期。
登录函数计算3.0 控制台。
请确认访问的控制台是函数计算2.0,否则您需要在右上角单击返回函数计算 2.0。
在左侧导航栏,单击服务及函数。
在顶部菜单栏,选择地域。
在服务列表页面,单击目标服务名称。
在函数管理页面,单击目标函数名称。
先单击调用日志页签,再单击请求列表页签,然后选择目标时间范围。
说明当您初次查看函数的调用日志时,需要单击一键启用,启用日志功能。
单击目标调用日志对应操作列的请求日志。
您可以查看日志详情。