AWS CloudFront
AWS CloudFront 是一项全球性的 内容分发网络 (CDN) 服务。它的主要作用是加速网站、应用程序、API 和视频内容的分发,并提高其安全性。简而言之,CloudFront 把你的内容(比如图片、视频、HTML、CSS、JavaScript 文件等)缓存到离用户最近的服务器上,这样用户就能更快地获取内容,从而提升用户体验并降低你的源服务器负载。
观测云
观测云是一个统一实时监测平台,它提供全面的系统可观测性解决方案,帮助用户快速实现对云平台、云原生、应用及业务的监控需求。观测云的核心功能包括:基础设施监测,日志采集和分析,用户访问监测(RUM),应用性能监测(APM),服务可用性监测(拨测),安全检测(SIEM),智能监控等等。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用服务的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
AWS CloudFront 指标采集
- 登录观测云控制台
- 点击【集成】菜单,选择【云账号管理】
- 点击【添加云账号】,选择【AWS】,填写界面所需的信息,如之前已配置过云账号信息,则忽略此步骤
- 点击【测试】,测试成功后点击【保存】,如果测试失败,请检查相关配置信息是否正确,并重新测试
- 点击【云账号管理】列表上可以看到已添加的云账号,点击相应的云账号,进入详情页
- 点击云账号详情页的【集成】按钮,在未安装列表下,找到
AWS CloudFront,点击【安装】按钮,弹出安装界面安装即可
AWS CloudFront 日志采集
1、日志采集方式
- 可以配置 CloudFront 使其创建日志文件,其中包含有关 CloudFront 接收的每个用户(查看器)请求的详细信息,并存储到 S3 桶。这些日志称为标准日志,也称为访问日志。
- S3 触发 Event 调用 Lambda 函数,通过 Datait 或者 DataWay 将数据上报到观测云平台。(推荐通过 DataWay 直接上传,本文将主要介绍这种方式)

2、CloudFront 开启日志
- 选择对应的 CloudFront 分配,进入详情页。
- 在【Logging】页中,在【设置】中点击【编辑】。
- 找到 【标准日志目标】部分,点击【Add】,选择 Amazon S3。

- 选择为日志文件创建的 S3 存储桶,选择所需的日志字段(可增加 DistrubtionId、c-country 等字段),同时选择输出格式为 JSON。

- 点击【Submit】保存配置。
3、创建 Lambda 函数
- 打开 Lamba 控制台的函数页面
- 选择创建函数
- 选择从头开始创作
- 输入函数名称
- 设置
运行时选项为Python 3.10 - 在 Execution Role(执行角色)中,Lambda 创建执行角色,该角色授予函数上载日志到 Amazon CloudWatchlogs 的权限。在您调用函数时,Lambda 函数担任执行角色,并使用该执行角色为 Amazon 软件开发工具包创建凭证和从事件源读取数据,lambda 权限如下:
yaml
logs: CreateLogGroup
logs: CreateLogStream
logs: PutLogEvents
lambda: * AmazonS3ReadOnlyAccess
- 点击创建函数 8. 在 GitHub 中拉取同步代码至下方代码源中将
lambda-forward.py内容复制到lambda-function.py中 9. 在将lambda-function.py相同目录下新建setting.py、datakit.py、dataway.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_URL、WORKSPACE_TOKEN
- 如果 datakit 端口不是默认的 9529 可添加环境变量 DATAKIT_PORT 填写为正确的端口地址(此变量非必填)
- 点击
Deploy发布
4、配置 Lambda 触发器
- 点击
添加触发器 - 设置
选择一个源为S3 - 选择需要监听的
bucket - 选择要触发 Lambda 函数的事件 Event types
- 同意 我承认不推荐对输入和输出使用相同的 S3 bucket,并且这种配置可能导致递归调用、增加 Lambda 使用和增加成本
- 点击添加
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 配置问题,需要立即关注。另一方面,可以通过日志,分析每个请求的详细记录,进行快速的故障排除和调试。