如何为 XRAY 守护程序任务创建运行状况检查

gre*_*Dev 5 amazon-web-services amazon-ecs docker aws-xray

我正在尝试为我们的 AWS ECS Spring Boot 应用程序实现 XRAY。为此,我按照AWS 文档的建议以及在我询问有关守护进程设置的另一个问题时的建议,使用单独的 docker 文件创建一个新任务,仅用于 docker 守护进程

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

守护进程本身没有运行状况检查功能。AWS 论坛上有一个主题, github 存储库上也有一个与此相关的问题。

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

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

关于更好的方法来实现这一目标有什么想法吗?

Imr*_*ran 5

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

根据论坛答案,您可以在容器运行状况检查上配置 netstat,这将确保守护进程容器未打开 udp 端口​​,然后 ECS 代理将重新启动容器。

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

CMD-SHELL, netstat -aun | grep 2000 > /dev/null; if [ 0 != $? ]; then exit 1; fi;
Run Code Online (Sandbox Code Playgroud)

这是设置和结果。

任务定义

健康

笔记 -

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

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

以下是我更新的 Dockerfile,它添加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
Run Code Online (Sandbox Code Playgroud)