## AWS CloudFront服务介绍
AWS CloudFront 是亚马逊云科技(Amazon Web Services,AWS)提供的全球内容分发网络(CDN)服务,其主要目的是加速内容传递、提供低延迟、高可用性和高性能的用户体验。CloudFront 将内容(如网站、图像、视频、应用程序数据等)缓存在全球各个边缘位置,使用户能够更快速地访问这些内容。
## 客户案例分享
### 客户需求
客户使用了 AWS CloudFront 服务,为了保障静态资源的快速下载,能给客户访问应用提供良好的用户体验,客户打算对 CDN 服务质量进行监控,该监控是为了确保静态资源能就近下载,而不是跨其他区域边缘节点下载导致下载速度变慢,进而影响客户浏览体验。
### 问题挑战
AWS CloudFront 服务依赖的 POP 站点资源属于第三方公司运营,并非属于 AWS 平台资源,所以在监控 CDN 服务质量方面面临了较大的挑战,无法直接获取对 POP 站点服务状态的监控指标。
### 解决方案
在充分了解客户的需求和痛点之后,聚云科技选择结合亚马逊云科技日志通解决方案,为客户搭建和提供便捷的服务日志收集功能,通过对 AWS CloudFront 站点资源访问日志的 x-edge-location 进行统计,计算其覆盖率来实现对 CDN 服务质量的监控,通过在规定时间段内统计日志字段 x-edge-location 的占比从而确定 POP 站点的服务质量,达到预先告警的需求目标。
> 关于日志通:日志通解决方案(Centralized Logging with OpenSearch)是亚马逊云科技提供的基于多个AWS大数据产品组件集成的一整套解决方案,该方案提供全面的日志管理和分析功能,帮助用户简化日志分析管道的构建。方案基于[Amazon OpenSearch Service](https://aws.amazon.com/cn/opensearch-service/?trk=cndc-detail) 构建,可有效地完成日志摄取、日志处理和日志可视化。
### 操作步骤
**Step 1.1 部署日志通**
[参考链接](https://link.zhihu.com/?target=https%3A//aws-solutions.github.io/centralized-logging-with-opensearch/zh/implementation-guide/deployment/with-cognito/)
使用 [AWS CloudFormation](https://aws.amazon.com/cn/cloudformation/?trk=cndc-detail) 模板部署示例图片如下:
![01.png](https://dev-media.amazoncloud.cn/863fa8c43c91477fa150e2d3e6259774_01.png "01.png")
![02.png](https://dev-media.amazoncloud.cn/9ef0f3c5f5f744dc9ed858f92592e856_02.png "02.png")
部署完成后,使用网页浏览器打开 WebConsoleUrl
![03.png](https://dev-media.amazoncloud.cn/f45cc61054fe4e3693ef4b23370c1cc4_03.png "03.png")
**Step 1.2 创建OpenSearch实例**
[OpenSearch参考链接](https://link.zhihu.com/?target=https%3A//docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html)(具体操作步骤不再阐述)
**注意事项:**仅支持启用了细粒度访问控制的 [Amazon OpenSearch Service](https://aws.amazon.com/cn/opensearch-service/?trk=cndc-detail) 域。在security configuration(安全配置)中,access policy (访问策略)应该和下图类似:
![04.png](https://dev-media.amazoncloud.cn/edde8c03e05e4326aad1e3864c61c210_04.png "04.png")
创建实例如截图所示:
![05.png](https://dev-media.amazoncloud.cn/c5955fc96b8d4c19be001710d599a352_05.png "05.png")
**Step 1.3 日志通导入 [Amazon OpenSearch Service](https://aws.amazon.com/cn/opensearch-service/?trk=cndc-detail) 域**
![06.png](https://dev-media.amazoncloud.cn/3c6f039b9df1464db534ee341630ab50_06.png "06.png")
**Step 1.4 AWS CloudFront 日志摄取到 [Amazon OpenSearch Service](https://aws.amazon.com/cn/opensearch-service/?trk=cndc-detail) 中**
[日志摄取操作参考链接](https://link.zhihu.com/?target=https%3A//aws-solutions.github.io/centralized-logging-with-opensearch/zh/implementation-guide/aws-services/cloudfront/)
选中定位geo_country(最好定位的字段都选中)
![07.png](https://dev-media.amazoncloud.cn/c780bf79b3894eac9be75920432292a9_07.png "07.png")
示例图片如下:
![08.png](https://dev-media.amazoncloud.cn/48d25d2352334130b8e298c0fd0910f3_08.png "08.png")
生成的index如下图:
![09.png](https://dev-media.amazoncloud.cn/45da065ccb4e42ecb55ad5dccd36dff6_09.png "09.png")
查看数据情况:
![10.png](https://dev-media.amazoncloud.cn/d8d9c8ec568e40eda74fd7cf149fb263_10.png "10.png")
**Step 2.在kibana上面配置alerting监控**
配置告警Destinations:
![11.png](https://dev-media.amazoncloud.cn/07c99ebaedaf41d6a36ea5f3d4bfdb6b_11.png "11.png")
配置monitor:
![12.png](https://dev-media.amazoncloud.cn/76366495a19443ba84a534914f680bce_12.png "12.png")
配置内容如下(因出口为香港地址,所以以香港为例):
```JSON
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"range": {
"timestamp": {
"from": "{{period_end}}||-60m",
"to": "{{period_end}}",
"include_lower": true,
"include_upper": true,
"format": "epoch_millis",
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"aggregations": {
"percentage": {
"filters": {
"filters": [
{
"match": {
"geo_region": {
"query": "Hong Kong",
"operator": "OR",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 1
}
}
}
],
"other_bucket": false,
"other_bucket_key": "_other_"
},
"aggregations": {
"total": {
"value_count": {
"field": "x-edge-location"
}
},
"part": {
"filter": {
"terms": {
"x-edge-location": [
"HKG54-C1",
"HKG60-C1",
"HKG62-C1",
"HKG62-C2"
],
"boost": 1
}
},
"aggregations": {
"part_count": {
"value_count": {
"field": "x-edge-location"
}
}
}
},
"percentage": {
"bucket_script": {
"buckets_path": {
"num_hk_pop": "part>part_count",
"total": "total"
},
"script": {
"source": "params.num_hk_pop / params.total ",
"lang": "painless"
},
"gap_policy": "skip"
}
}
}
}
}
}
```
需要调整的内容如下:
1. "from": "{{period_end}}||-60m这个为1小时,可以自行调整粒度
2. "geo_region"目前为"Hong Kong",客户可以调整自己想要的国家/地区
3. "x-edge-location"要修改为与"geo_region"对应可正常提供服务的pop点列表
结果输出如下:
```JSON
{
"_shards": {
"total": 25,
"failed": 0,
"successful": 25,
"skipped": 0
},
"hits": {
"hits": [],
"total": {
"value": 1489,
"relation": "eq"
},
"max_score": null
},
"took": 10,
"timed_out": false,
"aggregations": {
"percentage": {
"buckets": [
{
"doc_count": 937,
"total": {
"value": 937
},
"part": {
"doc_count": 863,
"part_count": {
"value": 863
}
},
"percentage": {
"value": 0.9210245464247598
}
}
]
}
}
}
```
Trigger:\
ctx.results\[0].aggregations.percentage.buckets.percentage > 0.9 (0.9做为自定义阈值,低于该值可以告警。从而判断pop的覆盖率)
![13.png](https://dev-media.amazoncloud.cn/9e398ffaffa6485c8c41560cdf6818dd_13.png "13.png")
查看监控
![14.png](https://dev-media.amazoncloud.cn/1d6cc7a92b77486c857088db9b07587c_14.png "14.png")
## 总结
日志通解决方案可帮助客户收集AWS CloudFront站点资源的访问日志,最终将CDN资源访问日志落地OpenSearch。
在此基础上,聚云科技利用kibana的alert模块的monitor功能,以“包含有香港区域pop站点全部访问日志与香港区域总访问日志的占比”的数据,监测该区域CDN资源的有效使用情况,在低于既定阈值的触发条件下实现告警,最终帮助客户实现监控AWS CloudFront服务质量的需求目标。