Prometheusを使用して、Redisクラスターの監視

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/7d37d6aa-b709-44ae-7992-c15ec13df1f7.png)

#はじめに

この記事では、Redisデータベースモニタリングとは何か、および[MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20Redis%20Clusters%20with%20Prometheus)のHosted Prometheusを使用してRedisデータベースモニタリングシステムをセットアップする方法について概説します。 次に、Grafanaに表示したときに最終的なグラフとダッシュボードがどのように表示されるかもお見せしていきます。 MetricFireが提供するHosted PrometheusとHosted Grafanaを使用して監視を強化し、またシミュレートされたRedisDBを使用してGrafanaダッシュボードのデータを生成していきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/f4fdc4b7-3248-31f4-0e8d-7be4179f3ec1.png)

#Redis DBおよびRedisクラスターとは何か？
Redis DB（データベース）は、データベース、キャッシュ、またはメッセージブローカーとして使用できるキーと値のペアにデータを編成するインメモリデータ構造ストアです。 Redis DBはオープンソースであり、さまざまなホスティングサービスが提供されています。 Redisデータ構造は、パフォーマンスと使いやすさの両方の点で効率的です。 Redis DBは通常、単一のユーザー名に接続されているパスワードなど、迅速に取得する必要のあるデータ、または一時的ですぐに削除できるデータに使用されます。シンプルなコマンドラインインターフェイスは開発の労力を軽減し、メモリ内コンポーネントはレイテンシーを削減し、スループット（処理能力）を向上させます。

RedisクラスターはRedisDBの実装であり、複数のRedisノード間でデータを自動的にシャーディングできます。クラスターは、パーティショニング中に一定レベルの冗長性と可用性も提供します。つまり、ノードが回復中または障害発生したときにデータを通信/送信することができます。 また、「マスター」ノードに障害が発生した場合にデータを保護するマスタースレーブモデルでも実行されます。

[MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20Redis%20Clusters%20with%20Prometheus)はRedisをどのように監視するのか？

各Redisクラスターには、ポート8070でリッスンするmetrics_exporterコンポーネントがあり、Prometheusがメトリックを取得できるPrometheusエンドポイントとして機能します。 Prometheusを使用してRedisメトリックを監視すると、データベースにほとんど、またはまったく負荷がかかりません。 Redisは必要なメトリックをPrometheusエンドポイントにプッシュし、そこでユーザーは利用可能なRedisメトリックについてPrometheusでスクレイピングできるため、メトリックが照会されるたびにRedisをスクレイピングすることを回避できます。 こうすることで、Redisクラスター内のキーの総数、処理されたコマンドの現在の数、メモリ使用量、およびRedis接続の総数を監視できます。 さらに、クラスター全体のデータ、個々のノードのデータ、または単一のデータベースのデータも監視できます。

[MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20Redis%20Clusters%20with%20Prometheus)によってホストされているHosted Prometheusを使用している場合は、まったく同じように機能します。 このツールで、Redis DBエンドポイントをスクレイプしてメトリック情報を取得し、Grafanaダッシュボードに自動的に表示されます。

#MetricFireを使用してRedisクラスターモニタリングをどのように設定するのか？

####A. MetricFireUIにPrometheusとRedisをインストールする

- MetricFireUIの左側にある[Add on]メニューに移動します。
- PrometheusAPIキーを見つけます。
- prometheus.ymlファイルを編集して、APIキーをbearer_tokenとしてremote_writeセクションとremote_readセクションを含めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/063ccb58-c2a1-76d2-d6fd-15495e09f4f0.png)

####B. Prometheus構成を編集してRedisEnterpriseジョブを含める

[docs.redislabs.com](https://docs.redislabs.com/latest/rs/administering/monitoring-metrics/prometheus-integration/)によると、上記の手順のPrometheus構成を現在のフォルダーの./prometheus/prometheus.ymlにコピーします。 クラスター名は、完全ドメイン名またはIPアドレスのいずれかです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/5ea24f5b-35c5-5355-2a14-0c5ff5166a16.png)


####C. MetricFire UIのGrafanaダッシュボードにデータソースを追加する

MetricFire UIで、左側のメニューの[Dashboard]に移動し、[Graph]をクリックします。 以下に見られるように、[Data Sources]メニューに移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/e31ec292-7c82-97ea-8658-1f095083628b.png)

Prometheusをデータソースとして追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/07334445-bb29-7f2a-3abe-5a8e4625f20e.png)

以下に示すように、Prometheusデータソース設定メニューが表示されます。 URLをhttp：// localhost：9090に変更します。 [Access]で、[Browser]を選択します。 次に、[Save & Test]をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/13f76c68-d5ab-1b4c-714c-5c69b292c327.png)

####D. Grafanaダッシュボードでデータを表示するには、データソースをPrometheusに変更します

次に、データソースをPrometheusに変更して、Grafanaダッシュボードにデータが表示されるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/0465a065-124a-9a79-1990-71c86e6f8585.png)

#Prometheusを使用したRedisクラスターモニタリングのダッシュボードの例

**グラフ1 - 4つのグラフを含むダッシュボード**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/1265bbe5-8e08-73b4-86c6-97af5eb56c71.png)

これは、Grafanaダッシュボード内の行の例で、4つのパネルで構成されています。 Grafanaには、グラフ、テキスト、および表を関連するカテゴリにグループ化する機能があるため、1つのダッシュボード内でさまざまなメトリックを簡単に並べ替えることができます。 パネルを整理すると、相関関係がわかり、問題のトラブルシューティングをすばやく行うことができます。

このダッシュボードには、RedisDBからプッシュされた以下の4つのメトリックが表示されています。 

- **Redisクライアントビュー**　-　Redisクライアントの総数
- **キービュー**　-　各RedisDBインスタンスのキーの総数
- **処理されたコマンド**　-　マシンのグループごとに処理されたコマンドの数
- **メモリ**　-　異なるアグリゲーションマシンごとの合計メモリ使用量

**グラフ2 - アグリゲーションマシンでのRedis**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/736425ea-8ee5-18f3-4de5-d87f7029d082.png)

このグラフは、さまざまなアグリゲーションマシンの合計メモリ使用量を示しています。 これらのマシンは、取り込まれたデータを収集し、データをより管理しやすい形式に集約する役割を果たします。 普通、各リソースが使用しているメモリの量を監視する必要があり、 リソースが最大メモリ消費量に近づくと、パフォーマンスが低下し始めます。 メモリ使用量の急増は、アプリケーションとプロセスの重要な変更の識別子として機能する可能性があります。

このグラフは「スタック」されています。つまり、線の間の全範囲が現在のメトリックが読み取っているものです。 これにより、値がすべて類似している場合に送信されるさまざまなメトリックを簡単に確認できます。 このグラフにはフローティングの凡例もあり、グラフ自体が見やすくなっています。

**グラフ3 - 処理されたコマンド**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/b8f425f2-fb55-af8a-e6c9-7422215b1b42.png)

これは、上のグラフ１から拡大された「処理されたコマンド」グラフです。 これは、Redis DBインスタンスを実行しているマシンのさまざまなグループと、それに関連して処理されたコマンドの数を示しています。 「処理されたコマンド」グラフは、DB管理者がRedis DBに渡されたコマンドを監視できるため、グラフ化するための重要なメトリックです。 これは、リソースにかかるトラフィックと潜在的なストレスを示しています。

**グラフ4 - キービュー**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/9b06ba2d-9e60-3763-e0e8-a6d0ab167e0a.png)

これも、上のグラフ１から拡大されたキービューグラフです。 このグラフでは、各RedisDBインスタンスのキーの総数を示しています。

他のグラフと同様に、インスタンス内のキーの総数を知ることで、管理者は各RedisDBをより深く理解できます。 分散キャッシングストアとしてRedisDBを使用している場合、このようなグラフは、各インスタンスが適切にバランスされて使用されていることを確認するのに役立ちます。 インスタンスでキーの大幅な低下が見られる場合、この問題をさらに調査するために重要となってくるメトリックです。

#RedisDBの主要なメトリクス
RedisDBから自動的にプッシュされるメトリックはたくさんあります。 以下のいくつかをご覧ください。完全なリストはRedisのWebサイトにあります。

- **Bdb_avg_latency** - データベースでの操作の平均待ち時間（マイクロ秒単位）
- **Bdb_conns** - データベースへのクライアント接続の数
- **Bdb_ingress_bytes** - DBへの着信ネットワークトラフィックの場合のレート（バイト/秒）
- **Bdb_no_of_keys** - データベース内のキーの数
- **Node_conns** - ノード上のエンドポイントに接続されているクライアントの数
- **Node_cpu_user** - ユーザーが費やしたCPU時間の部分-ペースプロセス
- **Node_free_memory** - バイト単位でのノードのフリーメモリ
- **Node_up** - ノードがクラスターの一部であり、接続されているか
- **Redis_up** - シャードが稼働していルカ

#まとめ
[MetricFire](https://try.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20Redis%20Clusters%20with%20Prometheus)で何ができるかについて詳しくは、ブログで[Grafanaダッシュボードの作成](https://qiita.com/MetricFire/items/f7ac1c9edf33eac48772)や、[GrafanaをKubernetesにデプロイする方法](https://qiita.com/MetricFire/items/1f15b6f1237ade0ce0d9)などのチュートリアルをご覧ください。

RedisのPrometheus監視について、ご質問がある際は、是非[デモを予約](https://www.metricfire.com/demo/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Monitoring%20Redis%20Clusters%20with%20Prometheus)し、ご連絡ください。

それでは、またの記事で！