我在 AWS 中运行一个带有客户端和服务器组件的应用程序。客户端通过经典 ELB 与服务器通信。
具体来说,我正在运行部署到托管 kubernetes 集群 (EKS( 的 JupyterHub。
我的要求:获取显示请求 URL 的 HTTP 日志。
目前,我无法执行此操作,因为:
ELB 侦听通过 TCP的安全流量(在 443 上(,而侦听 TCP 的负载均衡器的 ELB 访问日志不包含 URL。(只有通过 HTTP 侦听的负载均衡器才会显示 URL。
ELB 需要侦听 TCP,因为应用程序的某些部分使用 websocket 通信。由于安全 TCP(websocket(流量和 https 流量都通过端口 443,并且您只能在一个协议上侦听单个端口,因此我无法侦听 http 流量,因此无法获取显示 URL 的 HTTP elb 访问日志。
为了解决这个问题,让我们假设应用程序是一个黑匣子,不可配置。使用上述当前设置,我有什么方法可以获取将显示 URL 的 HTTP 请求日志?
我将这个问题作为 AWS 配置问题(以保持问题的范围简单而狭窄(——但是我也对一个解决方案持开放态度,让我配置哪些端口 jupyterhub 笔记本服务器用于与 /api/kernel
端点进行 websocket 通信。如果我可以将端口配置为 443 以外的端口,那么我的 ELB 上可以有两个侦听器。
切换到应用程序负载均衡器。 它们支持在单个侦听器上使用带有 websocket 的 HTTPS。
TCP 模式下的 ELB 经典完全不知道通过它的有效负载,因此它没有 URL 的概念。