问:如果想统计一个逻辑被执行的次数,整个系统的成功量、失败量、超时量的实时数据,怎样处理?
答:对于这种场景,如果只是为了获取调用数量,并不关心具体内容,那么可以通过程序上报来解决问题。
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,还需要本地收集程序、远端汇总程序和数据展示系统。
程序运行的进程通过 API 将要上报的ID和数量写入到共享内存队列中,每台机器的 agent 通过读取操作把计算后的数据发给远端的数据处理程序。数据处理程序负责按照上报的IP地址、上报的ID、以及上报时间等维度进行统计,整理出数据。最后通过 Web 展示程序,对数据进行可视化展示。
开发和运维人员通过监控系统能够了解程序运行时的状态。例如:成功量、失败量和超时量。通过可视化组件绘制一些对比图,方便查找问题。
如何做到主动知道数据有问题呢?一般是通过告警来实现的。告警就是在监控系统设置一些数值,当达到这些数值时,触发消息通知。
例如:当超时量每分钟超过100个的时候,就发短信和邮件给负责人。通过主动通知,达到开发和运维人员第一时间收到异常提醒的目的。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/122028027
内容来源于网络,如有侵权,请联系作者删除!