web-dev-qa-db-ja.com

Google AppEngineヘルスチェックスパムアプリ

次のapp.yaml構成を使用して、Google App EngineFlexランタイムで実行されているnodejsアプリをデプロイしました。

runtime: nodejs
env: flex
health_check:
  enable_health_check: True
  check_interval_sec: 20
  timeout_sec: 4
  unhealthy_threshold: 2
  healthy_threshold: 2

ヘルスチェックのドキュメント によると、ヘルスチェックは20秒ごとに/_ah/healthエンドポイントに到達する必要があります。ただし、アプリが200ステータスコードで応答した場合でも、アプリがこれらのヘルスチェックで1秒間に複数回スパム送信されていることに気付きました。

enter image description here

なぜこれが起こっているのか考えはありますか?

31
Mihai Tomescu

残念ながら、ドキュメントにバグがあるようです。実際、今日、アプリはかなり頻繁にヘルスチェックを受けています。

理由はさまざまですが、一般に、各VMは、指定した繰り返し間隔(デフォルトでは、非常に攻撃的な1秒)で3 * 2の異なるヘルスチェックに見舞われます。この理由は、2種類のヘルスチェック(自動ヒーラーとLBのもの)と、可用性の理由からそれぞれ3種類です。

そうは言っても、私たちは現在、まもなくリリースされる新しい形のヘルスチェックに取り組んでおり、既存のヘルスチェック動作に関するこの問題やその他の問題を修正する必要があります(少なくともデフォルトをより管理しやすくし、ユーザーにより多くのチューニングオプションを提供します) 。

乞うご期待!

15
Andre Rodrigues

根本的な問題の解決策がありません。しかし、スパムが原因で、私のように意図した目的でログを使用できなくなっている場合は、次の回避策があります。

  1. 「高度なログフィルター」(StackdriverLoggingの検索フィールドの横にある小さな下向き矢印)を有効にします。

  2. これを検索クエリに追加します

    NOT textPayload : (health)

2
pscl

また、GAE FlexenvでNodeJSを実行しています。ヘルスチェックもサーバーログをスパムしていました。次のいくつかのことが私がそれらを減らすのに役立ちました:

  1. Googleのドキュメント( https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml#health_checks )には、ヘルスチェックの設定は不要と記載されていますが、とにかく明示的に設定して、ヘルスチェック呼び出しの頻度を下げます。
  2. 「高度なログフィルター」を使用して、気が散りすぎる場合にヘルスチェックログが表示されないようにします。
  3. Googleのドキュメント( https://cloud.google.com/appengine/docs/flexible/nodejs/how-instances-are-managed )には、ヘルスチェック用のハンドラーを実装する必要はないと書かれています。とにかくそれを実装しました。 express.jsサーバーに「/ _ah/healthcheck」エンドポイントのハンドラーを追加し、app.jsファイルの先頭にルートを設定して、ヘルスチェックリクエストがすぐに応答されるようにしました。これにより、ヘルスチェックリクエストがエクスプレスアプリロジックに入るときに発生するノイズを減らすことができました。
0
LeoIsCoding

高度なフィルターを使用して、「NOT _ah/health」と言います。

Nginx.requestログを削除することも役立ちます。

0