オブザーバビリティ
オブザーバビリティとは、システムの外側からメトリクスを観測することで、システム内部の状態に対する疑問に答えることができることを意味します。
GraphQLアプリケーションでキャプチャすべき重要なメトリクスやコンテキストは以下の通りです。
- クエリの時間と実行時間
- 実際のクエリペイロード/クエリハッシュ
- queries/mutations/subscriptions の応答のステータスコード
- graphqlサーバーのバージョン
- クエリの発信元のip_address
特に Hasura GraphQLエンジンの場合は、以下のコンテキストのキャプチャが必要かもしれません。
- クエリを実行したユーザーのuser_id
- ユーザーのロール
- クエリのメタデータ
この情報があれば、本番環境で意味のある疑問を提起して、システム内部で何が問題だったのか、あるいはHasura GraphQL APIがなぜそのような動作をするのか、見出すことができます。例えば、特定のクエリの実行時間に異常を確認した場合、そのクエリに対する問題(データベースに最適化すべきボトルネックがあるなど)を特定することができます。
モニタリング
Hasuraクラウドには、エラー、ウェブソケット接続、サブスクリプションを監視するためのメトリクスが組み込まれており、個々のオペレーションへのドリルダウンも可能です。
HasuraクラウドのErrorsタブの概要は以下の通りです。
より詳細を確認することで、失敗した要求とその理由を特定できます。GraphQLには、エラーを一意に識別できるステータスコードがありません。そのため、要求に対する応答内の errors
オブジェクトを検査する必要があります。
分散トレース
Hasuraクラウドのトレースは、データベース、リモートスキーマ、イベントトリガー、認証ウェブフック、アクションに渡って機能します。
以下は、要求をトレースした例です。ここではデータベースだけをトレースしています。
この機能はキャッシュされたクエリを検査します。個々の要求を検査することで、ヘッダー情報や、要求およびユニークIDのトレースなど、後のデバッグに役立つ、より詳細なメトリクスが得られます。
また、リモートスキーマ、アクション、イベントに対して行われたどんな要求もトレースできます。
- Build apps and APIs 10x faster
- Built-in authorization and caching
- 8x more performant than hand-rolled APIs