Redis は、高パフォーマンスを提供する、広く使用されているキーバリューデータベースです。 Redis はシングルスレッドです。 Redis の不適切な使用は、クエリ速度の低下を引き起こす可能性があります。 過剰なスロークエリ、または 20 秒など長時間かかるスロークエリは、操作キューをブロックしたり、サービスを使用不可にしたりする可能性があります。 この場合、例外を特定して処理するために、Redis スローログをリアルタイムで収集および分析する必要があります。 このトピックでは、Alibaba Cloud Elasticsearch と Rsbeat を使用して Redis スローログをリアルタイムで分析する方法について説明します。
背景情報
Rsbeat を使用して、Redis スローログを収集し、Elasticsearch に送信できます。 次に、Kibana コンソールでグラフを使用してログを分析します。 以下の説明では、関連用語について説明します。
Elasticsearch: Lucene ベースの分散型リアルタイム検索および分析エンジン。 Apache ライセンスでリリースされたオープンソース製品です。 Elasticsearch は、企業向けの一般的な検索エンジンです。 大量のデータセットをほぼリアルタイムで保存、クエリ、および分析するための分散システムを提供します。 Elasticsearch は、複雑なクエリと高パフォーマンスアプリケーションをサポートするための基本エンジンまたはテクノロジーとして使用されます。
Alibaba Cloud Elasticsearch は、Security、Machine Learning、Graph、Application Performance Monitoring(APM)などのオープンソースの Elasticsearch 機能と互換性があります。 Alibaba Cloud Elasticsearch は、5.5.3、6.3.2、6.7.0、6.8.0、7.4.0 などのバージョンでリリースされています。 商用プラグイン X-Pack をサポートしており、データ分析と検索を含むシナリオに最適です。 Alibaba Cloud Elasticsearch は、オープンソースの Elasticsearch の機能に基づいて、エンタープライズレベルの権限管理、セキュリティ監視とアラート、自動レポートなどの機能を実装しています。 この例では、Alibaba Cloud Elasticsearch を使用します。 詳細については、「Alibaba Cloud Elasticsearch とは」をご参照ください。
Rsbeat: Redis スローログを収集および分析するために使用されるデータシッパー。 詳細については、「公式 Rsbeat ドキュメント」をご参照ください。
Redis: オープンソースのインメモリデータ構造ストア。 データベース、キャッシュ、およびメッセージングミドルウェアとして使用できます。 詳細については、「公式 Redis ドキュメント」をご参照ください。
ApsaraDB for Redis は、ネイティブ Redis プロトコルと互換性のあるデータベースサービスです。 メモリとハードディスクのハイブリッドストレージをサポートしています。 ApsaraDB for Redis は、可用性の高いホットスタンバイアーキテクチャを提供し、高パフォーマンスの読み取り/書き込み操作の要件に合わせてスケーリングできます。 この例では、ApsaraDB for Redis を使用します。 詳細については、「ApsaraDB for Redis とは」をご参照ください。
手順
同じ仮想プライベートクラウド(VPC)に Alibaba Cloud Elasticsearch クラスタ、ApsaraDB for Redis インスタンス、および Elastic Compute Service(ECS)インスタンスを作成します。
手順 1: ApsaraDB for Redis インスタンスのスロークエリパラメータを設定する
Redis スローログを生成する条件を設定し、要件に基づいて記録できるスローログの最大数を指定します。
ECS インスタンスに Rsbeat をインストールし、Rsbeat 設定ファイルで ApsaraDB for Redis インスタンスと Alibaba Cloud Elasticsearch クラスタを指定します。
手順 3: Kibana コンソールでグラフを使用して Redis スローログを分析する
Alibaba Cloud Elasticsearch クラスタの Kibana コンソールで Redis スローログの詳細を表示し、ビジネス要件に基づいてログを分析します。
準備を行う
Alibaba Cloud Elasticsearch クラスタを作成し、クラスタの自動インデックス作成機能を有効にします。
詳細については、「Alibaba Cloud Elasticsearch クラスタを作成する」および「YML ファイルを設定する」をご参照ください。 この例では、Standard Edition の Elasticsearch V6.7 クラスタを使用します。
ApsaraDB for Redis インスタンスを作成します。
詳細については、「手順 1: ApsaraDB for Redis インスタンスを作成する」をご参照ください。 この例では、Community Edition の ApsaraDB for Redis V5.0 インスタンスを使用します。 このインスタンスは、Alibaba Cloud Elasticsearch クラスタと同じ VPC にあります。 これにより、内部ネットワーク経由で Elasticsearch クラスタにアクセスできます。
ECS インスタンスを作成します。
詳細については、「ウィザードを使用してインスタンスを作成する」をご参照ください。 この例では、64 ビット CentOS 7.6 のイメージを実行する ECS インスタンスを使用します。 このインスタンスは、ApsaraDB for Redis インスタンスと Alibaba Cloud Elasticsearch クラスタと同じ VPC にあります。
ApsaraDB for Redis インスタンスへのアクセス用に IP アドレスホワイトリストを設定します。
ECS インスタンスのプライベート IP アドレスを ApsaraDB for Redis インスタンスの IP アドレスホワイトリストに追加します。 詳細については、「ホワイトリストを設定する」をご参照ください。
手順 1: ApsaraDB for Redis インスタンスのスロークエリパラメータを設定する
ApsaraDB for Redis コンソール にログインします。
上部のナビゲーションバーで、リージョンを選択します。
[インスタンス] ページで、ApsaraDB for Redis インスタンスを見つけ、その ID をクリックします。
左側のナビゲーションペインで、[システムパラメータ] をクリックします。
[システムパラメータ] タブで、[slowlog-log-slower-than] パラメータと [slowlog-max-len] パラメータを見つけます。 次に、要件に基づいてこれらのパラメータを変更します。
パラメータ
説明
例
slowlog-log-slower-than
コマンドの実行時間がこのパラメータの値を超えると、コマンドはスロークエリとして定義され、スローログとして記録されます。 実行時間には、キューイングに費やされた時間は含まれません。 単位: マイクロ秒。 デフォルト値: 10000(10 ミリ秒)。
重要このパラメータを負の数に設定すると、ApsaraDB for Redis はスロークエリをスローログとして記録しません。 このパラメータを 0 に設定すると、ApsaraDB for Redis はすべてのコマンドを記録します。
この例では、このパラメータは 20000 に設定されています。 この値は、実行時間が 20 ミリ秒を超えるコマンドがスローログとして記録されることを示します。
slowlog-max-len
スローログとして記録できるスロークエリコマンドの最大数。 記録されるコマンドの数がこのパラメータの値を超えると、ApsaraDB for Redis は最も古いスローログを削除します。
この例では、このパラメータは 100 に設定されています。 この値は、ApsaraDB for Redis が最新の 100 個のスロークエリコマンドをスローログとして記録することを示します。
手順 2: Rsbeat をインストールして設定する
ECS インスタンスに接続します。
詳細については、「ECS インスタンスに接続する」をご参照ください。
Rsbeat のパッケージをダウンロードして解凍します。
この例では、Rsbeat 5.3.2 を使用します。
wget https://github.com/Yourdream/rsbeat/archive/master.zip unzip master.zipRsbeat の設定を変更します。
次のコマンドを実行して、rsbeat.yml ファイルを開きます。
cd rsbeat-master vim rsbeat.yml以下の手順に基づいて rsbeat セクションと output.elasticsearch セクションの設定を変更し、変更を保存します。

表 1. rsbeat セクションの設定 パラメータ
説明
period
Rsbeat が Redis スローログを Elasticsearch クラスタに送信する間隔。
redis
ApsaraDB for Redis インスタンスへの接続に使用するエンドポイント。 詳細については、「エンドポイントを表示する」をご参照ください。
重要ApsaraDB for Redis インスタンスにアクセスするために使用されるパスワードは、Rsbeat の設定ファイルでは指定されていません。 Rsbeat が ApsaraDB for Redis インスタンスにアクセスできるようにするには、エンドポイントを取得した後にパスワードなしアクセスを有効にする必要があります。 詳細については、「パスワードなしアクセスを有効にする」をご参照ください。
slowerThan
config set slowlog-log-slower-thanコマンドを Redis サーバーに送信するために必要な時間。 単位: マイクロ秒。表 2. output.elasticsearch セクションの設定 パラメータ
説明
hosts
Elasticsearch クラスタへのアクセスに使用するエンドポイント。 エンドポイントは、Elasticsearch クラスタの [基本情報] ページで取得できます。 詳細については、「クラスタの基本情報を表示する」をご参照ください。
username
Elasticsearch クラスタへのアクセスに使用するユーザー名。 デフォルトのユーザー名は elastic です。
password
Elasticsearch クラスタへのアクセスに使用するパスワード。 パスワードは、Elasticsearch クラスタの作成時に指定します。 パスワードを忘れた場合は、リセットできます。 パスワードのリセットに関する注意事項と手順については、「Elasticsearch クラスタのアクセスパスワードをリセットする」をご参照ください。
template.overwrite
Elasticsearch クラスタのインデックステンプレートと同じ名前を持つ Rsbeat 作成のインデックステンプレートが、Elasticsearch クラスタのインデックステンプレートを上書きするかどうかを指定します。 デフォルト値: true。
Rsbeat サービスを開始します。
./rsbeat.linux.amd64 -c rsbeat.yml -e -d "*"
手順 3: Kibana コンソールでグラフを使用して Redis スローログを分析する
Elasticsearch クラスタの Kibana コンソールにログインします。
詳細については、「Kibana コンソールにログインする」をご参照ください。
インデックスパターンを作成します。
- 左側のナビゲーションペインで、[管理] をクリックします。
- [kibana] セクションで、[インデックスパターン] をクリックします。
- [インデックスパターンの作成] をクリックします。
表示されるセクションで、[インデックスパターン] フィールドにインデックスパターンの名前を入力し、[次の手順] をクリックします。

- [タイムフィルターフィールド名] を指定します。 このトピックでは、このパラメータは [@timestamp] に設定されています。
- [インデックスパターンの作成] をクリックします。
Redis スローログの詳細を表示します。
左側のナビゲーションペインで、[検出] をクリックします。
[検出] ページの左側の [フィルタを追加] の下のドロップダウンリストから rsbeat-* を選択します。
ページの右上隅で、時間範囲を選択し、その時間範囲内の Redis スローログの詳細を表示します。

Redis スローログの数が最も多い上位 10 個のキーを記録し、降順に配置します。
左側のナビゲーションペインで、[視覚化] をクリックします。
[視覚化] ページで、
アイコンをクリックします。[新しい視覚化] ダイアログボックスで、[円グラフ] をクリックします。

[新しい検索からインデックスを選択] セクションで、rsbeat-* をクリックします。

次の図に基づいて、[メトリック] セクションと [バケット] セクションのパラメータを設定します。

アイコンをクリックして結果を表示します。
説明Kibana コンソールの使用上の注意については、「Kibana ユーザーガイド」をご参照ください。