如何在CloudFront日志中添加CloudFront-Viewer-Country及跨区域采集Lambda Edge日志
问题1:如何在CloudFront日志中添加CloudFront-Viewer-Country头部
CloudFront默认访问日志不会包含自定义头部,需要手动配置日志的自定义字段来添加该头部:
- 登录CloudFront控制台,找到目标分发,切换到「监控」标签页
- 点击「配置日志」,在「自定义字段」区域点击「添加字段」
- 选择「请求头部」类型,输入
CloudFront-Viewer-Country作为字段名称,保存配置 - 注意:该配置仅对新生成的日志生效,过往的历史日志不会自动补充该字段
问题2:Lambda Edge日志是否满足需求?如何跨区域采集日志
能否满足需求?
可以满足。只要Lambda Edge函数正确捕获并打印CloudFront-Viewer-Country字段,所有访问请求的地区信息都会被记录到日志中。不过你当前的代码存在错误:Node.js环境中没有print函数,需要替换为console.log;另外cloudfront-viewer-country在请求头部中是数组格式,需取[0].value获取实际国家代码,修正后的代码如下:
'use strict'; exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; if(request.headers['cloudfront-viewer-country']) { console.log('country is '+request.headers['cloudfront-viewer-country'][0].value); } return callback(null,request); };
跨区域采集日志的方法
Lambda Edge函数在全球边缘节点执行时,日志默认存储在对应边缘节点所在区域的CloudWatch Logs中。要将所有区域的日志聚合到你有权限访问的us-east-1区域,可按以下步骤操作:
- 在us-east-1区域创建Kinesis Data Firehose流,配置目标为us-east-1的S3存储桶(用于存储聚合后的日志)
- 遍历所有AWS区域,找到对应Lambda Edge函数的日志组(格式通常为
/aws/lambda-edge/<你的函数名>),给每个日志组添加订阅过滤器,将日志发送到上述创建的Firehose流 - 确保你的IAM角色拥有访问该Firehose流和目标S3存储桶的权限,这样所有区域的Lambda Edge日志都会被统一转发到us-east-1的S3存储桶,你可以直接从这里提取所有用户的地区信息
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

