Topic 1 Question #1
一家公司有一个移动应用程序,该应用程序通过 HTTP API 调用应用程序负载均衡器 (ALB)。ALB 将请求路由到 AWS Lambda 函数。在任何给定时间,都有多个不同版本的应用程序在使用,包括部分用户正在测试的版本。应用程序版本信息定义在所有 API 请求中发送的用户代理标头中。
最近 API 进行了一系列更改后,该公司发现应用程序存在一些问题。该公司需要收集每个正在使用的应用程序版本中每次 API 操作的响应代码指标。一位 DevOps 工程师修改了 Lambda 函数,使其能够从用户代理标头中提取 API 操作名称、版本信息和响应代码。为了收集
所需的指标,这位 DevOps 工程师还需要采取哪些其他操作?
答案: A
本题要求为每个应用版本、每个API操作收集对应的响应代码指标,目前Lambda已成功提取出API操作名称、版本信息、响应代码三个核心字段。最优实现方案是将三个字段输出到CloudWatch Logs,通过CloudWatch Logs指标筛选器自动匹配日志,生成带有响应代码和应用版本维度的自定义指标,该方案无需额外服务集成,配置简单,可满足指标实时统计、按维度聚合筛选的需求,完全匹配题目要求。
各选项分析:
A. 该选项正确。Lambda直接将提取到的三个关键字段写入CloudWatch Logs,通过指标筛选器可以定义匹配规则,每命中一条日志就对对应指标加1,同时将响应代码和应用版本设置为指标维度,可实现按API操作、版本、响应码灵活统计指标,符合成本最优、配置最简的要求。
B. 该选项错误。CloudWatch Logs Insights是用于交互式查询分析日志数据的工具,支持按需运行查询生成统计结果,但无法自动、持续将查询结果填充为CloudWatch常驻指标,无法满足长期指标收集的需求。
C. 该选项错误。首先ALB访问日志默认存储在S3,配置同步到CloudWatch Logs需要额外操作,其次ALB访问日志本身不包含Lambda内部提取的API操作名称、应用版本字段,需要额外修改Lambda响应元数据注入,流程冗余,相比直接从Lambda输出日志没有优势,不符合最优实践。
D. 该选项错误。AWS X-Ray是分布式链路追踪服务,核心用于请求链路排查、性能瓶颈定位,X-Ray Insights主要用于自动检测链路异常,无法直接自定义提取API操作、版本、响应码作为维度生成CloudWatch指标,且X-Ray集成会产生额外成本,不是指标收集场景的合适方案。
关键知识点:
1. CloudWatch Logs指标筛选器:可从CloudWatch Logs的日志内容中匹配指定模式,提取自定义字段作为维度,自动生成CloudWatch自定义指标,是应用日志转指标的标准实现方式。
2. CloudWatch指标维度:是指标的属性键值对,用于对指标数据进行分类、筛选和聚合,本题中通过设置响应代码和应用版本为维度,可实现按不同版本、不同响应码统计各API操作的调用情况。
3. 可观测性服务选型:日志类指标收集优先使用CloudWatch Logs指标筛选器,X-Ray适用于分布式链路追踪场景,ALB访问日志适用于负载均衡层的访问统计场景,不同服务有各自的适用边界。
参考资料:
1. 使用指标筛选器从日志数据创建指标, https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html
2. Amazon CloudWatch 概念 - 维度, https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension