如何使用在我的 Mac 主机上运行的 ngxtop 来监控在 Docker 容器上运行的 nginx?

如何使用在我的 Mac 主机上运行的 ngxtop 来监控在 Docker 容器上运行的 nginx?

官方 Nginx Docker 镜像将 access.log 重定向到 /dev/stdout,这样就可以docker log从 docker 外部(即主机上)访问日志。这是一个问题,因为我无法从 docker 容器内部访问 access.log。

我最终在 Mac 上安装 nginx 并执行以下命令 docker logs -f competent_edison &>> ~/Dev/monitoring/access.log

虽然重定向工作正常,并且我的 Mac 上的 access.log 实时镜像容器的输出,但是当我将该文件作为参数传递时,ngxtop 什么也不输出:ngnix -l ~/Dev/monitoring/access.log

我想知道是否有办法在主机上安装 ngxtop 来监控在容器中运行的 nginx。

请提供任何有用的指示,因为我花了两天时间解决这个问题,但不知道如何处理。

答案1

当然可以。执行如下操作

docker logs -f <nginx-pod-name> | tee -a <nginx-pod-name>.log > /dev/null & docker run -t --rm -v <nginx-pod-name>.log:/var/log/nginx/access.log:ro mishunika/ngxtop

因此分解一下:docker logs -f <nginx-pod-name>获取日志流。

然后| tee -a <nginx-pod-name>.log > /dev/null将输出通过管道tee附加到主机上的文件中(同时使 STDOUT 静音)。

最后,启动 ngxtop 并通过 将日志文件从主机挂载到 ngxtop 容器docker run -t --rm -v <nginx-pod-name>.log:/var/log/nginx/access.log:ro mishunika/ngxtop

该解决方案没有考虑轮换本地日志文件,但我认为这是为了故障排除目的,所以没有必要。

相关内容