COP344 | 可观察性:现代应用程序的最佳实践
关键字: [Amazon Web Services re:Invent 2023, OpenTelemetry, Observability, Best Practices, Modern Applications, Open Telemetry, Tracing]
本文字数: 2300, 阅读完需: 12 分钟
视频
导读
出现应用中断或运营事故时,应该客户受到影响前尽快解决问题,这是至关重要的。对于现代容器化或 Serverless 应用程序,由于其分布式性质,这一挑战被放大了。在本次分享中,学习现代应用架构的可观察性最佳做法。了解如何使用亚马逊云科技的可观察性服务来快速识别、诊断和补救应用问题。
演讲精华
以下是小编为您整理的本次演讲的精华,共2000字,阅读时间大约是10分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。
亚马逊云科技的全球云原生应用总监Roland主持了这场内容丰富的讲座。他以热情洋溢的语调阐述了他帮助客户在亚马逊云科技平台上成功构建、部署和运行现代云原生应用的职责。接着,负责领导超过1000名成员的技术社区的亚马逊云科技云计算运营技术专家Greg加入讨论。他曾担任亚马逊云科技的观察性解决方案架构师。
Roland阐述了为何与传统单体应用程序相比,现代应用程序在运营和观察方面更具挑战性。他强调,随着现代应用程序变得越来越分布式,许多微服务通过API和异步事件进行通信。这种分布和松散耦合虽然有利于开发者,但也给运营团队带来了诸多管理难题。
为了展示这些差异,Roland以过去的情况为例,那时常见的Java EE大型单体应用程序使用单一编程语言(如Java)和统一平台(如J2EE),因此很容易监控一个庞大的应用程序服务器。如今,一个单一的现代应用程序可能包含10个或更多用不同语言(如JavaScript、Java和Python)编写的微服务。这些服务被部署到不同的环境中,如使用亚马逊云科技ECS的容器、亚马逊云科技Lambda上的无服务器函数以及运行在亚马逊云科技EC2上的传统虚拟机。团队专注于使用针对每个服务的DevOps管道构建独立可扩展的服务。这标志着向敏捷和去中心化的现代应用程序的转变。
然而,这种转变的代价是难以追踪跨可用区、地区、集群和各种内部VPC网络的请求。一个单次端到端交易可能跨越Lambda函数、容器、消息队列、数据库等。这种分布为一致的观察性带来了巨大挑战。
Roland强调,观察性不仅仅是被动监控,而是构建系统以主动解决问题并解决生产问题。目标是将日志、指标和轨迹作为整个系统生命周期的第一级公民。
他再次强调,现代应用程序需要将可观察性作为首要问题来思考,而非事后再去考虑。微服务的目标是自底向上地构建可观察的应用程序。亚马逊首席技术官沃纳·维格尔斯(Werner Vogels)支持“一切总会失败”的理念——熵定律确保了系统随着时间的推移必然会崩溃。因此,弹性需要从一开始就被纳入到可观察性中。
在转向应用开发策略的过程中,罗兰介绍了两种主要方法。第一种是无服务器方法,通过Lambda函数、容器和基础设施代码工具(如亚马逊云科技的CloudFormation和CDK)来实现。这使得团队可以利用亚马逊云科技的服务作为模块化的构建块。
第二种方法是使用Kubernetes作为主要的计算平台,无论是使用亚马逊云科技的Amazon EKS还是自管理的Kubernetes集群。他指出,根据CNCF的一项调查,目前超过60%的Kubernetes工作负载在亚马逊云科技上运行。关键是,可观察性的最佳实践适用于无服务器和Kubernetes应用程序架构两者。
在这个背景下,罗兰让他的同事Greg详细介绍四个可观察性的最佳实践。Greg立即开始了第一个实践——导航仪器选项。他解释了如何在亚马逊云科技和客户之间分担可观察性的责任。亚马逊云科技服务会自动发出指标并生成日志以供Amazon CloudWatch使用,但团队需要添加自定义仪表板以捕捉业务逻辑和应用代码。对于在亚马逊云科技上的无服务器应用程序,Greg建议启用亚马逊云科技X-Ray追踪。这自动跟踪Lambda函数的执行过程,而无需进行任何代码更改。任何来自Lambda函数的下游调用都需要X-Ray SDK来传播追踪上下文。对于容器,OpenTelemetry提供了一种收集指标和轨迹的供应商中立方法。对于日志,选项如Fluent Bit或CloudWatch Logs可以满足这一需求。Greg指出,目前还没有一个单一的解决方案能够处理所有三种信号-指标、日志和轨迹。但是OpenTelemetry通过支持用于这些信号的开源标准来提供一致性。
在第二点最佳实践中,Greg探讨了解决如何优化高基数遥测成本的方法。他解释了额外的维度和粒度如何导致潜在指标数量的指数级增加。在CloudWatch中,1000个自定义指标的每月费用约为300美元,而1000万个指标的每月费用将飙升至近250,000美元。
为了应对这一问题,Greg建议采用云监控日志初始接收遥测数据,并从日志中创建聚合指标,仅将重要的维度转换为指标。例如,不要为每个临时任务或容器ID创建资源和容器指标。
云监控嵌入式指标格式允许将高基数维度组合为高效的日志,同时生成适用于仪表板和警报的聚合指标。OpenTelemetry收集器支持通过此功能发送指标。
Greg分享了一个英国电信公司的客户案例,他们使用了这种方法。在英国,他们拥有数百万个家庭集线器设备,每5分钟发出一次遥测数据。通过利用指标聚合,他们将最初的2000万个指标减少到仅2000个适合仪表板的指标,节省了大量成本。
结论是利用指标和日志,避免将所有内容作为昂贵的自定义指标发送的陷阱。应用智能聚合来控制基数爆炸。
进入第三点最佳实践,Greg探讨了降低警报疲劳的策略。他强调了直接与业务结果关联的关键指标。例如,电子商务网站会关心订单率或每秒处理订单数量。基于可能立即影响用户和收入的异常情况建立警报。
他警告要避免误导的基础设施指标,如不直接表示用户面对问题的高CPU利用率。例如,批量作业期间的短暂CPU尖峰可能会触发不必要的警报。
相反,Greg主张跨服务相关指标并在当多个令人担忧的问题同时发生时光发出警报。例如,在一个运行在Windows和IIS上的.NET应用程序中,高CPU使用率本身并不令人恐慌。但是,高CPU加上可用内存的急剧下降表明应用程序池正在回收,这严重影响了用户。单独的任何一个指标都无法捕捉到情况的严重性。
格雷格建议采用CloudWatch合成金丝雀来模拟用户旅程,以便提供典型的用户体验基线并捕捉功能退化。在金丝雀指标上启用异常检测使得服务能够自动学习正常模式并相应地调整阈值。通过关联复合警报,仅在满足多达1500个警报树中的多个关键条件时向人员发出警报,从而减少通知疲劳。了解哪些服务自动传播踪迹,哪些需要手动注入上下文以避免混淆。对于不支持的服务,开发人员需要在消息和头部中手动注入踪迹上下文,然后在下游恢复上下文。这确保了在所有系统边界内端到端传递踪迹。格雷格强调了解哪些服务自动传播踪迹,哪些需要手动注入上下文。他建议在所有应用程序代码中进行仪表化,查阅亚马逊CloudWatch X-Ray文档关于支持服务的文档。对于Amazon SQS和Amazon SNS之类的消息队列,上下文传播是自动的。然而,对于像Amazon MQ或MSK这样的服务,需要进行代码更改以传递踪迹上下文。避免提供有限的可视性的分布式事务的、令人混淆的悬挂踪迹的回报是值得的努力。格雷格总结了四个最佳实践:采用OpenTelemetry、应用智能指标聚合、启用智能报警以及确保完整踪迹传播。他指出了一些有用的资源,如亚马逊可观察性工作坊、亚马逊为OpenTelemetry提供的Distro和一个新的可观察性技能构建器课程。随着会议的结束,罗兰回到了对现代应用程序可观察性的深入讨论上来。他感谢格雷格和与会者参加,强调了重新思考云原生应用的可观察性策略的重要性。演讲者的热情和建议丰富,很明显,他们旨在全面装备观众在亚马逊云科技上构建可观察和有弹性的系统。
下面是一些演讲现场的精彩瞬间:
格雷格·苹果(Greg Apple)担任云计算运营的技术负责人,负责监督合规管理,并领导一个拥有约1000名成员的内部分享技术社区。
亚马逊云科技的领导者指出,随着现代应用程序变得越来越分布式和复杂,包括微服务、无服务器和容器等技术,与传统单体应用程序相比,观测性变得更为困难。
这位领导人强调,现代应用程序通常使用多种编程语言,并利用不同的托管平台,如Lambda、容器等。
尽管微服务实现了敏捷和快速的开发,但同时也带来了监控和观测的复杂性。
因此,从一开始就构建可观测性的应用程序至关重要。
亚马逊云科技的领导者还探讨了亚马逊云科技的观测策略,以及客户如何使用亚马逊云科技的本地服务或与其他流行的开源工具集成来实现观测的各种选择。
总结
现代应用正逐渐采用微服务和无服务器架构,这使得监控系统运行状况和排查问题的过程变得更加复杂。以下视频提供了四个实用建议。首先,采用OpenTelemetry来收集指标和追踪,并选择合适的独立日志记录代理。这样可为可观察性数据提供一个开放的标准。其次,优化成本的方法是将高基数遥测数据同时作为日志和指标发送。日志虽然相对便宜但速度较慢,而指标则有助于平衡成本和性能。第三,针对关键指标和相关警报建立关联,并通过设置动态阈值减少警报疲劳。最后,对所有代码进行仪器化,以便自动识别哪些服务在传播追踪。对于不支持的服务,跨越边界传播追踪上下文可以避免悬空的追踪。遵循这些建议将有助于改善现代复杂应用的监控效果。
演讲原文
想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站!
2023亚马逊云科技re:Invent全球大会 - 官方网站
点击此处,一键获取亚马逊云科技全球最新产品/服务资讯!
点击此处,一键获取亚马逊云科技中国区最新产品/服务资讯!
即刻注册亚马逊云科技账户,开启云端之旅!
【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”
亚马逊云科技是谁?
亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者,自 2006 年以来一直以不断创新、技术领先、服务丰富、应用广泛而享誉业界。亚马逊云科技可以支持几乎云上任意工作负载。亚马逊云科技目前提供超过 200 项全功能的服务,涵盖计算、存储、网络、数据库、数据分析、机器人、机器学习与人工智能、物联网、移动、安全、混合云、虚拟现实与增强现实、媒体,以及应用开发、部署与管理等方面;基础设施遍及 31 个地理区域的 99 个可用区,并计划新建 4 个区域和 12 个可用区。全球数百万客户,从初创公司、中小企业,到大型企业和政府机构都信赖亚马逊云科技,通过亚马逊云科技的服务强化其基础设施,提高敏捷性,降低成本,加快创新,提升竞争力,实现业务成长和成功。