AWS CloudFront 可观测最佳实践

AWS CloudFront

AWS CloudFront 是一项全球性的 内容分发网络 (CDN) 服务。它的主要作用是加速网站、应用程序、API 和视频内容的分发,并提高其安全性。简而言之,CloudFront 把你的内容(比如图片、视频、HTML、CSS、JavaScript 文件等)缓存到离用户最近的服务器上,这样用户就能更快地获取内容,从而提升用户体验并降低你的源服务器负载。

观测云

观测云是一个统一实时监测平台,它提供全面的系统可观测性解决方案,帮助用户快速实现对云平台、云原生、应用及业务的监控需求。观测云的核心功能包括:基础设施监测,日志采集和分析,用户访问监测(RUM),应用性能监测(APM),服务可用性监测(拨测),安全检测(SIEM),智能监控等等。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用服务的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

AWS CloudFront 指标采集

  1. 登录观测云控制台
  2. 点击【集成】菜单,选择【云账号管理】
  3. 点击【添加云账号】,选择【AWS】,填写界面所需的信息,如之前已配置过云账号信息,则忽略此步骤
  4. 点击【测试】,测试成功后点击【保存】,如果测试失败,请检查相关配置信息是否正确,并重新测试
  5. 点击【云账号管理】列表上可以看到已添加的云账号,点击相应的云账号,进入详情页
  6. 点击云账号详情页的【集成】按钮,在未安装列表下,找到 AWS CloudFront,点击【安装】按钮,弹出安装界面安装即可

AWS CloudFront 日志采集

1、日志采集方式

  • 可以配置 CloudFront 使其创建日志文件,其中包含有关 CloudFront 接收的每个用户(查看器)请求的详细信息,并存储到 S3 桶。这些日志称为标准日志,也称为访问日志。
  • S3 触发 Event 调用 Lambda 函数,通过 Datait 或者 DataWay 将数据上报到观测云平台。(推荐通过 DataWay 直接上传,本文将主要介绍这种方式)

2、CloudFront 开启日志

  1. 选择对应的 CloudFront 分配,进入详情页。
  2. 在【Logging】页中,在【设置】中点击【编辑】。
  3. 找到 【标准日志目标】部分,点击【Add】,选择 Amazon S3。
  1. 选择为日志文件创建的 S3 存储桶,选择所需的日志字段(可增加 DistrubtionId、c-country 等字段),同时选择输出格式为 JSON。
  1. 点击【Submit】保存配置。

3、创建 Lambda 函数

  1. 打开 Lamba 控制台的函数页面
  2. 选择创建函数
  3. 选择从头开始创作
  4. 输入函数名称
  5. 设置 运行时 选项为 Python 3.10
  6. 在 Execution Role(执行角色)中,Lambda 创建执行角色,该角色授予函数上载日志到 Amazon CloudWatchlogs 的权限。在您调用函数时,Lambda 函数担任执行角色,并使用该执行角色为 Amazon 软件开发工具包创建凭证和从事件源读取数据,lambda 权限如下:
yaml 复制代码
  logs: CreateLogGroup 
  logs: CreateLogStream 
  logs: PutLogEvents 
  lambda: * AmazonS3ReadOnlyAccess
  1. 点击创建函数 8. 在 GitHub 中拉取同步代码至下方代码源中将 lambda-forward.py 内容复制到 lambda-function.py 中 9. 在将 lambda-function.py 相同目录下新建 setting.pydatakit.pydataway.py 文件,并将 GitHub 中相应文件代码复制进去 10. 添加环境变量,以下是必要的配置
  • DATAKIT_IP: datakit 部署的 ip 地址,上报数据源为 datakit
  • DATAKIT_PORT: datakit 服务端口,上报数据源为 datakit
  • DATAWAY_URL: dataway URL (Eg: xx-openway.xxx.com) 上报数据源为 dataway
  • WORKSPACE_TOKEN: 工作空间 Token,上报数据源为 dataway

注意:上报数据源 datakit 与 dataway 必选一个,选择 datakit 请配置 DATAKIT_IP, 选择 dataway 请配置 DATAWAY_URLWORKSPACE_TOKEN

  1. 如果 datakit 端口不是默认的 9529 可添加环境变量 DATAKIT_PORT 填写为正确的端口地址(此变量非必填)
  2. 点击 Deploy 发布

4、配置 Lambda 触发器

  1. 点击 添加触发器
  2. 设置选择一个源S3
  3. 选择需要监听的 bucket
  4. 选择要触发 Lambda 函数的事件 Event types
  5. 同意 我承认不推荐对输入和输出使用相同的 S3 bucket,并且这种配置可能导致递归调用、增加 Lambda 使用和增加成本
  6. 点击添加

5、访问 CloudFront 产生日志

通过 CloudFront 域名访问所关联的资源,CloudFront 将生成的日志上传到 S3,通过 Lambda 函数进行抓取并上报到观测云。在观测云的日志查看器,可以通过 source:cloudfront 来进行搜索。

关键指标说明

所有 CloudFront 分配都包含以下默认指标。除了默认指标外,您还可以启用其他指标,但需要支付额外费用。更多详细的信息可以参考 AWS 的文档:docs.aws.amazon.com/zh_cn/Amazo...

指标英文名 指标中文名 含义
Requests 请求数 CloudFront 接收到的所有 HTTP 方法以及 HTTP 和 HTTPS 请求的查看器请求总数。
Bytes downloaded 下载字节数 查看器为 GET、HEAD 和 OPTIONS 请求下载的总字节数。
Bytes uploaded 上传字节数 查看器使用 POST 和 PUT 请求通过 CloudFront 上传到您的源位置的总字节数。
4xx error rate 4xx 错误数 响应的 HTTP 状态代码为 4xx 的所有查看器请求的百分比。
5xx error rate 5xx 错误数 响应的 HTTP 状态代码为 5xx 的所有查看器请求的百分比。
Total error rate 总错误数 响应的 HTTP 状态代码为 4xx 或 5xx 的所有查看器请求的百分比

日志解析

CloudFront 标准日志中,每个实时日志记录中包含的字段列表可以在 AWS 控制台进行配置。每个日志记录最多可包含 40 个字段,您可以选择接收所有可用字段,也可以选择仅接收监控和分析性能所需的字段。详细的字段信息描述,可以参考 AWS 的文档:docs.aws.amazon.com/zh_cn/Amazo...

观测云 已内置了 CloudFront 日志解析,可以在【日志】 - 【Pipelines】 - 【Pipeline 官方库】 - 选择 CloudFront ,添加类型为 中心 Pipeline,保存即可,对新上报数据生效。

日志解析之后,可在查看器中查看扩展字段,并可以根据这些字段快速搜索,或聚类分析。

场景视图

登录观测云控制台,点击【场景】->【新建仪表板】,输入 "CloudFront", 选择 "AWS CloudFront 监控视图",点击 "确定" 即可添加视图。

监控器

针对 CloudFront,设置 4xx 和 5xx 错误率的告警,在出现问题的时候及时解决。可根据您的应用类型和业务关键性来调整告警的阈值,例如静态网站通常对错误更敏感,而某些动态应用可能会有少量预期错误。

告警触发之后,可在观测云的【事件中心】进行查看和分析。

总结

通过观测云,监控 CloudFront 的指标和日志对于确保您的内容分发网络 (CDN) 的性能和可用性至关重要。通过设置监控器,监控 4xx 错误(客户端错误,如文件未找到)和 5xx 错误(服务器错误,如源站宕机或配置错误),可以帮助您关注直接影响用户体验的错误,5xx 错误更是指示着严重的后端或 CloudFront 配置问题,需要立即关注。另一方面,可以通过日志,分析每个请求的详细记录,进行快速的故障排除和调试。

相关推荐
weixin_307779138 小时前
利用 AWS Lambda 与 EventBridge 优化低频 Java 作业的云计算成本
java·开发语言·云原生·云计算·aws
weixin_3077791310 小时前
AWS Elastic Beanstalk 实现 Java 应用高可用部署指南
java·开发语言·云计算·aws·web app
亚林瓜子1 天前
在amazon linux 2023上面源码手动安装tesseract5.5.1
linux·运维·服务器·ocr·aws·ec2
三掌柜6661 天前
借助 Kiro:实现《晚间手机免打扰》应用,破解深夜刷屏困境
人工智能·aws
亚林瓜子1 天前
AWS Elastic Beanstalk中安装tesseract5.3.4版本
spring boot·ocr·tesseract·aws·beanstalk·tess4j·eb
破 风1 天前
AWS实现S3配置私钥以及上传
云计算·aws
三掌柜6662 天前
AWS Bedrock + DeepSeek-R1:开启企业级 AI 开发的新篇章
人工智能·云计算·aws
王道长服务器 | 亚马逊云2 天前
AWS + WordPress:中小型外贸独立站的理想组合
服务器·网络·云计算·音视频·aws
王道长服务器 | 亚马逊云2 天前
帝国CMS + AWS:老牌内容系统的新生之路
服务器·网络·数据库·云计算·aws