爱奇艺微服务监控的探索与实践

标签: 爱奇艺 微服务 监控 | 发表时间:2020-06-14 02:03 | 作者:老马
出处:http://weekly.dockone.io

作为一线程序猿,是否有过类似经历?新接手一个系统,各接口入口流量是多少,又是哪些业务方在调用?系统大量异常报警,如何快速锁定影响范围,恢复故障并定位问题?

监控的重要性不言而喻,可是接入监控的额外工作又让人望而却步?每天编写代码之余,又要花多少时间定位线上问题?自己负责的系统故障,是否要等调用方反馈才知道?本文分享爱奇艺有关微服务监控的实践和思考。

如文章《 爱奇艺视频后台从“单兵作战”到“团队协作”的微服务实践》所述,2018年爱奇艺信息流技术团队基于Spring Cloud和公司服务云组件,实现了业务系统的全面微服务化。微服务的拆分,一方面提升了服务负责人的ownership,助力业务快速迭代。另一方面,随着微服务的增加,监控成本随之增加,构建简单有效的微服务监控体系的诉求愈发强烈。本文从以下3个方面展开介绍。
  • 背景&初探:介绍建设微服务监控体系的背景,微服务监控体系建设初期的探索和尝试。
  • 演进&实践:基于早期微服务监控探索和思考,落地微服务微服务监控体系的具体实践。
  • 总结&展望:总结微服务监控建设过程中的实践和思考,以及工作规划。


背景&初探

经过一年多的野蛮生长,信息流团队微服务发展快速,人均负责5个微服务以上,为了全面了解每个微服务运行情况,第一时间感知微服务异常,快速定位线上问题,提高运维效率,微服务建设初期我们尝试了多种监控方案。

这个阶段,我们对微服务监控缺少系统的理论认知和实践经验,所以更多是对已有的监控基础设施和框架低成本的整合和适配。

下面分别从日志监控,Hystrix监控,Actuator监控,拨测监控5个方面介绍。

日志监控

基于日志的监控方案,原理如下图,业界技术方案成熟(例ELK),公司也提供了通用解决方案(Venus),容易落地。缺点是,日志监控链路较长,延迟时间大,报警可能不够及时。

Hystrix监控

很长一段时间Hystrix是服务熔断降级监控的代名词,Spring Cloud应用中使用hystrix极致易用,从低成本埋点,到配置动态调整,再到原生的可视化Dashboard,使用成本都很低。缺点是,指标数据原生没有持久化,二次开发有一定成本。

下图描述基于Hystrix监控的方案。

Actuator 监控

Actuator端点是Spring Boot应用开发者的最大福利之一,可以零成本了解单实例运行情况。缺点是,同服务多实例指标聚合,指标持久化,指标时序可视化,都需要二次开发。下图描述Actuator端点监控的方案。

拨测监控

对于面向用户的服务,用户所处网络,地域差异性很大,应用本身可用不代表用户可以正常使用服务,这就需要从用户角度,对服务可用性进行定时拨测。

下图描述拨测监控的方案,主要包括微服务实例自发的健康检查和各拨测点定时拨测。

链路监控

链路监控既可用于调用链路分析,快速定位具体问题,又可用于梳理服务拓扑结构和依赖合理性,是微服务监控必不可少的一环。

我们使用公司服务云提供的日志收集组件Venus(如前所述)和链路跟踪组件Rover(基于Skywalking+Brave)实现该功能。实现方案如下图所示。

其中,接入固定成本表示为引入相应监控而产生的一次性固定投入,包括学习调研,二次开发,集成适配等成本。接入边际成本表示每新增一个微服务或一个监控指标,新产生的开发配置成本。几种监控方案对比和适用场景如下表所示。

演进&实践

如上所述,我们在微服务监控建设初期尝试了多种监控方案,实现了不同场景下的监控需求,也遇到了新的问题。概括起来,有以下几个:
  • 缺少对监控项的统一认知和定义
  • 重复性埋点配置工作,监控成本高
  • 各种监控方案简单组合,可视化分散,报警不统一
  • 日志监控,报警时效性无保障


比如,每新增一个监控指标,需要把接入,埋点,可视化,报警,从头来一遍,随着微服务和指标增加,这种重复性工作严重制约了监控体系的推广落地。特别是Metric监控,指标繁杂,维度多变,应用广泛。

为此,建设一套监控模型统一,接入成本低,可视化集中管理,报警时效性高,监控指标全面的微服务监控体系势在必行。下面着重介绍信息流监控系统针对Metric监控的实践。

信息流Metrics监控在Prometheus基础上,以构建简单易用的监控系统为目标,对Spring Cloud框架进行适配整合和定制开发。整体结构如上图,我们主要做了以下工作。

监控模型

监控指标是监控系统的基本对象,监控哪些指标,如何定义描述这些指标,是首要解决的问题。我们通过引入指标-维度-数值多维度数据模型,对常用监控指标和维度进行梳理和定义,形成对监控对象的统一描述和共识,为后续实现维度灵活聚合、定义统一的可视化模板和报警模板奠定基础。

通用指标定义:

通用维度定义:

自动接入&埋点

前期我们尝试了多种监控方案,发现能够顺利推广落地的,都有一个共同点,就是服务接入监控的成本很低。最好是不要求应用做任何改动,就可以自动接入,享受监控系统带来的便利。为此我们做了以下工作:
  • 每个服务引入sdk自动完成通用指标(Http请求,JVM指标等)采集,并暴露指标拉取端点
  • 每个服务自动注册到Eureka注册中心
  • Eureka增加Adapter,提供监控系统可识别的接口方法
  • 监控系统从注册中心,自动发现要监控的服务实例列表
  • 监控系统定期从服务指标端点拉取监控数据



声明式方法监控

很多情况下,需要对某些业务方法耗时进行监控,传统的埋点方式是在方法入口和出口添加监控代码,业务代码侵入高,开发成本高。

PUSH模式扩展

如前所述,Prometheus是用PULL模式获取应用埋点数据,但是有的场景下PULL模式并不适用(比如短生命周期的任务),因此我们基于Prometheus提供的Pushgateway组件,实现PUSH模式获取监控埋点数据。

一种应用场景是,实时收集各个服务日志流中的异常信息。我们监听日志采集的Kafka消息,Flink实时解析出服务异常名称,将各个服务产生的异常实时推送到监控系统,并在Grafana上集中展示。基于Pushgateway的异常监控方案及效果图如下。

集中可视化

不同的监控系统,往往会提供不同的可视化方案。分散的可视化,不利于监控数据的集中展示和全局问题分析。我们使用Grafana实现所有微服务,所有指标的集中可视化。

每个微服务使用统一的监控模板,集中展示各服务入口流量、内部方法、JVM等相关指标。Dashboard模板主要包含以下模块:
  • 维度筛选模块
  • JVM和系统指标模块
  • 入口流量机房分布&状态码&QPS&响应延时模块
  • 方法监控指标模块


统一报警

基于前边定义的通用指标和维度,对所有指标配置默认的报警规则,同时支持自定义报警规则和阈值。基于Grafana Web hook将报警通知发送给Alert Manager,Alert Manager对报警进行相同合并、重复过滤、并格式化为统一报警模板后,投递到爱奇艺统一报警平台,业务owner通过统一报警平台完成报警订阅。统一报警方案及报警样例如下图。

以上所述,爱奇艺信息流监控整体方案总结如下。

自下至上包括4层:
  • 监控对象既包括常驻进程微服务,也包括短生命周期的非常驻进程。
  • 指标获取方式既可以基于Prometheus实时拉取,也可以基于Venus日志收集,前者用于指标实时获取,保证监控报警时效性,后者记录详细日志,用于具体问题排查和链路分析。

  • 监控维度从4个维度监控应用:
    • Metrics监控宏观上检测系统QPS,响应耗时,错误率和资源利用率;
    • 拨测监控从用户角度监控服务可用性;
    • 链路监控提供单个请求完整生命周期的跟踪路径,专门应对微服务架构带来的分布式调用复杂性;
    • 日志查询提供应用监控最精细化的信息,用于具体问题排障。

  • 集中管理,集中可视化和统一报警管理,在最上面一层,便于排查问题时全面快速获取应用所有监控报警信息。另外,微服务监控的统一认知和必要的流程规范,贯穿监控系统落地始终。


监控系统落地1年多,新增服务基本实现零成本100%接入自动埋点、集中可视化和统一报警,业务owner不需要为接入监控做额外工作,就可以享受监控带来的各种便利;系统异常发生后,可以做到秒级收到报警,借助微服务监控大盘,配合链路监控和日志查询,分钟级确认异常影响范围并定位问题,大大减少故障恢复时间,提升运维效率;目前该方案也在多个其他团队推广落地。

总结&规划

本文介绍了爱奇艺信息流团队微服务监控的探索和实践,涵盖了日志监控,Hystrix监控,拨测监控,链路监控,Prometheus监控等,从最初的多种监控方案兼容并包,到基于多维度数据模型和集中可视化的定制开发。不能简单说,后面的监控方案比前期的好,而是在微服务监控不同发展阶段,监控体系建设投入和收益的折中选择。下面是微服务监控探索过程中一些心得。
  • 简单有效。简单有效是评测监控系统好坏的最高准则,埋点是否简单甚至可省去,是否存在重复性的配置工作,都会影响监控方案能否最终落地推广。好的监控方案一定是,没有故障时,开发人员无感知,出现故障时,想看的指标都能拿到。
  • 集成定制。业界和公司提供了固定场景下的监控框架和方案,基于这些成熟的方案和基础设施,会大大减少监控系统建设投入;另一方面,必要的定制开发封装,会进一步推动自动化监控落地。
  • 集中管理。考虑监控指标的多样性(系统,应用,业务等),不同监控方案关注点不同,指标埋点,收集,获取未必仅用一套,但是可视化应该尽可能集中,方便统一管理和全局分析。
  • 流程规范。微服务监控不是一个人或少数几个人的事,也不应该微服务上线后才被关注,它需要每位微服务owner,从编码,甚至设计阶段,就要考虑监控指标和维度。为了减少监控带来的额外负担,保障落地效果,必要的流程规范和分享培训是必要的。


以上是监控实践的阶段性探索实践总结,未来还有很多方面需要持续的优化和改进,例如灵活的报警规则,恰如其分的报警,更低成本的埋点、可视化,服务质量评测报告等。另外,依托大数据分析和人工智能能力,系统异常检测,根因分析,智能合并,故障预测和自恢复技术愈发成熟,推动AI赋能数字化运维落地也是我们努力的方向。

原文链接: https://mp.weixin.qq.com/s/UlrdpnbeBkF9o_MemqMh_g

相关 [爱奇艺 微服务 监控] 推荐:

爱奇艺微服务监控的探索与实践

- - DockOne.io
作为一线程序猿,是否有过类似经历. 新接手一个系统,各接口入口流量是多少,又是哪些业务方在调用. 系统大量异常报警,如何快速锁定影响范围,恢复故障并定位问题. 监控的重要性不言而喻,可是接入监控的额外工作又让人望而却步. 每天编写代码之余,又要花多少时间定位线上问题. 自己负责的系统故障,是否要等调用方反馈才知道.

爱奇艺号基于Prometheus的微服务应用监控实践

- - DockOne.io
微服务架构是目前各大互联网公司普遍采用的软件架构方式. 在微服务架构中,系统被拆分为多个小的、相互独立的服务,这些服务运行在自己的进程中,可以独立的开发和部署. 在业务快速变化时,微服务单一职责、自治的特点,使系统的边界更加清晰,提升了系统的可维护性;同时,简化了系统部署的复杂度,可以针对某个微服务单独升级和发布;在业务增长时,也可以方便的进行独立扩展.

爱奇艺视频后台从“单兵作战”到“团队协作”的微服务实践

- - DockOne.io
系统越做越大,功能越加越多,我们是否有如下经历:. 一次小的需求,评估由此产生的影响成本超过开发需求本身. 系统几经交接或升级,接口文档丢失或跟代码严重不符. 每天疲于排查线上问题和修复线上数据,没有精力代码优化. 由于创建/开发/部署新服务的成本,不断的将无关的功能添加到臃肿的服务. 线上服务一个功能或者中间件的中断,导致整个系统不能提供服务.

Blog: 考虑所有微服务的脆弱性并对其行为进行监控

- - Kubernetes – 生产级别的容器编排系统
作者:David Hadas (IBM Research Labs). 译者:Wilson Wu (DaoCloud). 本文对 DevOps 产生的错误安全意识做出提醒. 开发和配置微服务时遵循安全最佳实践并不能让微服务不易被攻击. 本文说明,即使所有已部署的微服务都容易被攻击,但仍然可以采取很多措施来确保微服务不被利用.

初识微服务

- - ITeye博客
微服务架构越来越火,有必要学习一下. 软件开发过程中碰到什么问题. 一个简单的应用会随着时间推移逐渐变大. 在每次的sprint中,开发团队都会面对新“故事”,然后开发许多新代码. 几年后,这个小而简单的应用会变成了一个巨大的怪物. 一旦你的应用变成一个又大又复杂的怪物,那开发团队肯定很痛苦. 敏捷开发和部署举步维艰,其中最主要问题就是这个应用太复杂,以至于任何单个开发者都不可能搞懂它.

2015年爱奇艺营收52.9亿 运营亏损23.8亿

- - 199IT互联网数据中心
中国网络视频领域正发生微妙变化. 就在上周,合一集团(优酷土豆)宣布与阿里巴巴集团已完成合并交易,正式成阿里巴巴旗下全资子公司,优酷土豆已经正式从美股市场退市. 优酷土豆CEO古永锵表示,公司选择私有化目的有三个,回归国内资本市场,与阿里联动、超越纽约,现在优酷土豆已启动国内上市计划,目标是3年之内在国内资本市场上市.

爱奇艺短视频打标签技术解析

- - IT瘾-dev
写在前面 最近几年出现了很多以短视频的创作和分发作为主打的手机应用软件,这极大地丰富了文本和图像之外的信息创作和分发方式. 这些短视频应用自从问世以后,便迅速地占领了市场,得到了广大用户的青睐. 目前,短视频正逐渐成为互联网上的一种重要的信息传播方式,由此产生了大量的短视频数据. 为了更好地利用短视频数据,提升短视频的创作和分发效果及效率,需要为短视频打上各种有用的标签,这些标签可以作为短视频所记录的内容的概括和总结.

爱奇艺短视频分类技术解析

- - 机器之心
近年来,短视频领域一直广受关注,且发展迅速. 每天有大量UGC短视频被生产、分发和消费,为生产系统带来了巨大的压力,其中的难点之一就是为每个短视频快速、准确地打上标签. 为了解决人工编辑的时效和积压问题,自动化标签技术成为各大内容领域公司都非常关注的关键课题. 短视频大规模层次分类作为内容理解技术的一个重要方向,为爱奇艺的短视频智能分发业务提供着强力支持,其输出被称为“类型标签”.

OCR技术在爱奇艺的应用实践及演进

- - 掘金 后端
随着人工智能的热度上升,图像识别这一细分领域也渐渐被人们所关注. 在很多公司的业务中,有很多需要对图片进行识别的需求. 为了帮助业务实现对这些图片、文档的识别和结构化,业界进行了一系列的实践和探索,最终确定了一些可行的方法,总结了在实践过程中可能遇到的问题和难点. 为了更好地了解OCR技术在爱奇艺的应用实践,最近,InfoQ“大咖说”栏目邀请爱奇艺智能平台部助理研究员——Harlon 进行了一场直播分享,结合目前的业务需求,为我们陈述了爱奇艺在探索OCR技术发展过程中遇到的痛点和难点,以及识别技术的一些细节,以下是采访实录.

谈微服务架构

- - 人月神话的BLOG
其实在前面很多文章谈到SOA,特别是系统内的SOA和组件化的时候已经很多内容和微服务架构思想是相同的,对于微服务架构,既然出现了这个新名称,那就再谈下微服务架构本身的一些特点和特性. 从这个图可以看到微服务架构的第一个重点,即业务系统本身的组件化和服务化,原来开发一个业务系统本身虽然分了组件和模块,但是本质还是紧耦合的,这关键的一个判断标准就是如果要将原有的业务系统按照模块分开部署到不同的进程里面并完成一个完整业务系统是不可能实现的.