1

我正在构建一个 ELK 堆栈(第一次)来跟踪 CloudFront 分配的最终用户 REST API 使用情况(在 S3 源之前)。用户将刷新令牌作为其请求的一部分传递,我希望使用此令牌来识别哪些用户正在发出哪个请求。不幸的是,CloudFront 访问日志似乎缺少一些标头信息(尤其是我的用例中的授权/接受)。这给我留下了三个问题:

  1. 有没有办法告诉 CloudFront 记录其他项目?看来答案是否定的。

  2. 作为一种替代策略,我尝试使用 lambda@edge (在查看器请求中)修改请求对象,以将标头信息移动到查询字符串中(以便它被记录),但 lambda@edge 中的任何操作似乎都没有反映在日志中。(尽管它反映在 Origin Request 函数中)。这应该可能吗?

如果做我想做的事是不可能的,我认为另一种方法是完全放弃 CloudFront 日志,只用每个用户请求触发一个 http 请求来 logstash,但我觉得这很容易超载。

谢谢

4

1 回答 1

2

经过几天的研究并联系亚马逊,我终于能够回答我自己的问题:

  1. CloudFront 日志无法自定义,它们就是它们。
  2. 见 1。

事实证明,定制是错误的方法。我真正需要做的是将具有我需要的信息的两个单独的日志聚合到一个 logstash 条目中。事实证明,查看器响应 lambda@edge 函数包含一个与 CloudFront 日志列匹配的requestId属性(实际上)。因此,虽然我还没有完成它的实现,但这两个列可以在 logstash 配置中用于聚合。我只需要确保我设置了一个查看器响应事件,该事件会注销一个一致的格式,然后我可以与 logstash 分开。我正在使用来检索 cloudwatch 日志。event.Records[0].cf.config.requestIdx-edge-request-idlogstash-input-cloudwatch_logs

于 2018-06-19T16:06:10.000 回答