指标|爱奇艺微服务监控的探索与实践 选型宝精选阅读( 二 )


我们使用公司服务云提供的日志收集组件Venus(如前所述)和链路跟踪组件Rover(基于Skywalking+Brave)实现该功能 。 实现方案如下图所示 。
指标|爱奇艺微服务监控的探索与实践 选型宝精选阅读
本文插图

其中 , 接入固定成本表示为引入相应监控而产生的一次性固定投入 , 包括学习调研 , 二次开发 , 集成适配等成本 。 接入边际成本表示每新增一个微服务或一个监控指标 , 新产生的开发配置成本 。 几种监控方案对比和适用场景如下表所示 。
演进&实践
如上所述 , 我们在微服务监控建设初期尝试了多种监控方案 , 实现了不同场景下的监控需求 , 也遇到了新的问题 。 概括起来 , 有以下几个:
? 缺少对监控项的统一认知和定义
? 重复性埋点配置工作 , 监控成本高
? 各种监控方案简单组合 , 可视化分散 , 报警不统一
? 日志监控 , 报警时效性无保障
比如 , 每新增一个监控指标 , 需要把接入 , 埋点 , 可视化 , 报警 , 从头来一遍 , 随着微服务和指标增加 , 这种重复性工作严重制约了监控体系的推广落地 。 特别是metrics监控 , 指标繁杂 , 维度多变 , 应用广泛 。
为此 , 建设一套监控模型统一 , 接入成本低 , 可视化集中管理 , 报警时效性高 , 监控指标全面的微服务监控体系势在必行 。 下面着重介绍信息流监控系统针对metrics监控的实践 。
指标|爱奇艺微服务监控的探索与实践 选型宝精选阅读
本文插图

信息流Metrics监控在Prometheus基础上 , 以构建简单易用的监控系统为目标 , 对Spring Cloud框架进行适配整合和定制开发 。 整体结构如上图 , 我们主要做了以下工作 。
监控模型
监控指标是监控系统的基本对象 , 监控哪些指标 , 如何定义描述这些指标 , 是首要解决的问题 。 我们通过引入指标-维度-数值多维度数据模型 , 对常用监控指标和维度进行梳理和定义 , 形成对监控对象的统一描述和共识 , 为后续实现维度灵活聚合、定义统一的可视化模板和报警模板奠定基础 。
通用指标定义:
通用维度定义:
定制扩展
自动接入&埋点
前期我们尝试了多种监控方案 , 发现能够顺利推广落地的 , 都有一个共同点 , 就是服务接入监控的成本很低 。 最好是不要求应用做任何改动 , 就可以自动接入 , 享受监控系统带来的便利 。 为此我们做了以下工作:
? 每个服务引入sdk自动完成通用指标(Http请求 , JVM指标等)采集 , 并暴露指标拉取端点
? 每个服务自动注册到Eureka注册中心
? Eureka增加Adapter , 提供监控系统可识别的接口方法
? 监控系统从注册中心 , 自动发现要监控的服务实例列表
? 监控系统定期从服务指标端点拉取监控数据
指标|爱奇艺微服务监控的探索与实践 选型宝精选阅读
本文插图

声明式方法监控
很多情况下 , 需要对某些业务方法耗时进行监控 , 传统的埋点方式是在方法入口和出口添加监控代码 , 业务代码侵入高 , 开发成本高 。
指标|爱奇艺微服务监控的探索与实践 选型宝精选阅读
本文插图

PUSH模式扩展
如前所述 , Prometheus是用PULL模式获取应用埋点数据 , 但是有的场景下PULL模式并不适用(比如短生命周期的任务) , 因此我们基于Prometheus提供的Pushgateway组件 , 实现PUSH模式获取监控埋点数据 。
一种应用场景是 , 实时收集各个服务日志流中的异常信息 。 我们监听日志采集的Kafka消息 , Flink实时解析出服务异常名称 , 将各个服务产生的异常实时推送到监控系统 , 并在Grafana上集中展示 。 基于Pushgateway的异常监控方案及效果图如下 。


推荐阅读