サービスのパフォーマンスに影響を与える一般的な問題は、低速リクエストによる接続タイムアウトです。 ApsaraDB for Redisのスローログ機能を使用すると、これらのリクエストを送信するクライアントのIPアドレスを見つけ、スローログの詳細に基づいて問題をトラブルシューティングできます。
概要
スローログは、 ApsaraDB for Redisでの実行に指定されたしきい値よりも時間がかかるリクエストを記録します。 スローログは、データノードのスローログとプロキシノードのスローログに分類されます。
このトピックで提供されているスローログを表示する方法は、Redis 2.8を実行するTairインスタンスではサポートされていません。 代わりに、コンソールで を選択して、スローログを表示できます。 このようなインスタンスのスローログには、クライアントアドレスなどのクライアントに関する情報は含まれません。
データノードのスローログ
データノードで生成されたスローログで収集されたコマンド実行時間には、データノードでコマンドを実際に実行するのに必要な時間のみが含まれます。 データノードがプロキシノードまたはクライアントと通信するのに必要な時間と、シングルスレッドキュー内のコマンドの実行レイテンシは含まれません。
データノードのスローログは72時間保持されます。 保存できるスローログの数は無制限です。
ほとんどの場合、 ApsaraDB for Redisのパフォーマンスが高いため、データノードで生成されるスローログはほとんどありません。
Parameters
パラメーター | 説明 |
slowlog-log-slow-than | データノードのスローログのコマンド実行時間のしきい値。 コマンドがこのしきい値を超える期間実行された場合、そのコマンドはスローログに記録されます。 デフォルト値: 20000 単位:マイクロ秒。 20000マイクロ秒は20ミリ秒に等しい。 説明 ほとんどの場合、実際のレイテンシはこのパラメーターの指定された値よりも高くなります。これは、この値には、クライアント、プロキシノード、およびデータノード間でデータを送信および処理するのに必要な時間が含まれていないためです。 |
slowlog-max-len | 保存できるスローログエントリの最大数。 デフォルト値: 1024。 |
詳細については、「」「インスタンスパラメーターの設定」をご参照ください。
プロキシノードのスローログ
プロキシノードのスローログに収集されたコマンド実行期間は、プロキシノードがデータノードに要求を送信した時点から開始し、プロキシノードがデータノードから応答を受信した時点で終了します。 これには、データノードでのコマンド実行期間、ネットワークを介したデータ送信の期間、およびコマンドのキューイング待ち時間が含まれます。
プロキシノードのスローログは72時間保持されます。 保存できるスローログの数は無制限です。
ほとんどの場合、プロキシノードの低速ログに記録されたレイテンシ値は、アプリケーションの実際のレイテンシに近くなります。 したがって、 ApsaraDB for Redisのタイムアウトの問題をトラブルシューティングするときは、このスローログタイプをチェックすることを推奨します。
ApsaraDB for Redisの標準インスタンスには、プロキシノードのスローログは含まれません。
Parameters
パラメーター | 説明 |
rt_threshold_ms | プロキシノードのスローログのコマンド実行時間のしきい値。 デフォルト値: 500。 単位:ミリ秒。 しきい値は、クライアントのタイムアウト期間 (200ミリ秒から500ミリ秒) に近い値に設定することを推奨します。 |
詳細については、「」「インスタンスパラメーターの設定」をご参照ください。
スローログのクエリに使用されるメソッド
遅いログタイプ | 移動方法 |
データノードからのスローログ |
|
プロキシノードからのスローログ | ApsaraDB for Redisコンソールにログインするか、API操作を呼び出します。 |
手順
ほとんどの場合、サービスのタイムアウトはリクエストが遅いために発生します。 タイムアウトの問題をトラブルシューティングするには、次の手順を実行することを推奨します。
- サービスタイムアウトの問題が発生した場合は、まずプロキシノードで生成されたスローログを確認します。 詳細については、「スローログの照会」をご参照ください。 説明
- 標準インスタンスの場合は、手順3に進み、データノードからのスローログを分析します。
- プロキシノードからのスローログが存在しない場合、クライアントとApsaraDB for Redisインスタンス間のネットワーク接続を確認できます。
- プロキシノードで最も早いスローログを生成したコマンドを見つけます。 説明 低速リクエストがデータノードに蓄積されると、これらのリクエストはプロキシノードからの低速ログに記録されます。
この例では、最も早く記録されたスローログがKEYSコマンドによって生成されます。 ログエントリの右側のIPアドレスは、コマンドを送信するクライアントのIPアドレスです。
- データノードからのスローログを確認して、タイムアウトの問題の原因となるプロキシノードからのスローログを見つけます。 説明 通常、プロキシノードで最初にスローログを生成するコマンドは、データノードでスローログを生成することもできます。 データノードからのスローログの数は、通常、プロキシノードのそれよりも少ない。 これは、2つのスローログタイプでは、実行時間とスローログしきい値の定義が異なるためです。
この例では、プロキシノードからのスローログを表示した後、KEYSコマンドによって生成されたスローログがデータノードにも存在することがわかります。 [プロキシ] タブに表示される他のスローログは、[データノード] タブに存在しません。 これは、KEYSコマンドがタイムアウトの問題を引き起こすことを示しています。
- プロキシノードからのスローログでは、手順2で確認したコマンドに基づいて、最適化のためにクライアントIPアドレスを検索できます。