监控与告警设计

x33g5p2x  于2021-12-19 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(284)

一 问题提出

问:如果想统计一个逻辑被执行的次数,整个系统的成功量、失败量、超时量的实时数据,怎样处理?

答:对于这种场景,如果只是为了获取调用数量,并不关心具体内容,那么可以通过程序上报来解决问题。

二 伪代码

void ReportResult(){
    const errorResultId = 12345; // 上报的ID,不同的上报申请不同的 ID
    int ret = getResult(); // 对其他服务逻辑的封装
    if (ret == 0){
        // 成功处理逻辑
    } else {
        logWarn("getResult 返回失败,返回值=%d",ret);
        AttrAPI(errorResultId,1); // 表示上报一次 errorResultId
    }
}

AttrAPI 是对监控上报的封装。和日志函数 logWarn 相比,AttrAPI 只需要两个参数。一个参数表示上报的 ID 是什么,唯一标识上报的属性。另外一个参数表示一次上报的量,用于在一段时间内进行统计。

我们想看一分钟有多少个失败值,只要看 12345 这个ID 在一分钟内上报了多少次即可。

三 监控系统业务流程

实现监控系统除了需要提供一套供程序使用的API,还需要本地收集程序、远端汇总程序和数据展示系统。

1 流程说明

程序运行的进程通过 API 将要上报的ID和数量写入到共享内存队列中,每台机器的 agent 通过读取操作把计算后的数据发给远端的数据处理程序。数据处理程序负责按照上报的IP地址、上报的ID、以及上报时间等维度进行统计,整理出数据。最后通过 Web 展示程序,对数据进行可视化展示。

2 监控的作用

开发和运维人员通过监控系统能够了解程序运行时的状态。例如:成功量、失败量和超时量。通过可视化组件绘制一些对比图,方便查找问题。

四 告警

如何做到主动知道数据有问题呢?一般是通过告警来实现的。告警就是在监控系统设置一些数值,当达到这些数值时,触发消息通知。

例如:当超时量每分钟超过100个的时候,就发短信和邮件给负责人。通过主动通知,达到开发和运维人员第一时间收到异常提醒的目的。

五 设计告警时的注意事项

  • 合理设置告警的数量
  • 不合理的告警要及时优化
  • 出现异常情况下一定要告警
  • 对正常情况下的最大值和最小值也都设置告警阀值,起到预警作用

相关文章