Member-only story
DropboxをNginxからEnvoyにマイグレーションする方法(第二章)
今回はDropboxをNginxからEnvoyにマイグレーションするやり方をご説明します。今回の記事は長いので6回に分けてお送ります。今回は2回目です。
Observability
監視可能性は、どのような製品にとっても最も基本的な運用上、必須ですが、特にプロキシのようなインフラストラクチャの基礎となる部分については、特に重要です。これはマイグレーション期間中にはさらに重要であり、不満を持ったユーザーが報告するというよりも、むしろ監視システムが問題を検知できるようにします。
非商用のNginxには、7つのステータスを持つ “stub status “モジュールが付属しています。
Active connections: 291server accepts handled requests16630948 16630948 31070465Reading: 6 Writing: 179 Waiting: 106
これだけでは十分ではありませんでしたので、Luaで利用可能なヘッダーや変数(ステータスコード、サイズ、キャッシュヒット数など)に基づいて、リクエストごとの統計情報を追加するシンプルなlog_by_luaハンドラを追加しました。以下に、シンプルな統計情報を取得する関数の例を示します。
function _M.cache_hit_stats(stat) if _var.upstream_cache_status then if _var.upstream_cache_status == "HIT" then stat:add("upstream_cache_hit") else stat:add("upstream_cache_miss") end endend
リクエストごとの Lua 統計に加えて、非常に脆弱な error.log パーサーを使用して、アップストリーム、http、Lua、TLS エラーの分類を行いました。
さらに、最後のリロードからの時間、ワーカーの数、RSS/VMS のサイズ、TLS 証明書の年齢など、Nginx の内部状態を収集するためのエクスポータを別途用意していました。
典型的な Envoy のセットアップは、プロキシされたトラフィックとサーバの内部状態の両方を記述した数千もの異なるメトリクス(prometheus フォーマット)を提供してくれます。