【问题标题】:Spring actuator healthcheck script for Amazon ECSAmazon ECS 的 Spring 执行器运行状况检查脚本
【发布时间】:2019-12-04 13:17:48
【问题描述】:

我有一个使用弹簧执行器的弹簧启动应用程序,并且在路径下: 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 不断重启我的服务。谁能帮我说说如何创建这样的健康检查?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果状态码为 2xx,则容器准备就绪且健康。

    【讨论】:

    • 是的,这是最好的解决方案,您应该经常检查您的 http 代码。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 2019-10-29
      • 2022-01-19
      • 2021-12-04
      • 2022-11-29
      • 2020-11-25
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多