首页 > 国际新闻

10 人,2 个月 | 虾米音乐的监控体系升级之路

文章作者:来源:www.787store.com时间:2019-09-20



云栖社区2011.8.28我想分享

背景

监控一直是服务器掌握应用程序运行状态的重要手段。经过几年的发展,Ali Shrimp服务器拥有100多个Java应用程序,核心服务有近50个应用程序。人们各不相同有些人有更详细的监控,有些应用在多人发展阶段后被忽略了。有些应用程序直到2年前才被修改,但它们还没有适应业务的发展。

与大多数团队一样,Shrimp也有一个警报处理小组,通过机器人向内部监控和警报平台(如Sunfire)提供信息。由于监控项目的配置不合理,监控粒度较大,报警组已被数十甚至数百个报警通知轰炸。从长远来看,每个人都已经麻木了,并且大部分警报都不会被处理。

基于这种情况,SRE团队(SRE全称站点可靠性工程,由Google首次提出。致力于创建高度可用,高扩展的站点稳定性项目)专注于监控治理,2个月后研发已建成新的虾监测系统。

报警原因分析

过去,监控配置各不相同。应用程序负责学生的监控主要限于RT,QPS监控和部分服务日志监控的应用。当警报发生时,大多数情况只知道应用程序有问题,但很难。快速定位是出错的地方和出了什么问题。新学生可能需要完成查看配置项,登录计算机,扫描日志,甚至检查脱机日志的步骤。十分钟后,可以找到问题,有时需要很长时间才能检查。

经过一段时间的研究和探索,我们发现如果应用程序在稳定运行一段时间后突然发出警报,原因通常是以下几类:

程序错误:由代码问题引起的空指针,频繁的FullGC等。

上游依赖性存在问题:上游接口导致接口超时,呼叫失败等。

独立故障:容器是由主机应用程序引起的,CPU突然上升,最终导致超时,完整的线程池等等。

中间件故障:通常,例如缓存和DB抖动,RT增长和超时在一段时间内增加。但是,这里应该注意的是,单机Load high也会导致单机读写Cache和DB出现问题。

监控优化

分析报警原因,下一步是优化监控。受监控的警报可以告诉您出现问题,良好的监控可以告诉您出了什么问题。我们之前的监控通常只完成了第一阶段,我们无法确切地告诉我们出了什么问题。我们必须通过许多辅助手段找到它。在分析了报警原因后,我们必须找到一种通过监控准确定位问题的方法。

目前,虾的监测分为故障监测,基本监测和一般监测,如下图所示:

故障监控

所谓的故障监控是这些监控报警意味着发生了故障。我们认为,如果任何外部因素对应用程序产生影响,则必然会反映接口的RT和成功率,导致接口RT上升,或导致接口故障数量增加,以及成功率跌倒。如果没有这种影响,则可以忽略此外部影响。因此,我们将接口监控作为故障监控的很大一部分。如果每个应用程序都配置了核心接口的故障监视,则可以很容易地确定在解决问题时是否由上游应用程序的接口引起。该应用程序存在问题。

因此,我们使用成功率,RT和错误代码三个指标来执行接口的故障监视。特别是,对于客户端界面的RT监控,我们没有使用平均RT,而是使用Top 75%RT。因为要使用它来反映用户端体验,例如RT的75%断线警报阈值设置为1000ms,那么当此监控项目发出警报时,表示25%的用户请求接口已超过1000ms。通常,此警报阈值设置为用户无法容忍的RT,例如500ms或1000ms。

在故障监视中,我们还设置了三种类型的应用程序维度异常,错误和消息异常监视,它们监视服务器上的异常和错误。这种类型的监控主要用于快速查找程序中的错误。例如,在发布版本时,如果这三种类型的错误增加,您应该考虑回滚。

一般监测

在大多数情况下,应用程序的问题是由单个机器故障引起的。如果某台机器的界面金色指示器突然变化,则错误或异常的数量突然增加,而其他机器没有变化,这意味着它是由一台机器引起的。因此,我们为应用程序的故障监视配置了相应的单机监控。在这里,我们还介绍了两种类型的HSF(Dubbo)线程池满和HSF(Dubbo)超时的独立监视,因为单个负载很高。当CPU出现问题时,最常见的性能是HSF线程池突然已满并且HSF(Dubbo)超时的数量增加。这两个监控也可以帮助定位单个机器问题。通过这种类型的监控,我们可以轻松地界面警报是否由某台机器引起。

基本监控

前两种类型的监控基本上可以定位故障是由程序错误,上游应用程序还是单机故障引起的,另一种是监控中间件。这里我们使用Sunfire的基本监控来为应用程序CPU,负载,JVM,HSF(Dubbo),MetaQ和其他中间件的指标进行监控。如果存在中间件故障,则此处会有明显的警报。

报警路径优化

在梳理和优化监控之后,每个应用目前有30-50个报警项。如果所有警报项都以前一种方式发送,那将是一场灾难。没有办法看到它。没有办法。快速找到问题所在。同时,应用程序管理员通常只关心自己的应用程序警报,让他看到其他应用程序的警报是没用的。因此,我们构建了一个SRE平台来优化警报链接。优化的报警链接如下:

我们使用流量计算来设置警报窗口和聚合警报。我们使用警报分类来决定应该传递哪些警报。当我们检查警报组时,我们可以直接找到我的消息并快速提取有用的信息。同时,SRE平台支持在一小时内对应用程序和上游应用程序的警报进行分类和聚合,很明显出现了什么问题。通过我们自己的机器人,我们只发送钉组中的常规报警信息,这大大减少了报警的数量,提高了报警的可读性。目前,每天产生约5000种报警信息。在决策和规则选择之后,传递大约50-100个警报消息,并且这些警报是我的。他们认为警报必须立即处理。

带流量的调度

过去,我们发现许多故障是由一台机器引起的。过去,我们经常做的是停止服务或更换单台机器。这是非常低效的。事实上,我们需要做的是在机器出现故障时快速切断机器的流量,然后在恢复时切断流量。回来,如果所有这些都可以自动化会更好。

在阿里巴巴的交通调度平台(阿里云AHAS)的帮助下,我们可以完美地解决以下问题:

发布预热问题,避免发布RT,发布引发的Load,然后导致HSF超时问题;

本地计算机流量过高,受主机影响,呼叫速度过慢,HSF完整线程导致服务不可用,以及高RT。

目前,已有约40个应用程序连接到交通调度平台,每周调度机流量超过1000次。在流量调度平台的帮助下,我们不再关心单机故障引起的应用报警。

更精彩

识别QR码并立即进入免费试用

如果您认为这篇文章不错,请点击查看!点击此处进入阿里巴巴云0元试用!收集报告投诉

背景

监控一直是服务器掌握应用程序运行状态的重要手段。经过几年的发展,Ali Shrimp服务器拥有100多个Java应用程序,核心服务有近50个应用程序。人们各不相同有些人有更详细的监控,有些应用在多人发展阶段后被忽略了。有些应用程序直到2年前才被修改,但它们还没有适应业务的发展。

与大多数团队一样,Shrimp也有一个警报处理小组,通过机器人向内部监控和警报平台(如Sunfire)提供信息。由于监控项目的配置不合理,监控粒度较大,报警组已被数十甚至数百个报警通知轰炸。从长远来看,每个人都已经麻木了,并且大部分警报都不会被处理。

基于这种情况,SRE团队(SRE全称站点可靠性工程,由Google首次提出。致力于创建高度可用,高扩展的站点稳定性项目)专注于监控治理,2个月后研发已建成新的虾监测系统。

报警原因分析

过去,监控配置各不相同。应用程序负责学生的监控主要限于RT,QPS监控和部分服务日志监控的应用。当警报发生时,大多数情况只知道应用程序有问题,但很难。快速定位是出错的地方和出了什么问题。新学生可能需要完成查看配置项,登录计算机,扫描日志,甚至检查脱机日志的步骤。十分钟后,可以找到问题,有时需要很长时间才能检查。

经过一段时间的研究和探索,我们发现如果应用程序在稳定运行一段时间后突然发出警报,原因通常是以下几类:

程序错误:由代码问题引起的空指针,频繁的FullGC等。

上游依赖性存在问题:上游接口导致接口超时,呼叫失败等。

独立故障:容器是由主机应用程序引起的,CPU突然上升,最终导致超时,完整的线程池等等。

中间件故障:通常,例如缓存和DB抖动,RT增长和超时在一段时间内增加。但是,这里应该注意的是,单机Load high也会导致单机读写Cache和DB出现问题。

监控优化

分析报警原因,下一步是优化监控。受监控的警报可以告诉您出现问题,良好的监控可以告诉您出了什么问题。我们之前的监控通常只完成了第一阶段,我们无法确切地告诉我们出了什么问题。我们必须通过许多辅助手段找到它。在分析了报警原因后,我们必须找到一种通过监控准确定位问题的方法。

目前,虾的监测分为故障监测,基本监测和一般监测,如下图所示:

故障监控

所谓的故障监控是这些监控报警意味着发生了故障。我们认为,如果任何外部因素对应用程序产生影响,则必然会反映接口的RT和成功率,导致接口RT上升,或导致接口故障数量增加,以及成功率跌倒。如果没有这种影响,则可以忽略此外部影响。因此,我们将接口监控作为故障监控的很大一部分。如果每个应用程序都配置了核心接口的故障监视,则可以很容易地确定在解决问题时是否由上游应用程序的接口引起。该应用程序存在问题。

因此,我们使用成功率,RT和错误代码三个指标来执行接口的故障监视。特别是,对于客户端界面的RT监控,我们没有使用平均RT,而是使用Top 75%RT。因为要使用它来反映用户端体验,例如RT的75%断线警报阈值设置为1000ms,那么当此监控项目发出警报时,表示25%的用户请求接口已超过1000ms。通常,此警报阈值设置为用户无法容忍的RT,例如500ms或1000ms。

在故障监视中,我们还设置了三种类型的应用程序维度异常,错误和消息异常监视,它们监视服务器上的异常和错误。这种类型的监控主要用于快速查找程序中的错误。例如,在发布版本时,如果这三种类型的错误增加,您应该考虑回滚。

一般监测

在大多数情况下,应用程序的问题是由单个机器故障引起的。如果某台机器的界面金色指示器突然变化,则错误或异常的数量突然增加,而其他机器没有变化,这意味着它是由一台机器引起的。因此,我们为应用程序的故障监视配置了相应的单机监控。在这里,我们还介绍了两种类型的HSF(Dubbo)线程池满和HSF(Dubbo)超时的独立监视,因为单个负载很高。当CPU出现问题时,最常见的性能是HSF线程池突然已满并且HSF(Dubbo)超时的数量增加。这两个监控也可以帮助定位单个机器问题。通过这种类型的监控,我们可以轻松地界面警报是否由某台机器引起。

基本监控

前两种类型的监控基本上可以定位故障是由程序错误,上游应用程序还是单机故障引起的,另一种是监控中间件。这里我们使用Sunfire的基本监控来为应用程序CPU,负载,JVM,HSF(Dubbo),MetaQ和其他中间件的指标进行监控。如果存在中间件故障,则此处会有明显的警报。

报警路径优化

在梳理和优化监控之后,每个应用目前有30-50个报警项。如果所有警报项都以前一种方式发送,那将是一场灾难。没有办法看到它。没有办法。快速找到问题所在。同时,应用程序管理员通常只关心自己的应用程序警报,让他看到其他应用程序的警报是没用的。因此,我们构建了一个SRE平台来优化警报链接。优化的报警链接如下:

我们使用流量计算来设置警报窗口,执行警报聚合,并决定应通过警报评级传递哪些警报。在报警组准确的AT相关学生,在查看报警组时,可以快速直接定位AT消息。提取有用的信息。同时,SRE平台支持在应用程序和上游应用程序的一小时内对警报进行分类和聚合显示,并且一目了然显示出了什么问题。通过我们自己的机器人,我们只发送符合指甲组规则的警报消息,这大大减少了警报的数量,提高了警报的可读性。目前,我们每天生成约5000种各种类型的报警信息。规则筛选发送的警报消息大约为50-100,这些警报是我们认为必须立即处理的警报。

有了流量调度

过去,许多故障都是由单台机器引起的。过去,我们发现单机故障通常会停止服务或用一台机器替换它。这是非常低效的。事实上,我们需要做的是在机器出现问题时遇到问题。快速切断流量,然后在恢复时减少流量。如果它可以自动化会更好。

我们可以通过阿里巴巴的流量调度平台(阿里巴巴AHAS)完美解决以下问题:

发布预热问题,避免因发布引起的RT和Load问题,然后导致HSF超时等问题;

本地机器流量过高,受主机影响,呼叫过慢,HSF线程全服务不可用,RT过高等等。

目前,已有约40个应用程序连接到交通调度平台,机器流量每周安排超过1000次。通过流量调度平台,我们不再关心单机故障引起的应用报警。

更令人兴奋的

识别QR码并立即进入免费试用

如果您认为这篇文章不错,请点击查看!点击此处进入阿里巴巴云0元试用!

——