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

背景

监控一直是服务端掌握应用运行状态的重要手段,经过近几年的发展,阿里虾米服务端目前已经有 100 多个 Java 应用,承担核心业务的应用也有将近 50 个,对于应用的监控配置也是因人而异。有的人配置的监控比较细,有的应用在经历了多人开发阶段以后,监控就逐渐疏于管理,有些应用的监控项最后修改时间只停留到 2 年以前,早已不适应业务的发展。

与大部分团队一样,虾米也有一个报警处理群,将内部的监控报警平台(如 Sunfire 等)的信息通过机器人投递到群中,由于监控项配置不合理、监控粒度较大,每天报警群都被几十条甚至上百条报警通知狂轰乱炸,长此以往大家对报警已经麻木,大部分报警也不会去处理。

基于这样的现状,虾米 SRE 团队(SRE全称Site Reliability Engineering,最早由Google提出。致力于打造高可用、高拓展的站点稳定性工程)将工作重点放在了对监控的治理上面,经过 2 个月的研发,构建了虾米全新的监控体系。

报警原因分析

过去的监控配置可谓五花八门,由应用负责同学配置的一些监控大多局限在应用整体 RT、QPS 的监控和部分业务日志的监控,报警发生时,大部分情况只知道这个应用有了问题,但很难快速定位是哪里出了问题,出了什么问题。一个新接手的同学可能需要经过查看配置项、登录机器、扫描日志甚至去查离线日志等步骤,经过十几分钟才能定位到问题,有的时候甚至需要排查个大半天时间。

经过一段时间的研究和摸索,我们发现一个应用如果在稳定运行了一段时间以后突然发生报警,那么原因通常都是以下几类:

  • 程序 Bug:如代码问题导致空指针、频繁 FullGC 等。
  • 上游依赖出问题:上游某个接口出了问题导致本应用出现接口超时、调用失败等。
  • 单机故障:某个容器受宿主机应用导致 Load、CPU 突然升高,最终导致超时、线程池满等情况发生。
  • 中间件故障:常见的如 Cache、DB抖 动导致一段时间内 RT 增长、超时增多。不过这里需要注意的是,单机 Load 高同样会引发单机读写 Cache、DB 出现问题。

监控优化

分析了报警原因,下一步就是优化监控。监控的报警可以告诉你出了问题,而好的监控是可以告诉你哪里出了问题。我们以前的监控通常只完成了第一阶段,而不能很好的告诉我们哪里出了问题,要通过一大堆辅助手段去定位。在分析了报警原因以后,我们就要想办法通过监控的手段来精准定位问题。

目前虾米的监控分为故障监控、基础监控和通用监控三类,如下图所示:

故障监控

所谓故障监控,就是这些监控发生报警意味着有故障产生了。我们认为一切外在因素如果对应用产生影响,那么必然反应在接口的 RT 和成功率上,要么引起接口 RT 升高,要么导致接口失败数增加,成功率下跌,如果没有这种影响,那么这个外在影响可以被忽略掉。因此我们把接口监控作为故障监控的一大块来重点配置,如果每个应用都配置了核心接口的故障监控,在排查问题时,就很容易定位是否由于上游应用的某个接口导致了我的应用出了问题。

因此我们使用成功率、RT 和错误码三个指标来进行一个接口的故障监控。特别指出的是,对于客户端接口的 RT 监控上,我们没有使用平均 RT,而是使用 Top 75% RT。因为想用它来反应用户侧的感受,比如 RT的 75% 分位线报警阈值设置为 1000ms,那么当这一监控项发生报警时,意味着有 25% 的用户请求接口已经超过 1000ms。通常这一报警阈值设置成用户不能忍受的一个 RT,比如 500ms 或 1000ms。

 

在故障监控里,我们还设置了应用维度的异常、错误和消息异常三种类型的监控,他们对服务器上的Exception和Error进行监控。这一类监控主要用于快速发现程序bug。例如当一次发布进行时,如果这三种类型的错误增加,那么应该可以考虑进行回滚了。

通用监控

大多数情况下,应用出现的问题都是由于单机故障引起的时候,如果某台机器的接口黄金指标突然变化、错误或异常数量突然增多,而其他机器没有什么变化,那就说明是单机引起的。因此我们对应用的故障监控都配置了对应的单机监控,在此处我们还额外引入了 HSF(Dubbo) 线程池满和 HSF(Dubbo) 超时两个类型的单机监控,是因为当单机 Load 高、CPU 有问题时,最为常见的表现就是HSF线程池突然打满,HSF(Dubbo) 超时数量增多,这两个监控同样可以来辅助定位单机问题。通过这一类监控,我们可以方便地接口报警是否由某台机器引起。

基础监控

前面两种类型的监控已经基本可以定位到故障是否由于程序 Bug、上游应用或单机故障引起的,还有一类就是对中间件的监控,这里我们利用了 Sunfire 的基础监控对应用的 CPU、Load、JVM、HSF(Dubbo)、MetaQ 等中间件的各项指标进行监控。如果因为中间件故障,此处将会有明显的报警。

报警路径优化

经过对监控的梳理和优化,目前每个应用差不过有 30-50 个报警项,如果所有报警项用以前的方式投递的报警群,那么将是一个灾难,完全没有办法去看,更没有办法快速定位问题。同时,一个应用负责人通常只关心自己的应用报警,让他去看其他应用的报警也是没用的。因此我们构建了一个 SRE 平台来优化报警链路,优化后的报警链路如下:

我们利用流计算设定报警窗口,进行报警聚合,通过报警分级来进行决定哪些报警应该被投递出来,在报警群精准 AT 相关的同学,查看报警群时,可以直接定位到 AT 我的消息,快速提取有用的信息。同时在 SRE 平台支持对应用和上游应用一小时内的报警进行分类和聚合展示,哪里出了问题一目了然。我们通过自己的机器人,在钉钉群里只发送符合规则的报警信息,极大减少了报警数量,提高了报警的可读性,目前日均产生约 5000 条各种类型的报警信息,经过决策和规则筛选投递出的报警信息约为 50-100 条,而这些报警是我们认为必须要立即处理的报警。

 

借助流量调度

在前面提到很多故障是由于单机引起的,过去我们排查出来单机故障经常做的就是把服务停了或者单机置换,这样效率极低,实际上我们需要做的是在机器有问题的时候,能够把它的流量快速切走,再它恢复的时候再把流量切回来,如果这一切能够自动化地进行就更好了。

  • 我们借助阿里巴巴的流量调度平台(即阿里云 AHAS)可以完美地解决以下的问题:
  • 发布预热问题,避免发布带来的 RT、Load 升高问题 进而引发 HSF 超时等问题;
  • 局部机器流量过高、受宿主机影响、慢调用过多、HSF线程满带来的服务不可用、RT过高等问题。

目前,我们约有 40 个应用已经接入流量调度平台,每周调度机器流量 1000 余次,借助流量调度平台我们可以不再关心单机故障引发的应用报警。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 本身真的没什么用!

越来越多的人学习编程不再只是为了当程序员,而是为了提升效率,多一份职业技能,正面应对瞬息万变的全球大环境。据麦肯锡全球研究院发布的一份就业报告中显示,到 2030 年,中国预计将有 1200 万~ 1.02 亿人面…

Timestream开发最佳实践

背景 Timestream模型是针对时序场景设计的特有模型,可以让用户快速完成业务代码的开发,实现相关业务需求。但是,如果业务系统不仅想实现基础的相关业务功能,还要达到最佳的性能,并且兼顾到未来的扩展性的话&#xff0…

linux-ubuntu-16.04 安装系统、安装 SSH 服务、设置root用户密码

1、ubuntu-16.04安装 使用UltraISO 软碟通 将 ubuntu-16.04-desktop-amd64.iso 制作为U盘镜像插入U盘,开机按F12选择U盘启动安装过程参考 https://blog.csdn.net/weixin_59605625/article/details/125807363 2、ubuntu-16.04 安装 SSH 服务 $ 在linux中代表普通用…

Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: address already in use.

文章目录一、现象二、解决方案一、现象 [rootlocalhost app]# docker run -p 8080:8080 -p 9326:9326 --name eblog --link es_643:ees --link myrabbit:erabbit --link mymysql:emysql --link myredis:eredis -d eblog:1.0a74c2caaca88203c1ca575cd2f8a0e0426d892d5800c487…

助力企业应用与基础架构现代化 VMware这波组合拳够强!

顺应时代的发展,“数字化转型”已经成为企业发展的必由之路。应用作为数字化转型的核心,能够帮助企业向客户提供定制化的数字化体验,创造新的收入来源。在数字化转型道路上,中国企业走的并不慢甚至非常之快,在此过程中…

应用架构的核心使命是什么?阿里高级技术专家这样说

阿里妹导读:什么是架构?关于架构这个概念很难给出一个明确的定义,也没有一个标准的定义。如果,硬是要给一个概述,阿里巴巴高级技术专家张建飞认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。今天&…

2分钟学会Docker部署SpringBoot项目

文章目录一、安装docker1. 在线安装docker2. 换镜像源二、安装redis三、安装mysql四、安装RabbitMq五、安装ElasticSearch5.1. 修改服务器配置5.2. 创建容器并启动 ES5.3. 查看启动日志5.4. 进入镜像5.5. 修改cluster-name5.6. 安装中文分词插件5.7. 退出并重启镜像5.8. 查看启…

linux-ubuntu-16.04 安装 java8、 firewalld、 mysql5.7、Redis 5.0.3、FastDFS、nginx1.18

1、安装java 新建jdk目录 cd /usr/local mkdir java下载JDK8上传到java目录下,解压文件 cd java tar -zxvf jdk-8u201-linux-x64.tar.gz链接:https://pan.baidu.com/s/155P1Y5YetBD0E4PhcPgNfg 提取码:z27j 配置环境变量 vi /etc/profi…

K8s 学习者绝对不能错过的最全知识图谱(内含 56个知识点链接)

导读:Kubernetes 作为云原生时代的“操作系统”,熟悉和使用它是每名用户的必备技能。本篇文章概述了容器服务 Kubernetes 的知识图谱,部分内容参考了网上的知识图谱,旨在帮助用户更好的了解 K8s 的相关知识。 1. 概述 容器服务 …

利用 Docker 在不同宿主机做 CentOS 系统容器 | 原力计划

作者 | 于先森2017责编 | 伍杏玲出品 | CSDN博客最近公司新接到一个项目,惯例是通过技术架构、业务需求、用户量还有以往的经验大概评估出一份资源配置表格提供给客户,让客户参考采购的服务器资源。但这次客户根本没有根据我们提供的参考表格来&#xff…

编程界的“二向箔”——Dart元编程

阅读过《三体》的同学肯定知道“降维打击”,从更高维度看问题,直接将对手KO。今天我们闲聊一下编程界的“二向箔”——元编程。 1. 什么是元编程 我们听过了太多太多的名词,耳朵似乎都有点名词麻痹症了。比如,有些名词为了装x&a…

在线安装docker

文章目录一、安装docker1. 在线安装docker2. 换镜像源一、安装docker 1. 在线安装docker #安装 yum install docker#检验安装是否成功 [rootlocalhost opt]# docker --version Docker version 1.13.1, build 7f2769b/1.13.12. 换镜像源 sudo vim /etc/docker/daemon.json 内…

linux-ubuntu-22.04 安装 java8、 firewalld、 mysql5.7、Redis 6.0、FastDFS、nginx1.18

1、安装java 可参考ubuntu-16.04,没区别 https://blog.csdn.net/qq_38959934/article/details/126101028 2、安装 firewalld 可参考ubuntu-16.04,没区别 https://blog.csdn.net/qq_38959934/article/details/126101028 3、安装 mysql5.7 apt-get in…

车联网服务non-RESTful架构改造实践

导读 在构建面向企业项目、多端的内容聚合类在线服务API设计的过程中,由于其定制特点,采用常规的restful开发模式,通常会导致大量雷同API重复开发的窘境,本文介绍一种GraphQL查询语言网关编排联合的实践,解决大量重复…

为什么铺天盖地都是 Python 的广告?

最近,知乎关于Python有一个热议问题: 甚至在抖音上,笔者有一次还看到Python占领了热搜!应该有很多不懂技术的吃瓜群众也被Python的热度炒懵了……但是,Python真的值得学吗?真的值得花这么多钱去学吗&#x…

Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了

阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版。Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud Alibaba 的开源为开发…

一个系统,搞定闲鱼服务端复杂问题告警-定位-快速处理

服务端问题排查对开发而言是家常便饭,问题并不可怕但要花大量时间去处理;另一方面故障的快速解决至关重要。 目前问题排查最大的障碍是什么呢?我们认为有以下几个原因: 大量的告警信息。链路的复杂性。排查过程繁复。依赖经验。…

Bespin Global荣膺“Gartner2020全球公有云基础设施管理服务提供商魔力象限领导者”

近日,国际权威调研机构Gartner发布了《2020全球公有云基础设施管理服务提供商魔力象限》报告,Bespin Global(贝斯平)被评为行业领导者,成为东亚唯一连续四年入选Gartner云MSP魔力象限以及东亚唯一进入领导者象限的科技…

Gartner:2019年公有云服务六大趋势

作系:Gartner杰出研究副总裁Ed Anderson、Gartner研究副总裁David Ackerman、Gartner研究副总裁Sid Nag、Gartner高级研究总监吴涛 在2017年至2018年间,云服务市场发生了巨大的变化。企业机构从低风险地尝试使用云转向全面、大规模地使用云。云项目已进入…

大促背后的流量利器|手淘push升级 比你更懂你

导读:过去的很长一段时间内,由于电商的强运营特性,手淘 App 的 Push 消息大部分时候是作为一个活动通知的通道,对重要活动进行通投引流。然而在竞争环境更加激烈和用户渗透日趋饱和的今天,具备更加精细化的用户运营手段…