Skip to content

19业务告警:怎样借助云开发业务告警进行业务监控?

今天我想跟你聊一聊怎么借助云开发业务告警进行业务监控。

在 17 讲中,我将应用产品的日志当作飞机的黑匣子,开发者能根据日志记录的内容,分析应用运行时的状态进而找到问题所在。但是我们并不希望应用产品在上线生产时出现问题(就好比飞机在飞行过程中出现故障一样),因为产生的损失是无法估量的,比如丢失用户数据、大量用户流失、应用信誉损失等,这些都是开发者和应用所有者的噩梦。

虽然我们不想应用在上线运行时出现问题,但问题总会自己找上门。这时,如何在第一时间发现、解决问题,就成了应用开发者在维护应用运行时唯一要做的事情。那么要想在第一时间发现问题,并对问题作出响应, 开发者就需要对应用进行监控,时刻注意服务的质量和速度、网络状况、用户访问情况,判断应用运行是否正常。

不过以上的监控的手段需要占用人力资源,需要"值班监控",如果涉及的服务资源巨大,且人力投入比较少时,这种值班式的监控就变得非常棘手。

那么有没有一种方法,能让服务自身进行运行监控,当运行状态出现了设定的异常值时,触发一下告警机制,通过短信、邮件或电话等方式告知有关开发者呢?这种方法就是业务告警功能。

云开发作为云端一体化的后端服务,在业务告警上下了非常大的功夫,今天这一讲,我就带你领略一下云开发业务告警的使用方法、细节,帮你更好地进行应用产品的告警配置。

告警对象

在进行告警配置时,最重要的要素是告警对象,其描述了具体的服务和资源对象。监控系统会将设置的告警对象作为监控目标,监控告警对象的一举一动。

通常与告警对象一起设置的还有触发条件(也就是描述告警对象的一些异常情况)。监控系统会在监控对象出现异常情况时触发告警。

在云开发中,告警对象可以是云函数、数据库、云存储、云托管等。

  • 云函数

之前我们也了解过,云函数是云开发中的计算能力资源。在应用运行过程中,负责各自逻辑的云函数会不断运行并返回结果给调用方。在告警设置时,每一个云函数都可以作为一个告警对象。

如果你在设计时,有多个云函数同时负责着一个模块逻辑,那么你可以选择多个云函数作为一个告警对象。

当我们选择了云函数之后,还需要配置一下触发条件,否则监控系统并不知道在什么情况下发出告警。云函数的触发条件主要有八点。

  1. 运行时间:监听云函数的单次运行时长。

  2. 错误次数:监听云函数出现错误异常的次数。

  3. 资源用量:监听云函数的单次运行耗费资源。

  4. 调用次数:监听云函数在周期内被调用次数。

  5. 外网出流量:监听云函数外网出流量。

  6. 并发执行次数:监听云函数并发执行次数。

  7. 函数执行超时次数:监听云函数执行超时失败的次数。

  8. 内存超过限制次数:监听云函数内存超过限制次数。

以上所有的触发条件的统计周期都是5分钟,在5分钟统计时,会有次数或用量的维度数值,我们需要配置数值的告警阈值即可。比如,我们需要保证云函数每小时错误次数不超过 12 次,分摊到 5 分钟的统计周期,就是 1 次,那么我们需要配置错误次数,每周期大于 1 次,满足此条件一个周期就开始告警,告警发送频次为1小时1次。配置图如下:

另外,为了业务需求,需要保证云函数响应必须在 300ms 以内,假设我们开发了一个理论做到150ms 返回响应的云函数,但为了防止一些意外情况发生,仍需要添加运行监控,配置如下:

总的来说,你可以针对一个告警对象设置多个触发条件,监控系统只要满足任意条件都会发送告警通知。

  • 数据库

数据库是应用的命脉,所以数据库的设计和优化非常重要。在实际投入生产时,我们要确保数据库不出故障,所以对数据库的告警设置仍不可或缺。云开发在数据库的告警设置中,告警对象以集合为单位。开发者可以根据业务情况选择一个或多个集合作为告警对象,或者选择全部集合作为告警对象。

与云函数一样,在选择告警对象后,需要配置一下触发条件,告知监控系统应该在什么情况下进行告警。数据库的触发条件有五点:

  1. 耗时 50 - 100 毫秒请求数;

  2. 耗时 10 - 50 毫秒请求数;

  3. 耗时超过 100 毫秒请求数;

  4. 读请求数;

  5. 写请求数。

数据库的触发条件相比云函数简单许多,主要是单次时长和次数两个维度,在数据库投入生产之后,我们期待数据库能够更快速地读写。比如,我们监听一个数据库集合,每次操作不能大于100ms,否则就告警,我们可以做如下配置,来及时响应大于100ms的耗时问题。

有时候,数据库的耗时是和并发读写操作有关的,我们还需要同步监听一下数据库的请求数,来预警一下可能出现的数据库耗时问题:

  • 云存储

相比于云函数、数据库,云存储缺少了资源的细分,所以云存储中的告警对象只有云存储全部,无法针对某一文件或文件夹做细致的设置。

同样的,我们仍然需要为云存储添加相应的触发条件,云存储的触发条件如下:

  1. 上传操作;

  2. 下载操作;

  3. CDN回源流量;

  4. 上传流量。

触发条件主要围绕操作次数和流量两个维度进行设置的。上传下载操作、上传流量主要结合应用业务设计来进行合理配置,保证资源充足可用即可。其中,CDN回源流量主要用来监测判断CDN缓存时间配置的优劣,促进更好的时间配置,节省资源。

  • 云托管

云托管是云开发另一计算能力资源,在资源消耗方式上和云函数有很大差异。它可以有一个或多个服务,一个服务也可以有一个或多个版本。所以云托管有服务和版本两个维度的可监听对象。

相应的,云托管的告警对象就以两个维度进行区分,一个是服务、一个是版本。当维度为服务时,目的就是监听服务模块的正常稳定;而当维度为版本时,通常是为了对更新的功能版本进行稳定性监测。

当选择维度为版本时,需要选择具体的服务,可以同时监听服务的所有版本,也可以监听服务下的具体版本。针对选择的告警对象,也需要配置相应的触发条件,云托管的触发条件有:

  1. cpu使用率;

  2. 内存使用率;

  3. pod实例个数;

  4. pod状态不正常个数;

  5. pod实例数量百分比;

  6. 调用次数。

云托管的触发条件主要围绕资源使用、实例、调用次数三个维度来建立。资源的使用率可以用来辅助开发者决策单一实例的资源配置,实例的状态和调用次数则可以帮助开发者了解云托管服务的访问量和访问高峰。

告警渠道

当我们确定好告警对象以及每个告警对象的触发条件后,云开发监控系统就可以正常的监控了,而当出现问题时,你需要设置告警渠道,来通知开发者。告警渠道的设置分为接收对象、有效时段、接收渠道3个维度。从设置意义理解,就是告警在什么时间、通过什么渠道、发送给谁。

如果是团队开发,不同的模块和资源对应的是不同的开发者,所以要单独设置相应的接收对象。

如果同一个模块资源有两个开发者分别值班,比如开发者 A 值班 12 小时,开发者 B 值班 12 小时,你可以设置有效时段。那么云开发监控告警执行时,只在设置的时段中出现告警时才发送给相应值班开发者。但不要漏掉时段,造成一段时间内告警没有接收者,丧失机动性。

如果有些资源模块过于核心和复杂,需要牵扯多个的开发者,可以设置多个开发者为用户组,在接收对象中选取用户组进行告警发送。

告警的接收渠道目前有邮件、短信、微信消息、站内信4种方式,开发者可以根据自身情况来选择对应的一个或多个告警渠道,便于更好地接收。

总结

云开发的业务告警作为平台能力直接集成到云开发各项资源中,开发者可以直接使用配置即可完成资源的监控和告警的建立,不用自己搭建和架设。另外,监控告警中发送的每一次告警都是有记录的,能够方便开发者追溯。

业务告警能力作为帮助开发者监控后端服务的重要帮手,使开发者在出现问题的第一时间响应,同时又不会浪费开发者的时间,使开发者能够节约很多时间用于业务开发,将降本增效做到极致。

关于今天这一讲,我只想强调一下这样的重点:在使用告警时,需要结合自身业务情况合理调配触发条件,做到一旦告警,必定有情况的状态。

留给你的课后作业是:结合云函数设置一个业务告警的策略,并尝试触发它,接收到云开发的告警信息 。

讲到这儿,我们这门课的内容就算全部结束了,在课程的最后,我会通过基于云开发开发商城小程序的实战,来带你贯穿微信小程序开发和云开发,希望你能整合所学,从实战中有更深的领悟和体会 。