Redis で過剰な、または実行時間の長い (20 秒など) スロークエリが発生すると、シングルスレッドの操作キューがブロックされ、サービスが利用できなくなる可能性があります。Alibaba Cloud Elasticsearch と Rsbeat を使用して Redis のスローログをリアルタイムで収集・分析することで、パフォーマンスの問題を迅速に検出し、解決できます。
背景情報
Rsbeat は Redis のスローログを収集し、Elasticsearch に送信して Kibana コンソールで可視化・分析します。このトピックでは、以下の用語が使用されます。
-
Elasticsearch:Lucene ベースの分散型リアルタイム検索・分析エンジンで、Apache License の下でリリースされています。これにより、大規模なデータセットをほぼリアルタイムで保存、クエリ、分析できます。
Alibaba Cloud Elasticsearch は、Security、Machine Learning、Graph、Application Performance Monitoring (APM) などのオープンソース Elasticsearch の機能と互換性があります。バージョン 5.5.3、6.3.2、6.7.0、6.8.0、7.4.0 などがリリースされています。商用プラグイン X-Pack をサポートし、エンタープライズレベルの権限管理、セキュリティのモニタリングとアラート、自動レポート機能を提供します。この例では、Alibaba Cloud Elasticsearch を使用します。詳細については、「Alibaba Cloud Elasticsearch とは」をご参照ください。
-
Rsbeat:Redis のスローログを収集・分析するために使用されるデータシッパーです。詳細については、「Rsbeat 公式ドキュメント」をご参照ください。
-
Redis:オープンソースのインメモリデータ構造ストアです。データベース、キャッシュ、メッセージングミドルウェアとして使用できます。詳細については、「Redis 公式ドキュメント」をご参照ください。
ApsaraDB for Redis は、ネイティブ Redis プロトコルと互換性があり、高可用性ホットスタンバイアーキテクチャを備えたハイブリッドメモリディスクストレージをサポートし、高パフォーマンスの読み書き操作の要件を満たすように拡張できます。この例では、ApsaraDB for Redis を使用します。詳細については、「ApsaraDB for Redis とは」をご参照ください。
操作手順
-
同一の VPC (Virtual Private Cloud) 内に 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 コンソールにログインします。
-
上部のナビゲーションバーで、リージョンを選択します。
-
クラスター ページで、ターゲットインスタンスの 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.zip -
Rsbeat の設定を変更します。
-
次のコマンドを実行して rsbeat.yml ファイルを開きます。
cd rsbeat-master vim rsbeat.yml -
以下の指示に基づいて rsbeat および output.elasticsearch セクションの設定を変更し、変更を保存します。
以下は rsbeat.yml 設定の例です。
################################ Rsbeat ###################################### rsbeat: # Defines how often an event is sent to the output period: 1s redis: ["r-xxx.redis.rds.aliyuncs.com:6379"] slowerThan: 100 #================================ General ===================================== # The name of the shipper that publishes the network data. It can be used to group # all the transactions sent by a single shipper in the web interface. #name: # The tags of the shipper are included in their own field with each # transaction published. #tags: ["service-X", "web-tier"] # Optional fields that you can specify to add additional information to the # output. #fields: # env: staging #============================== Outputs ======================================= # Configure what outputs to use when sending the data collected by the beat. # Multiple outputs may be used. #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["es-cn-xxx.elasticsearch.aliyuncs.com:9200"] # Optional protocol and basic auth credentials. #protocol: "https" username: "elastic" password: "xxx" # Overwrite existing template template.overwrite: true表 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
Rsbeat が作成したインデックステンプレートが、Elasticsearch クラスターのインデックステンプレートと同じ名前を持つ場合に、Elasticsearch クラスターのインデックステンプレートを上書きするかどうかを指定します。デフォルト値:true。
-
-
Rsbeat サービスを開始します。
./rsbeat.linux.amd64 -c rsbeat.yml -e -d "*"
ステップ 3:Kibana コンソールでのグラフを使用した Redis スローログの分析
-
Elasticsearch クラスターの Kibana コンソールにログインします。
詳細については、「Kibana コンソールへのログイン」をご参照ください。
-
インデックスパターンを作成します。
- 左側のナビゲーションウィンドウで、[Management] をクリックします。
- [Kibana] セクションで、[Index Patterns] をクリックします。
- [Create index pattern] をクリックします。
-
表示されたセクションで、[Index pattern] フィールドにインデックスパターン名を入力し、[Next step] をクリックします。
- [Time Filter field name] を指定します。このトピックでは、このパラメーターを [@timestamp] に設定します。
- [Create index pattern] をクリックします。
-
Redis スローログの詳細を表示します。
-
左側のナビゲーションウィンドウで、[Discover] をクリックします。
-
[Discover] ページの左側で、[Add a filter] の下のドロップダウンリストから rsbeat-* を選択します。
-
ページの右上隅で時間範囲を選択し、その時間範囲内の Redis スローログの詳細を表示します。
[Discover] ページで、インデックスパターンとして
rsbeat-*を選択し、時間範囲を [Last 24 hours] に設定して、その期間のスローログレコードを表示します。ページには、一致した結果の数、時間分布を示すヒストグラム、およびcmd、ipPort、slowId、key、durationなどのフィールドを含むログエントリのリストが表示されます。
-
-
Redis スローログの数が最も多い上位 10 件のキーを記録し、降順に並べ替えます。
-
左側のナビゲーションウィンドウで、[Visualize] をクリックします。
-
[Visualize] ページで、
アイコンをクリックします。 -
[New Visualization] ダイアログボックスで、[Pie] をクリックします。
-
[From a New Search, Select Index] セクションで、rsbeat-* をクリックします。
-
[Metrics] および [Buckets] セクションでパラメーターを設定します。
メトリクス設定:
[Slice Size]:[Aggregation] を [Count] に設定し、[Custom Label] を
slowlog countに設定します。
バケット設定:
[Split Slices]:[Aggregation] を [Terms] に設定し、[Field] を
keyに設定し、[Order By] を [metric: slowlog count] に設定し、[Order] を [Descend] に設定し、[Size] を10に設定します。
-
アイコンをクリックして結果を表示します。
説明Kibana コンソールの使用上の注意については、「Kibana ユーザーガイド」をご参照ください。
-