我正在构建一个ELK堆栈(第一次)来跟踪CloudFront分配的最终用户REST API使用情况(在S3源之前)。用户传递刷新令牌作为其请求的一部分,我希望使用此令牌来识别哪些用户正在提出哪个请求。不幸的是,看起来CloudFront访问日志缺少一些标题信息(特别是在我的用例中授权/接受)。这给我留下了三个问题:
有没有办法告诉CloudFront记录其他项目?似乎答案是否定的。
作为一种替代策略,我尝试使用lambda @ edge(在Viewer Request中)修改请求对象,将头信息移动到查询字符串中(以便记录)但是在lambda @ edge中进行任何操作似乎没有反映在日志中。 (虽然它反映在Origin Request功能中)。这可能吗?
如果做我想做的事情是不可能的,我认为另一种方法是完全放弃CloudFront日志,只需针对每个用户请求发出一个http请求进行logstash,但我觉得这很容易超载。
由于
答案 0 :(得分:0)
经过几天的研究并联系了亚马逊,我终于能够回答自己的问题:
事实证明,定制是错误的方法。我真正需要做的是将两个具有我所需信息的单独日志聚合到一个logstash条目中。事实证明,查看器响应lambda @ edge函数包含requestId
属性(实际上是event.Records[0].cf.config.requestId
),该属性与CloudFront日志x-edge-request-id
列匹配。因此,尽管我尚未完成实现,但这两列可以在logstash配置中用于聚合。我只需要确保设置了一个Viewer Response事件即可注销一致的格式,然后可以将其与logstash分开。我正在使用logstash-input-cloudwatch_logs
来检索cloudwatch日志。