如何为 XRAY 守护进程任务创建健康检查

How to create a health check for XRAY Daemon Task

我正在尝试为我们的 AWS ECS spring 启动应用程序实施 XRAY。为此,我根据 AWS documentation and suggested when I asked another .

的建议,使用单独的 docker 文件为 docker 守护进程创建了一个新任务

但是,当我尝试将其部署到 AWS 时,负载均衡器需要运行状况检查端点才能确定服务已成功部署。

守护进程本身没有健康检查功能。 AWS forums as well as an issue on the github repo 上有一个与此相关的话题。

我最初的想法是创建一个应用程序(可能是 spring-boot),它能够确定守护进程是否 运行ning 并公开一个 URL elb 可以点击对守护进程进行健康检查。然后我可以将它与守护进程一起部署。

有没有更好的方法来做到这一点?我担心需要创建一个单独的应用程序来创建健康检查。为了在 docker 文件中 运行 两个入口点命令,可能需要一些 hackiness。

关于完成此任务的更好方法有什么想法吗?

您根本不需要为 X-Ray Docker 容器守护程序使用负载均衡器,因为流量仅来自集群 EC2 容器。 X-Ray 容器的健康检查可以使用 AWS ECS Healthcheck 本身完成。

根据论坛answer,您可以在容器健康检查上配置netstat,这将确保如果守护进程容器没有打开udp端口,那么ECS代理将重启容器。

以下是您在 ECS 任务定义中提供的 HealthCheck 命令。

CMD-SHELL, netstat -aun | grep 2000 > /dev/null; if [ 0 != $? ]; then exit 1; fi;

这是设置和结果。

注意--

如果您正在构建 X-Ray Docker 图像,请确保在 Docker 文件中包含 netstat 实用程序,否则健康命令将失败。

示例 - 如果您正在使用 this 文档中提供的 Docker 文件,那么您需要将 net-tools 包添加到您的 X- Ray 容器图像。

以下是我更新的 Docker 文件,它将 net-tools 添加到图像。

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --force-yes --no-install-recommends apt-transport-https curl ca-certificates wget net-tools && apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
RUN wget https://s3.dualstack.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-3.x.deb
RUN dpkg -i aws-xray-daemon-3.x.deb
CMD ["/usr/bin/xray", "--bind=0.0.0.0:2000"]
EXPOSE 2000/udp