Object Storage Service (OSS) は、プログラムの実行時の動作を監視し、潜在的な問題を迅速に特定し、障害の根本原因を特定するのに役立つ包括的な監視メトリックとロギング機能を提供します。これにより、トラブルシューティングの効率が大幅に向上します。
このトピックでは、OSS を使用してビジネスデータを保存する際に、OSS 監視サービス、ロギング機能、およびサードパーティツールを使用して問題を監視、診断、およびトラブルシューティングする方法について説明します。OSS 監視サービスは、次の目的で使用されます。
OSS の実行状態とパフォーマンスをリアルタイムで監視し、アラート通知を送信します。
問題を特定するための効果的な方法とツールを提供します。
関連ガイドに基づいて問題を解決します。
このトピックには、次のセクションが含まれています。
監視サービス: OSS 監視サービスを使用して OSS の実行状態とパフォーマンスを監視する方法について説明します。
追跡と診断: OSS 監視サービスとロギング機能を使用して問題を追跡および診断する方法について説明します。
トラブルシューティング: よくある問題とその解決策について説明します。
監視サービス
全体的な状態の監視
可用性/有効リクエスト率
可用性/有効リクエスト率は、OSS の安定性と OSS の使用状況を示す最も重要な指標です。100% 未満の割合は、特定のリクエストが失敗したことを示します。
100% 未満の割合は、負荷分散のためのパーティション移行などの OSS の最適化が原因である可能性があります。この場合、OSS SDK は、この一時的な最適化によるエラーリクエストを処理するための関連する再試行メカニズムを提供します。このようにして、ビジネスへの影響はありません。
エラーリクエストの種類と原因を特定し、問題をトラブルシューティングするには、CloudMonitor コンソールのリクエストステータスの詳細とリクエストステータスの分布に基づいてリクエストを分析します。
さらに、特定のビジネスシナリオでは、有効リクエスト率が 100% 未満になる可能性があります。たとえば、特定のシナリオでオブジェクトを管理する前に、オブジェクトが存在するかどうかを確認するためにリクエストを送信する必要があります。オブジェクトが存在しない場合、HTTP ステータスコード 404 がクライアントに返され、有効リクエスト率が 100% 未満になります。
OSS の高可用性を必要とするビジネスの場合、メトリックがしきい値を下回ったときにトリガーされるアラートルールを構成できます。
リクエストの総数/有効リクエストの数
リクエストの総数/有効リクエストの数は、リクエスト数という側面から見た OSS の実行状態を示します。有効リクエストの数がリクエストの総数よりも少ない場合、特定のリクエストが失敗したことを示します。
有効リクエスト数の変動、特に急上昇と急降下を監視し、原因を分析するには、アラートルールを構成してできるだけ早く通知を受け取ることができます。詳細については、「アラートサービスを使用する」をご参照ください。
リクエストステータスの分布
可用性/有効リクエスト率が 100% 未満の場合、または有効リクエストの数がリクエストの総数よりも少ない場合は、リクエストステータスの分布を表示して、エラーリクエストの種類を特定できます。リクエストステータスの分布の詳細については、「メトリック」をご参照ください。
リクエストステータスの監視
リクエストステータスの詳細は、さまざまな種類のリクエストを監視し、リクエストステータスの分布に基づいて監視に関する詳細情報を提供します。
パフォーマンスの監視
監視サービスは、OSS のパフォーマンスを監視するのに役立つ次のメトリックを提供します。
平均レイテンシ。平均 E2E レイテンシと平均サーバーレイテンシが含まれます。
レイテンシメトリックは、API オペレーションの呼び出しによって生成される特定の種類のリクエストを処理するために必要な平均時間と最大時間を示します。E2E レイテンシメトリックは、クライアントとサーバー間でリクエストを送信するために必要な時間を示します。これには、リクエストの処理、読み取り、および応答に必要な時間と、このプロセスでのネットワークレイテンシが含まれます。サーバーレイテンシは、サーバー側でリクエストを処理するために必要な時間で、サーバーとクライアント間の通信中のネットワークレイテンシは含まれません。したがって、E2E レイテンシが増加し、サーバーレイテンシが安定している場合、E2E レイテンシはネットワーク状態の悪化が原因で増加していると判断するのが妥当であり、OSS 障害の可能性は除外されます。
最大レイテンシ。最大 E2E レイテンシと最大サーバーレイテンシが含まれます。
成功したリクエストカテゴリ
トラフィック
トラフィックメトリックは、インターネット経由のリクエスト、内部ネットワーク経由のリクエスト、Content Delivery Network (CDN) バックツーオリジンリクエスト、およびクロスリージョンレプリケーション (CRR) タスクで使用されるトラフィックを示します。監視サービスは、ユーザーごとのトラフィックのメトリックとバケットごとのトラフィックのメトリックを提供します。
OSS は、トラフィックを除く上記のメトリックを、次の API オペレーションを呼び出すことによって送信されるリクエストの種類ごとに監視します。
GetObject
HeadObject
PutObject
PostObject
AppendObject
UploadPart
UploadPartCopy
さらに、成功したリクエストカテゴリには、次の API オペレーションを呼び出すことによって送信されたリクエストも含まれます。
DeleteObject
DeleteObjects
OSS のパフォーマンスを示すメトリックについては、平均レイテンシの急上昇やリクエストの長期にわたる高レイテンシなど、異常な変動に焦点を当てる必要があります。パフォーマンスメトリックのアラートルールを構成して、アラートルールがトリガーされたときに通知が送信されるようにすることができます。
課金対象項目の監視
OSS 監視サービスを使用すると、ストレージ使用量、PUT リクエストと GET リクエストの数、インターネット経由のアウトバウンドトラフィック (CRR アウトバウンドトラフィックまたは CDN アウトバウンドトラフィックは含まれません) などの課金対象項目を監視できます。OSS 監視サービスは、課金対象項目のアラート設定と OpenAPI 読み取りをサポートしていません。
OSS 監視サービスは、バケットごとに 1 時間単位で監視データを収集します。特定のバケットのチャートを表示して、バケットの継続的なデータトレンドを取得できます。監視グラフに基づいて、ビジネスのストレージ使用量のトレンドと将来のストレージコストを予測できます。
OSS 監視サービスは、ユーザーごとおよびバケットごとに月単位のリソース使用量の統計を提供します。Alibaba Cloud アカウントまたは特定のバケットの OSS リソース使用量は、1 時間ごとに計算および更新されます。このようにして、当月のストレージコストを計算できます。
OSS の課金対象項目と課金方法の詳細については、「課金の概要」をご参照ください。
説明監視サービスによって提供される統計は、請求書の実際の使用量と異なる場合があります。[経費とコスト] コンソールに表示される請求書の実際の使用量に基づいて課金されます。
追跡と診断
問題診断
パフォーマンス診断
ビジネス要件に基づいて、アプリケーションパフォーマンスのベースラインを決定する必要があります。パフォーマンスの問題は、OSS の過負荷、クライアントの TCP 構成、およびネットワークからのトラフィックのボトルネックが原因である可能性があります。
このようにして、監視サービスによって提供されるパフォーマンスメトリックに基づいて、発生する可能性のある問題を特定できます。次に、詳細についてログをクエリし、問題をさらに診断します。
エラー診断
リクエストエラーが発生すると、クライアントアプリケーションはサーバーからエラーメッセージを受け取ります。監視サービスは、さまざまなエラーリクエストを記録して表示します。サーバーのログ、クライアントのログ、およびネットワークの状態を確認して、特定のリクエストに関する詳細を取得できます。HTTP ステータスコードとエラーコードは、エラーリクエストの考えられる原因を示します。
エラーコードの詳細については、「エラーコード」をご参照ください。
ロギング機能を使用した問題の診断
OSS は、リクエストに関する詳細を記録できるロギング機能を提供します。
ネットワークログツールの使用
特定のケースでは、ネットワークログツールを使用して、クライアントとサーバー間のトラフィックをキャプチャする必要がある場合があります。このようにして、送信されたデータとネットワーク状態に関する情報を取得できます。たとえば、ユーザーリクエストでエラーが報告されますが、アプリケーションサーバーでリクエストのログが生成されません。この場合、OSS ログを確認するか、ネットワーク監視ツールを使用して問題を特定します。一般的に使用されるツールの 1 つは、Wireshark です。これは、さまざまなネットワークプロトコルの詳細なパケット情報を表示するために使用されます。詳細については、「Windows に Wireshark をインストールして使用する方法」および「WireShark の使用」をご参照ください。
E2E 追跡と診断
ほとんどの場合、リクエストはクライアントから OSS に送信され、OSS サーバーはリクエストを処理してクライアントに応答を送信します。クライアント、ネットワーク、およびサーバーのログを使用して、問題の根本原因をトラブルシューティングできます。OSS は、リクエスト ID をログの一意の識別子として提供します。さらに、ログのタイムスタンプを使用することで、リクエストの処理中に他のイベントに関する情報を取得できます。これは、問題の原因を分析および調査するのに役立ちます。
RequestID
OSS は、各リクエストに一意のリクエスト ID を割り当てます。さまざまなログでは、リクエストのリクエスト ID はさまざまなフィールドに含まれています。
OSS ログでは、リクエスト ID は [リクエスト ID] フィールドにあります。
Wireshark によってキャプチャされたデータフローなどのネットワークデータを追跡する場合、リクエスト ID は標準の HTTP ヘッダー x-oss-request-id として応答に含まれます。
クライアントアプリケーションでは、Java 用 OSS SDK の最新バージョンは、応答にリクエスト ID を表示します。getRequestId メソッドを使用して、応答からリクエスト ID を取得できます。OSSException オペレーションの getRequestId メソッドを呼び出すことで、例外的なリクエストの Request ID を取得できます。
タイムスタンプ
ログのタイムスタンプを使用してログをクエリできます。イベントは、クライアントとアプリケーションサーバーで異なる時点で発生する可能性があることに注意してください。したがって、イベントの OSS ログとクライアントのログのタイムスタンプは異なる場合があります。クライアントのログのタイムスタンプに基づいてサーバーのログをクエリする場合は、タイムスタンプに 15 分を加算または減算します。
トラブルシューティング
パフォーマンス関連の問題
平均 E2E レイテンシが高く、平均サーバーレイテンシが低い
考えられる原因:
クライアントアプリケーションの応答が遅い
使用可能な接続とスレッドが制限されています。
関連するコマンドを実行して、システム接続状態を確認し、CPU コア数を変更します。
クライアントリソースのボトルネックを表示し、同時スレッド数を適切に増やし、クライアントコードを最適化します。
CPU、メモリ、または帯域幅のリソースが制限されている
監視ツールを使用してリソースのボトルネックを特定し、コードを最適化するか、リソースをスケールアップします。
ネットワーク状態が悪い
Wireshark を使用して、ネットワーク問題の原因を分析します。
平均 E2E レイテンシが低く、平均サーバーレイテンシが低く、クライアントリクエストレイテンシが高い
クライアントリクエストレイテンシが高い場合、高レイテンシはリクエストがアプリケーションサーバーに到着する前に発生する可能性が最も高くなります。したがって、クライアントからのリクエストがサーバーに到着しない理由を分析することをお勧めします。
次のシナリオでは、クライアントリクエストレイテンシが高くなる可能性があります。
使用可能な接続とスレッドが制限されています。
システム接続状態を確認し、CPU コア数を変更します。
クライアントリソースのボトルネックを表示し、同時スレッド数を適切に増やし、クライアントコードを最適化します。
クライアントでリクエストの再試行が複数回発生する
クライアントのログを確認して再試行の原因を特定し、Wireshark を使用してネットワークの問題を特定します。
クライアントログを確認して、再試行が実行されたかどうかを判断します。Java 用 OSS SDK を例にとります。警告レベルまたは情報レベルのログプロンプトをクエリできます。同様のログが記録されている場合、クライアントまたはサーバーで再試行が発生している可能性があります。
[Server]HTTP リクエストを実行できません: または [Client]HTTP リクエストを実行できません:
Java 用 OSS SDK を例にとります。クライアントログのレベルがデバッグの場合、次のログをクエリできます。同様のログが記録されている場合、再試行が実行されています。
再試行中
平均サーバーレイテンシが高い
ダウンロードとアップロードの平均サーバーレイテンシが高い場合は、次の考えられる原因を検討してください。
多数のクライアントが頻繁にオブジェクトにアクセスする。
OSS ログを表示し、CDN をアクティブにするか、バケットまたはオブジェクトのアクセス制御リスト (ACL) を変更します。
OSS の内部問題
テクニカルサポートに連絡し、クライアントログを提供して問題を解決します。
アプリケーションサーバーのエラー
一時的な増加
クライアントの再試行ポリシーを変更し、適切なコンセッションメカニズムを使用します。
永続的な増加
テクニカルサポートに連絡し、クライアントログを提供して問題を解決します。
ネットワークエラー
ネットワークエラーは、サーバーがリクエストを処理している間にサーバーとクライアント間の接続が失われたために、サーバーがリクエストに応答できない場合に発生します。この場合、リクエストの HTTP ステータスコード 499 が記録されます。HTTP ステータスコード 499 は、次の考えられる理由により返されます。
サーバーがデータを読み書きするリクエストを受信する前に、サーバーは接続が確立されているかどうかを確認します。そうでない場合、リクエストの HTTP ステータスコード 499 が記録されます。
サーバーがリクエストを処理しているときにクライアントが接続を無効にすると、リクエストの HTTP ステータスコード 499 が記録されます。
ネットワークエラーは、リクエストの処理中にクライアントがリクエストをキャンセルするか接続を失った場合に発生します。クライアントがリクエストをキャンセルした場合、アプリケーションのコードを確認し、クライアントが OSS との接続を切断する理由と時期を把握する必要があります。クライアントが接続を失った場合は、Wireshark などのツールを使用して、考えられる原因を特定できます。
クライアントエラー
クライアント認証エラーリクエストの増加
クライアント認証エラーリクエストが増加した場合、またはクライアントアプリケーションが多数の HTTP ステータスコード 403 エラー応答を受信した場合は、次の考えられる原因を検討してください。
無効なバケットドメイン名
ユーザーが第 3 レベルドメインまたは第 2 レベルドメインを使用してバケットにアクセスする場合、ドメイン名に含まれるリージョンがバケットが配置されているリージョンと異なる場合があります。たとえば、アクセスされるバケットは中国 (杭州) リージョンにありますが、アクセスされるドメイン名は Bucket.oss-cn-shanghai.aliyuncs.com です。この場合、バケットが配置されているリージョンを確認し、正しいドメイン名にアクセスする必要があります。
CDN アクセラレーションを使用する場合、CDN にマップされているバケットのドメイン名が正しくない可能性があります。この場合、オリジンがバケットの第 3 レベルドメインであるかどうかを確認します。
ユーザーが JavaScript クライアントを使用していて HTTP ステータスコード 403 が返される場合は、ユーザーがバケットにアクセスするために使用する Web ブラウザーにオリジン間リソース共有 (CORS) が構成されているかどうかを確認します。この場合、ユーザーが Web ブラウザーを使用してバケットにアクセスできるように、バケットの CORS 構成を確認して変更します。CORS ルールの構成方法の詳細については、「CORS」をご参照ください。
アクセス制御
Alibaba Cloud アカウントの AccessKey ペアを使用してバケットにアクセスする場合、AccessKey ペアの有効性を確認します。
RAM ユーザーの AccessKey ペアを使用してバケットにアクセスする場合、AccessKey ペアの有効性または認証を確認します。
Security Token Service (STS) によって生成された一時トークンを使用する場合、一時トークンの有効期限が切れていないかどうかを確認します。一時トークンの有効期限が切れている場合は、新しいトークンを申請します。
アクセスされるバケットまたはオブジェクトに ACL が構成されている場合、ACL 設定に基づいてユーザーが特定の操作を実行できるかどうかを確認します。
期限切れの URL
サードパーティユーザーが署名付き URL を使用してバケットにアクセスするときに HTTP ステータスコード 403 が返される場合、最も考えられる原因は、署名付き URL の有効期限が切れていることです。
RAM ユーザーが ossftp、ossbrowser、OSS コンソールなどの OSS ツールにログインすると、HTTP ステータスコード 403 が返される場合があります。この場合、正しい AccessKey ペアが入力されたかどうか、またはアカウントが RAM ユーザーの場合にユーザーが GetService オペレーションを呼び出す権限を持っているかどうかを確認します。
クライアントリクエストに対する HTTP ステータスコード 404 エラー応答数の増加
クライアントリクエストに返される HTTP ステータスコード 404 エラー応答は、ユーザーがアクセスするデータが存在しないことを示します。クライアントリクエストに対する HTTP ステータスコード 404 エラー応答の数が増加した場合は、次の考えられる原因を検討してください。
アプリケーションのビジネスロジック。たとえば、アプリケーションは Java 用 OSS SDK によって提供される doesObjectExist メソッドを呼び出して、オブジェクトが存在するかどうかを確認してから、さらなる操作を実行します。オブジェクトが存在しない場合、値 false がクライアントに返され、サーバーで HTTP ステータスコード 404 が生成されます。このシナリオでは、HTTP ステータスコード 404 はエラーを示していません。
アクセスされるオブジェクトは、クライアントアプリケーションまたは他のプロセスによって削除されます。この場合、アクセスされるオブジェクトの OSS ログをクエリします。
ネットワーク障害によって発生する削除操作の繰り返し。たとえば、クライアントはオブジェクトを削除する操作を開始します。リクエストはサーバーに到着し、オブジェクトは削除されます。ただし、ネットワーク障害のために応答はクライアントに届きません。その結果、クライアントはオブジェクトを削除する別のリクエストを送信し、HTTP ステータスコード 404 が返されます。この場合、クライアントログと OSS ログをクエリして表示し、HTTP ステータスコード 404 の原因を特定できます。
クライアントログをクエリし、クライアントから繰り返されるリクエストが送信されているかどうかを確認します。
OSS ログをクエリします。次に、オブジェクトに対して 2 つの削除操作が開始され、最初の操作の HTTP ステータスコードが 2xx であるかどうかを確認します。
有効リクエストの割合が低く、クライアントエラーリクエストが多い
有効リクエストの割合は、応答が HTTP ステータスコード 2xx または 3xx である成功したリクエストの、リクエスト総数に対する割合です。応答が HTTP ステータスコード 4xx または 5xx であるリクエストは失敗したリクエストとしてカウントされ、有効リクエストの割合が低下します。ユーザーごとのその他のクライアントエラーリクエストとは、サーバーエラーリクエスト、ネットワークエラーリクエスト、クライアント認証エラーリクエスト、リソースが見つからないエラーリクエスト、およびクライアントタイムアウトエラーリクエスト以外のエラーリクエストを指します。上記のエラーリクエストへの応答は、それぞれ 5xx、499、403、404、408、または対応する OSS エラーコードが RequestTimeout である 400 です。
OSS ログをクエリしてエラ-タイプを特定できます。次に、OSS エラーコードを参照し、アプリケーションのコードを変更して問題を解決します。詳細については、「エラーコード」をご参照ください。
ストレージ使用量の異常な増加
ストレージ使用量が劇的に増加した場合、原因はクリーニング操作の失敗である可能性があります。次の側面で問題をトラブルシューティングします。
クライアントアプリケーションは、特定のプロセスを使用して定期的なクリーニング操作を実行し、ストレージを解放します。次の手順を実行します。
クリーニング操作の失敗が原因で有効リクエスト率が低下しているかどうかを確認します。
有効リクエスト率が低下する具体的な原因とエラーリクエストの種類を特定します。次に、クライアントログからエラーに関する詳細を取得します。
クライアントアプリケーションは、ライフサイクルルールを構成することでバケットストレージをクリアします。ライフサイクルルールによってトリガーされるクリーニング操作の場合、OSS コンソールを使用するか、API オペレーションを呼び出して、ライフサイクルルールが正しく構成されているかどうかを確認する必要があります。そうでない場合は、OSS コンソールでライフサイクルルールを変更できます。ライフサイクルルールが変更されたかどうかを確認するには、OSS ログをクエリします。ライフサイクルルールが正しく構成されているにもかかわらず有効にならない場合は、OSS テクニカルサポートに連絡して支援を求めてください。
その他のストレージサービスの問題
このトピックのトラブルシューティングセクションでストレージサービスの問題を解決できない場合は、次の方法を使用して問題を診断およびトラブルシューティングします。
CloudMonitor コンソールで OSS の監視サービスを表示し、メトリックのベースラインが変更されているかどうかを確認します。問題が一時的なものか永続的なものか、およびこの問題の影響を受けるストレージ操作を判断できます。
OSS ログをクエリして、監視情報に基づいて同時に発生するすべてのエラーを取得します。これは、問題の特定と解決に役立つ可能性があります。
サーバー上の OSS ログでトラブルシューティングに十分な情報を提供できない場合は、クライアントログを使用してクライアントアプリケーションを調査するか、Wireshark などのネットワークツールを使用してネットワーク障害を調査します。