如何做一个业务监控系统

2018-10-17 20:45:21 监控系统 878 0

什么是业务监控

主要应用于对企业运营过程中的各专项业务进行在线监控
当然,既然是监控,肯定也得与一定的报警渠道相关联
那如何关联呢
当然是依据一些样本数据啊
此外还得有一些报警的临界值才行
一切,且听云天河慢慢道来

监控流程

列出监控指标

首先明确任务,设计符合当前监控指标的系统

一般从以下几方面给出

业务

泛指一个大的项目
比如,一个公司做物联网也做互联网金融,他们分成了两个部门
但是总监是一个人,管这两个业务
则会分成两个业务来写

模块

泛指自身业务的某个集成服务
比如,短信服务、订单服务...

指标

比如,短信服务的发送数量、发送成功率...

阀值

它是判断是否属于报警情况的条件
比如,5分钟内数量低于7天平均值60%

报警渠道

泛指通知到相关人员的渠道
现在通常使用 玎玎、邮件、短信、电话 来通知到相关人员
一般来说要求的是不同级别的通知,给予不同的通知渠道

玎玎邮件:不是特别重要,看到了再查查是什么情况,可能是技术层面导致的
短信:需要出来一个人解决问题或者来给出新的监控规则
电话:主线业务出了大问题,必须要求有人实时知道并通知运营部门,给出新决策

配置样本采集规则

选择采样的数据库

采集模式

SQL

采集的SQL脚本里面,一般会以时间为模板变量

示例,验证码发送成功率

SELECT
    count( IF ( STATUS IN ( 2 ), id, NULL ) ) / count( id ) * 100 AS pass_rate 
FROM
    sms_verify_logs 
WHERE
    created_at >= "{{$start_time}}" 
    AND created_at < "{{$end_time}}"

通常 $start_time 这个变量表示执行这个统计时间的 时间粒度前的大小
如,当前采样的时间粒度是1分钟,则 $start_time 是一分钟前的时间
$end_time 一般表示开始执行脚本的时间
因此每一分钟的数据都会被采集到,方便我们后面依据这些数据计算报警实际样本

API

如果只有关系型数据库太局限,如果业务复杂度高了,那么,其他类型的数据库的种类也会多起来的
这时候为了便于拿到数据,我们会让其他项目开放监控内容的API
使得我们可以跨越不同数据库间的障碍
但本次云天河不作细节描述

配置报警规则

规则一般从以下几个方面配置

如图,为所需的报警实际样本的配置


如图,短信发送数量,5分钟内的规则配置

如图,此外可能需要多个条件复合判断、依据不同的业务紧急程度,设置发送报警的时间区间

配置报警接收人员

报警接收人员应该在配置好当前报警策略后分配
首先配置接收报警的用户信息(至少包括:名称、邮箱、手机号)
然后将对应用户某一个用户管理组去
然后通过配置管理组,加入一些监控项,统一让其下的人能收到通知
为什么我们会分管理组呢?
因为这是业务监控,涉及多个部门(运营部、技术部...)一起关注
但是不同部门,所关注的方向会有差异
所以这样设计比较好

配置报警渠道

报警渠道就我上面说的:玎玎、邮箱、短信、电话 渠道就差不多了
发送的报警信息,主要包含
业务名+模块名+阀值文字+当前真实报警样本值+当前值

书写报警脚本

报警脚本应该考虑分三种情况统计
以报警样本的统计周期为级别进行统计
如,选择的样本单位为分钟,则每分钟跑一次统计脚本,样本单位为小时,则每小时跑一次统计脚本
注:统计脚本,是依据前文我们每分钟跑出来的样本数据进行统计的
逻辑步骤大致如下:

  • 依据不同的样本单位,搜索出该级别的数据统计项
  • 计算用于本次统计的最早时间
  • 计算真实报警样本

发起报警

在每次统计数据的时候,就与真实报警样本值进行对比

  • 判断上一个时间粒度区间内是否满足过报警规则,上次若报警,而当前不报警,则回复取消报警邮件或玎玎
  • 判断当前是否报警
  • 获取报警数据及其文案,存储报警记录
  • 判断是否在可以发送报警信息的时间区间内
  • 获取关注当前监控项的群体的所有人的联系方式
  • 调起对应勾选的报警服务
  • 发起报警

类似产品推荐

Grafanna

5分钟搭建网站实时分析:Grafana+日志服务实战
可是这个的报警系统的阀值只能指定固定的值
这个项目是 golang + angular(TypeScript)来写的,有兴趣你可以源码改造给自己公司用

注:若无特殊说明,文章均为云天河原创,请尊重作者劳动成果,转载前请一定要注明出处