作者:dbaplus社群 2022-04-26 10:36:34
运维
云原生
新闻 本文围绕“从监控到可观测性应如何转变与升级”这一话题,希望可以帮助广大技术从业者准确认识可观测性、给企业搭建适配自身发展的可观测体系提供建议和启发。
随着大量云原生技术的应用,IT系统日益复杂,主动感知、预测故障并迅速定位、排障的难度变得越来越大,传统监控方式已无法跟上需求,由此应运而生的可观测性,被视为未来云环境生产部署不可或缺的技术支撑。
目前大多数传统企业对可观测性仍处于初步了解阶段,不少互联网公司在可观测性建设上也是起步不久。因此,围绕“从监控到可观测性应如何转变与升级”这一话题,本期dbaplus话题接力专栏,特别采访到知乎全链路可观测系统和接入层网络负责人-熊豹、虎牙直播SRE平台研发团队负责人-匡凌轩、好大夫基础架构部高级工程师-方勇三位老师,希望能通过他们在可观测性领域的研究心得和实践经验,帮助广大技术从业者准确认识可观测性、给企业搭建适配自身发展的可观测体系提供建议和启发。
监控是常见的运维手段,一般是指以观测系统的外部资源使用情况和接口表现来推测系统运行状态,即感知到“正在发生什么”。
可观测性是一种属性,是指在可以感知系统当前运行状态的性质,提升系统的可被观测的性质有助于我们了解“正在发生什么”以及“为什么会这样”。
云原生架构在业内逐步落地,给稳定性建设带来了更多新的挑战:迭代发布更迅速、业务系统更庞大、网络链路更复杂、运行环境更动态。在这样的混沌系统中仅仅只是知道问题发生是不够的,在这样纷繁复杂的环境下赤手空拳的我们很难去进行问题的追踪和溯源。我们要依托分层、多维度的观测数据来构建更立体和智能的诊断系统,以更多样的视角来观察和解读系统。
我认为监控是可观测性能力的一部分,初期监控主要是外部对业务应用系统的主动行为,运维是传统监控的使用主体,如:通过业务进程状态、系统资源等监控数据的分析和告警来发现问题。而现在可观测性更多是对业务应用系统自身的要求,如何设计去暴露出更多可被观测的应用运行时的数据,并为这些数据之间建立关联,如:微服务框架在请求处理和RPC调用时提供一些AOP扩展的设计,可以更方便地对请求进行Metric度量和Trace追踪,以及异常情况的上下文关联。
两者的关系:监控和可观测性都旨在辅助建设高可用的服务,缩短故障处理时长,两者往往是密切协作的,界限相对模糊。
两者的区别:监控往往关注告警触发的瞬时状态,一般围绕告警事件展开,涉及从告警事件的产生到应急响应等一系列动作。关注的视角一般是局部可用性,关注每个具体的监控项,如CPU负载、剩余内存等。监控是个老生常谈的话题,最常见的场景是系统资源监控、进程或服务状态的粗粒度监控。对定制化的业务指标监控不太友好,另外传统的监控体系对云原生的支持、对微服务体系监控的支持也不太友好。
可观测性可以看作是监控的一种延续,涉及面较广,包括全链路分析(APM)、业务服务质量(SLA)、业务容量等,聚焦服务的整体可用性。关注的视角一般是全局可用性,会忽略不影响服务质量的一些指标,如CPU负载高,服务整体时延波动不大就会忽略这个CPU负载指标。
可观测性的应用场景一般与业务能力相绑定,通过可视化聚合展示影响SLA的相关指标(SLI),再配合监控告警,通过可观测性看板下钻分析异常根因。另外可观测性打通Metrics/Traces/Logs后可主动识别出服务的潜在风险,能先于用户发现问题。
可观测性也有所局限,由于需要收集业务数据,对业务具有一定的侵入性,加上打造可视化平台投入成本较高。另外可观测性整体处于初期阶段,很多工具链还不太完善,价值预期其实是被高估了。
Q2从监控到可观测性都有哪些变化?对运维、开发、架构师等岗位人员分别提出了怎样的新要求?
目标不一样了,除了要知道“正在发生什么”,还要尝试解释“为什么会这样”。我们需要把可观测性的理念贯穿到架构和程序设计中,而不是到事发或事后再来补救。我们需要有意识地设计一些机制来观察业务指标的关联变化、系统架构的数据漏斗模型、程序内逻辑分支的运行开销、外部资源依赖的健康状态,还要暴露程序内的一些资源并发度、池的填充率和命中率、运行时的状态等情况,当运行错误时也要在错误信息中携带足量的上下文信息。
运维同学要为可观测场景提供更坚实的工具基础,在上述庞大的数据压力下,保障和解决数据存储和查询的性能、资源开销、集群的拓展性和稳定性等问题。
我认为最大的变化是应用系统自身角色的转变,从被动监控转向主动发现与定位问题,在设计应用系统架构之初就需要考虑到系统自身的可观测性建设。运维、开发、架构师都是各环节设计的参与者,在协作方式也有一定的改变:
总体来说,需要各角色有更多跨技术领域的知识储备、业务思维和模型抽象能力。
个人认为主要变化有以下几个方面:
对不同岗位人员也有新的要求:
可观测性建设的核心关注点还是在数据的采集、存储、分析环节。
数据采集的覆盖可以以多种角度来看:可尝试梳理完整的数据链路,来覆盖从终端发起、网关、业务、基础设施中间的每一层组件;可以不同的观测视角进行覆盖,比如Metrics、Traces、Logs、Exception Collection、Profiler、Debuger、Changelog等类别的数据或能力都已建设齐备;可以多种维度来观察系统,比如业务维度、资源瓶颈、关联组件等维度进行覆盖的建设。
数据存储环节要关注多种类型数据的存储和查询系统选型。最为常见的是Metrics、Traces、Logs相关的存储系统,这三者都有非常广泛的基础软件选型。其中相对棘手的是指标维度爆炸、日志和Trace存储成本及性能相关的问题,一般需要搭配预聚合、前采样和后采样、存储分级等策略来解决。
数据分析环节要关联不同数据源的元信息,糅合以多维视角来构建查询界面。同时,我们也要关注如何在海量的原始数据中找到一些突出和异常的数据,一般需要建设一些流式检测和聚类分析的能力。
可观测性的核心思考:需要采集什么数据、如何建立关联、如何设计模型,我们以应用服务场景为例:
以上可指导我们针对不同的业务应用系统进行合理抽象,建设更标准的可观测性能力。
常用方法论:
1、SLI选择:
2、MDD(Metrics-Driven Development)思想:MDD主张整个应用开发过程由指标驱动,通过实时指标来驱动快速、精确和细粒度的软件迭代。指标驱动开发的理念,不但可以让程序员实时感知生产状态,及时定位并终结问题,还可以帮助产品经理和运维人员一起关注相关的业务指标。
关键技术:
1、数据收集:如果是基于Prometheus生态,有丰富的Exporte可用,还可以自研相应的Exporter。如果基于文件日志收集,可考虑Flume、Fluentd等等。
2、数据分析:可基于Clickhouse SQL分析提炼日志指标,如果是Prometheus体系,也有丰富的PromQL可用来分析相关指标。针对Traces、Logs分析一般采用自研分析引擎,并与Metrics打通。
3、数据存储:Prometheus本身就是一款很好的时序数据库,但不支持分布式存储。一般采用远程存储引擎搭配使用,常用Clickhouse、InfluxDB等。Traces和Logs一般可采用Elasticsearch存储。
4、数据展示:数据最终呈现形式,需要契合可视化设计规划,支持上卷/下钻。大部分需求可采用Grafana呈现,Grafana提供了丰富的插件,支持丰富的数据库类型,也可基于Echarts自研。如果托管公有云,可充分利用公有云自有的体系,不过有些需要单独付费。
我们已知的有两类方式:
1、基于时间范围内的统计关系:一般的使用习惯是在Metric异常的时间区间里去找到对应时间区间出现异常行为的Traces和Logs,这种方式会依赖对Traces和Logs的聚类分析能力。
2、基于Label和TraceID关联:基于OpenTelemetry Collector可观测数据采集的框架,我们可以以插件的形式、以Trace Span元数据Label来生成访问指标,也同时将TraceID携带记录到日志的元信息中,这样就能以同样的TraceID或Label维度进行关联查看了。另外当前Prometheus实现了一个exemplar特性可以将Metric与TraceID关联存储,这个设计也挺有意思的。
三者打通最大的价值是能做到全链路错误寻根,即从发现请求Metric指标异常,通过指标关联分析,并逐层下钻到明细Trace追踪和具体Error Log,全流程自动化从宏观到明细的错误发现和根因定位。
虎牙为三者统一设计了应用监控模型,包括应用服务的透明零成本SDK接入,三者数据自动采集和关联,以及在虎牙大型分布式系统充分实践的全链路错误寻根算法。就整体实践经验来说,最终业务价值在于帮助研发和运维提高了应用服务的排障和治理效率。
从投入成本(CapEx)、运维成本(OpEx)、响应能力(Reaction)、查问题的有效程度(Investigation)几个方面分析。Metrics、Logs、Traces具有以下特征:
Logs和Traces一般采用trace_id打通,trace_id一般在端入口生成,贯穿整个请求的生命周期,业务记录Logs的时候可记录当前的trace_id,这样Logs和Traces就能打通了。
与Metrics打通一般是采用标签Tags模式,如某个服务servername产生的metrics可与Traces中的servername关联。
打通后可以服务名的维度,立体、全息分析整个服务的可用性。
我们关注可观测工具系统的这些特性:
虎牙主要是基于OpenTracing标准进行的深度自研和扩展,通过业界标准来做会有充分的开源代码和社区支持,可以节省很多基础代码的工作,让我们更关注自身的业务系统特性和模型设计。现在OpenTelemetry对Metrics、Traces、Logs三者提供了统一标准,开源社区热度也比较大,是个值得去研究和实践的方向。
可观测性工具选型建议可考虑两个方面:
可观测性分析整个技术栈可参考如下图:
工具选型:
其实技术选型没什么特定的标准,每个企业不同阶段可能有不同的选择,适合自己的才是最好的,这里总结几点心得:
文章标题:从监控到可观测性,设计思想、技术选型、职责分工都有哪些变化
网页地址:http://www.shufengxianlan.com/qtweb/news16/328366.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联