【问题标题】:AppEngine Flex custom readiness & liveness endpoints not firingApp Engine Flex 自定义就绪和活动端点未触发
【发布时间】:2020-02-10 18:54:15
【问题描述】:

我已经为我的 AppEngine Flex 应用配置了自定义就绪和活跃度探测端点,如本页所述: https://cloud.google.com/appengine/docs/flexible/python/reference/app-yaml

但是,查看日志,很明显它忽略了我的设置,如下所示:

liveness_check:
  path: "/liveness_check_custom"
  check_interval_sec: 30
  timeout_sec: 4
  failure_threshold: 4
  success_threshold: 2

readiness_check:
  path: "/readiness_check_custom"
  check_interval_sec: 5
  timeout_sec: 4
  failure_threshold: 2
  success_threshold: 2
  app_start_timeout_sec: 300

我在这些未出现在日志中的端点后面有一条自定义日志消息,并且还查看了 nginx.health_check 日志,我发现它仍在访问“liveness_check”和“readiness_check”端点,而不是我的自定义端点.

如果我自己直接点击端点,我会看到我的日志消息。这个谷歌文档是不正确的还是我遗漏了什么?有没有我缺少的设置?

【问题讨论】:

    标签: google-app-engine app-engine-flexible


    【解决方案1】:

    这是预期的行为。 Nginx 在记录健康检查时会将 liveness_check 和 readiness_check 重写为 app.yaml 文件中提供的自定义路径,这就是为什么在日志中您会在 nginx 日志中看到默认的“/readiness_check”和“/liveness_check”。

    App Engine creates redundant copies of each health checker,如果运行状况检查器失败,冗余副本会立即接管。

    您的应用程序的 nginx.health_check 日志正在显示冗余运行状况检查程序的日志。它们由 App Engine 自动创建,无法配置。

    可在 Google App Engine 应用程序日志的 health_logs 下找到自定义运行状况检查日志。

    已经为此问题创建了一个Public Issue Tracker,其中解释了之前有关 App Engine 中的运行状况检查的信息。

    【讨论】:

    • 但是在我帖子的文档链接中,对于“路径”,它表示以下内容,这表明它应该将调用转发到在我的应用程序中运行的端点。 If you want liveness checks to be forwarded to your application container, specify a URL path, such as "/liveness_check"
    • 那么你是说不可能让运行状况检查器在我的实际应用程序中点击一个端点来预热我的应用程序吗?如果是这种情况,那么我不明白我可以覆盖的“路径”值的目的是什么。我只是想在初始部署后预热我的应用程序,因为第一次调用需要一段时间来响应给定的实例,这是不可接受的。而且 AppEngine Flex 似乎没有预热的方法(不幸的是,GAE 标准确实有这个功能)。你有推荐吗?
    • 在 App Engine Standard 中,预热请求实质上是在任何实时请求到达该实例之前将您的代码加载到新实例中。要在 App Engine Flexible 中预热您的应用,您必须在 app.yaml 文件中为 liveness checks 使用 initial_delay_sec 设置。您必须设置它的值,以便为您的代码初始化提供足够的时间,并且像这样,对实例的第一个请求将由您已经初始化的代码快速处理。
    • 根据文档,initial_delay_sec 的默认值为 300 秒。我的应用程序当然不需要 300 秒来预热,所以我不遵循 Flex 的解决方案。无论如何,在我自己手动调用它之前,准备就绪和活跃度检查都不会触及我的应用程序的自定义端点,这显然是我的内部应用程序第一次被实际击中,日志也证实了这一点。我觉得我们在这里谈论的是两件不同的事情。无论如何,感谢您的帮助。
    【解决方案2】:

    app.yaml 中定义的 liveness_checkreadiness_check 部分是应用引擎 flex 中健康检查的新方法。 liveness_check 表示 VM 和 Docker 容器正在运行,readiness_check 表示实例可以接受传入请求。

    您可以自定义访问应用程序的特定路径。但是,当向 VM 中的应用程序发送请求时,nginx 会将路径“/readiness_check”和“/liveness_check”重写为自定义指定的路径。因此,您将在 nginx 日志中看到“/readiness_check”和“/liveness_check”。

    另外,如果您想在 App Engine 上应用预热,您必须在 liveness_check 部分中使用 initial_delay_sec 设置。默认值为 300,但您可以将其更改为您认为足以让您的应用接受请求的值(您可以将其设置在 0-3600 秒之间)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多