Amazon ECS的Spring执行器运行状况检查脚本

时间:2019-12-04 13:17:48

标签: spring amazon-ecs spring-boot-actuator

我有一个使用弹簧执行器的spring boot应用程序,它的路径为:localhost:8080 / my-app / health,如果可以,它会返回:

{
"status":"UP"
}

当没有时:

{
"status":"DOWN"
}

我希望ECS在状态关闭几次后重新启动容器。我在容器定义中添加了jq,还在任务定义中添加了运行状况检查,如下所示:

...
"healthCheck": {
        "retries": 10,
        "command": [
          "CMD-SHELL",
          "[[ $(curl -s 'http://localhost:8080/my-app/health' | jq -r '.status') == \"UP\" ]] && exit 0 || exit 1 "
        ],
        "timeout": 5,
        "interval": 60,
        "startPeriod": 300
      }
...

但是ECS会不断重新启动我的服务。谁能帮我说如何创建这种健康检查?

2 个答案:

答案 0 :(得分:1)

无需解析JSON。只需检查HTTP状态代码即可。

[ "CMD-SHELL", "curl -f http://localhost:8080/my-app/health || exit 1" ]

如果状态码为2xx,则表明容器已准备就绪且状态良好。

答案 1 :(得分:0)

问题是CMD-SHELL使用不支持[[...]]语法的sh运行脚本。 检查容器运行状况检查日志对我有很大帮助:

docker inspect --format "{{json .State.Health }}" <container name> | jq