Redis 監視と可観測性:Prometheus Exporter と Grafana の実践ダッシュボード
Redis を本番環境で運用していると、パフォーマンスの低下やメモリ不足といった問題に直面することがあります。 そんなとき、リアルタイムで Redis の状態を把握できる監視システムがあれば、問題を早期に発見し、迅速に対応できるでしょう。
本記事では、Prometheus Exporter を使った Redis のメトリクス収集と、Grafana による可視化の実践方法を解説します。 初心者の方でも実装できるよう、段階的にセットアップ手順を説明していきますね。
背景
Redis 監視の必要性
Redis はインメモリデータベースとして、Web アプリケーションのキャッシュやセッション管理、リアルタイムデータ処理など、幅広い用途で活用されています。 しかし、メモリを主要なリソースとして使用するため、適切な監視がなければ突然のメモリ不足やパフォーマンス劣化が発生するリスクがあるのです。
以下の図は、Redis 監視システムの全体像を示しています。
mermaidflowchart LR
redis["Redis<br/>サーバー"]
exporter["Redis<br/>Exporter"]
prometheus["Prometheus"]
grafana["Grafana<br/>ダッシュボード"]
user["運用担当者"]
redis -->|メトリクス取得| exporter
exporter -->|メトリクス公開<br/>:9121| prometheus
prometheus -->|定期的に収集| exporter
prometheus -->|データ取得| grafana
grafana -->|可視化| user
図解のポイント:Redis Exporter が Redis からメトリクスを取得し、Prometheus が収集、Grafana で可視化という流れになります。
可観測性の三本柱
モダンな監視システムでは「可観測性(Observability)」という概念が重要視されています。 可観測性は以下の三つの要素で構成されますね。
| # | 要素 | 説明 | Redis での例 |
|---|---|---|---|
| 1 | メトリクス | 数値データの時系列記録 | メモリ使用量、コマンド実行数 |
| 2 | ログ | イベントの記録 | スロークエリログ、エラーログ |
| 3 | トレース | リクエストの追跡 | コマンド実行のレイテンシー |
本記事では、この中でも特に「メトリクス」に焦点を当て、Prometheus と Grafana を使った実践的な監視方法を紹介します。
Prometheus と Grafana の役割
Prometheus は時系列データベースとして、メトリクスを効率的に収集・保存します。 一方、Grafana はそのデータを美しいグラフやダッシュボードとして可視化するツールです。
この二つを組み合わせることで、Redis の状態をリアルタイムで把握し、問題の早期発見と迅速な対応が可能になるでしょう。
課題
従来の監視方法の限界
Redis には INFO コマンドや MONITOR コマンドなど、標準的な監視コマンドが用意されていますね。
しかし、これらには以下のような課題があります。
mermaidflowchart TD
start["従来の監視方法"]
info["INFO コマンド"]
monitor["MONITOR コマンド"]
cli["CLI での確認"]
issue1["リアルタイム性<br/>が低い"]
issue2["パフォーマンス<br/>への影響"]
issue3["履歴データの<br/>欠如"]
issue4["アラート機能<br/>がない"]
start --> info
start --> monitor
start --> cli
info --> issue1
info --> issue3
monitor --> issue2
cli --> issue1
cli --> issue4
主な課題:
- 手動確認の負担:CLI で都度コマンドを実行する必要があり、継続的な監視が困難です
- 履歴データの不足:過去のパフォーマンス傾向を分析できません
- アラート機能の欠如:問題発生時に自動通知ができないのです
- 複数インスタンスの管理:Redis クラスター環境では、各ノードを個別に確認する必要があります
本番環境での具体的な問題
実際の本番環境では、以下のような問題が発生しがちです。
| # | 問題 | 影響 | 検知の難しさ |
|---|---|---|---|
| 1 | メモリ使用率の急増 | OOM によるサービス停止 | ★★★ |
| 2 | スロークエリの増加 | レスポンス遅延 | ★★☆ |
| 3 | コネクション数の急増 | 接続エラー | ★★★ |
| 4 | キーの有効期限切れ未処理 | メモリリーク | ★★★ |
| 5 | レプリケーション遅延 | データ不整合 | ★★☆ |
これらの問題を早期に発見するには、継続的かつ自動的な監視システムが不可欠なのです。
解決策
Prometheus と Grafana による統合監視
Redis の監視課題を解決するため、Prometheus Exporter を使ったメトリクス収集と、Grafana による可視化を実装します。 このアプローチにより、以下のメリットが得られるでしょう。
主なメリット:
- リアルタイムでのメトリクス監視
- 長期的なパフォーマンス傾向の分析
- しきい値ベースのアラート設定
- 複数 Redis インスタンスの一元管理
- カスタマイズ可能なダッシュボード
以下の図は、監視システムの詳細なアーキテクチャを示しています。
mermaidflowchart TB
subgraph redis_layer["Redis レイヤー"]
redis1["Redis Master"]
redis2["Redis Replica 1"]
redis3["Redis Replica 2"]
end
subgraph monitoring["監視レイヤー"]
exp1["Redis Exporter<br/>:9121"]
exp2["Redis Exporter<br/>:9122"]
exp3["Redis Exporter<br/>:9123"]
end
subgraph collection["収集・可視化レイヤー"]
prom["Prometheus<br/>:9090"]
graf["Grafana<br/>:3000"]
end
redis1 --> exp1
redis2 --> exp2
redis3 --> exp3
exp1 --> prom
exp2 --> prom
exp3 --> prom
prom --> graf
アーキテクチャのポイント:各 Redis インスタンスに対して Exporter を配置し、Prometheus が一元的に収集します。
必要なコンポーネント
監視システムを構築するために、以下のコンポーネントを使用します。
| # | コンポーネント | バージョン | 役割 |
|---|---|---|---|
| 1 | Redis | 7.x | 監視対象のデータベース |
| 2 | Redis Exporter | 1.55.0 | メトリクスの収集と公開 |
| 3 | Prometheus | 2.48.0 | メトリクスの保存と管理 |
| 4 | Grafana | 10.2.0 | メトリクスの可視化 |
| 5 | Docker / Docker Compose | 最新版 | コンテナ環境の構築 |
これらを Docker Compose で統合的に管理することで、簡単にセットアップできますね。
具体例
Docker Compose によるセットアップ
それでは、実際に監視システムを構築していきましょう。 まず、Docker Compose を使って必要なコンポーネントを一括でセットアップします。
プロジェクト構成
以下のようなディレクトリ構成で進めていきます。
redis-monitoring/
├── docker-compose.yml
├── prometheus/
│ └── prometheus.yml
├── grafana/
│ └── dashboards/
│ └── redis-dashboard.json
└── README.md
Docker Compose ファイルの作成
まず、すべてのサービスを定義する docker-compose.yml を作成しましょう。
このファイルで Redis、Exporter、Prometheus、Grafana を一括管理します。
yamlversion: '3.8'
services:
# Redis サーバー
redis:
image: redis:7-alpine
container_name: redis-server
ports:
- '6379:6379'
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
networks:
- monitoring
Redis サービスの設定ポイント:
maxmemory 256mb:メモリ使用量を制限し、監視しやすくしますmaxmemory-policy allkeys-lru:メモリ不足時の削除ポリシーを設定- ボリュームマウントでデータを永続化します
続いて、Redis Exporter の設定を追加しましょう。
yaml# Redis Exporter
redis-exporter:
image: oliver006/redis_exporter:v1.55.0
container_name: redis-exporter
ports:
- '9121:9121'
environment:
# Redis の接続先を環境変数で指定
REDIS_ADDR: 'redis:6379'
# パスワードが必要な場合は設定
# REDIS_PASSWORD: "your_password"
depends_on:
- redis
networks:
- monitoring
Exporter の設定ポイント:
REDIS_ADDR:監視対象の Redis サーバーを指定- ポート 9121 でメトリクスを公開します
depends_onで Redis 起動後に Exporter が起動するよう制御
次に Prometheus の設定を追加します。
yaml# Prometheus
prometheus:
image: prom/prometheus:v2.48.0
container_name: prometheus
ports:
- '9090:9090'
volumes:
# 設定ファイルをマウント
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
# 設定ファイルの場所を指定
- '--config.file=/etc/prometheus/prometheus.yml'
# データの保存期間を 30 日に設定
- '--storage.tsdb.retention.time=30d'
depends_on:
- redis-exporter
networks:
- monitoring
Prometheus の設定ポイント:
- 設定ファイルで収集対象を定義します
- データ保存期間を 30 日に設定(必要に応じて調整可能)
- ボリュームでデータを永続化
最後に Grafana の設定を追加しましょう。
yaml # Grafana
grafana:
image: grafana/grafana:10.2.0
container_name: grafana
ports:
- "3000:3000"
environment:
# 管理者パスワードを設定
GF_SECURITY_ADMIN_PASSWORD: admin
# 匿名アクセスを無効化
GF_AUTH_ANONYMOUS_ENABLED: "false"
volumes:
- grafana_data:/var/lib/grafana
# ダッシュボードのプロビジョニング
- ./grafana/dashboards:/etc/grafana/provisioning/dashboards
depends_on:
- prometheus
networks:
- monitoring
# ネットワークの定義
networks:
monitoring:
driver: bridge
# ボリュームの定義
volumes:
redis_data:
prometheus_data:
grafana_data:
Grafana の設定ポイント:
- 初期管理者パスワードを環境変数で設定
- ダッシュボードを自動プロビジョニング
- データを永続化してコンテナ再起動後も設定を保持
Prometheus 設定ファイルの作成
次に、Prometheus がどこからメトリクスを収集するかを定義する設定ファイルを作成します。
prometheus/prometheus.yml ファイルに以下の内容を記述しましょう。
yaml# グローバル設定
global:
# メトリクス収集間隔(15 秒ごと)
scrape_interval: 15s
# タイムアウト時間
scrape_timeout: 10s
# 外部システムへのラベル付け
external_labels:
monitor: 'redis-monitor'
environment: 'production'
グローバル設定の意味:
scrape_interval:15 秒ごとにメトリクスを収集(リアルタイム性とリソースのバランス)scrape_timeout:10 秒以内に応答がない場合はタイムアウトexternal_labels:アラート通知などで環境を識別できるようラベル付け
続いて、収集ジョブの設定を追加します。
yaml# メトリクス収集ジョブの定義
scrape_configs:
# Prometheus 自身のメトリクス
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
Prometheus 自身の健全性も監視対象にすることで、監視システム全体の状態を把握できますね。
次に、Redis Exporter からのメトリクス収集設定を追加しましょう。
yaml# Redis Exporter のメトリクス
- job_name: 'redis'
static_configs:
- targets: ['redis-exporter:9121']
labels:
# Redis インスタンスを識別するラベル
instance: 'redis-master'
role: 'master'
Redis ジョブの設定ポイント:
targets:Exporter のエンドポイントを指定labels:複数 Redis インスタンスを区別するためのラベル付け- ラベルを使って Grafana でインスタンスごとにフィルタリング可能
複数の Redis インスタンスを監視する場合の設定例も見てみましょう。
yaml# 複数 Redis インスタンスの監視例
- job_name: 'redis-cluster'
static_configs:
# Master ノード
- targets: ['redis-exporter-1:9121']
labels:
instance: 'redis-master'
role: 'master'
datacenter: 'dc1'
# Replica ノード 1
- targets: ['redis-exporter-2:9122']
labels:
instance: 'redis-replica-1'
role: 'replica'
datacenter: 'dc1'
# Replica ノード 2
- targets: ['redis-exporter-3:9123']
labels:
instance: 'redis-replica-2'
role: 'replica'
datacenter: 'dc2'
クラスター監視のポイント:
- 各ノードに異なる Exporter を割り当て
roleラベルで Master/Replica を区別datacenterラベルでデータセンターごとの分析が可能
アラートルールの設定
メトリクスの収集だけでなく、問題発生時に自動通知を受け取るアラートルールも設定しましょう。 Prometheus の設定ファイルにアラートルールファイルの参照を追加します。
yaml# アラートルールファイルの読み込み
rule_files:
- 'alerts/redis_alerts.yml'
# Alertmanager の設定(オプション)
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
次に、prometheus/alerts/redis_alerts.yml ファイルを作成し、具体的なアラートルールを定義します。
yamlgroups:
- name: redis_alerts
interval: 30s
rules:
# メモリ使用率が 80% を超えた場合
- alert: RedisHighMemoryUsage
expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: 'Redis のメモリ使用率が高い (instance {{ $labels.instance }})'
description: 'メモリ使用率が {{ $value | humanizePercentage }} に達しています'
アラートルールの構成要素:
expr:アラート条件(PromQL クエリ)for:条件が継続する時間(5 分間継続で発火)severity:重要度レベルannotations:アラート通知に含める詳細情報
さらに、重要なアラートルールをいくつか追加しましょう。
yaml# 接続数が上限の 90% を超えた場合
- alert: RedisHighConnectionCount
expr: redis_connected_clients / redis_config_maxclients > 0.9
for: 3m
labels:
severity: warning
annotations:
summary: 'Redis の接続数が上限に近い (instance {{ $labels.instance }})'
description: '接続数: {{ $value | humanize }} / 上限'
# Redis が停止している場合
- alert: RedisDown
expr: up{job="redis"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: 'Redis が停止しています (instance {{ $labels.instance }})'
description: 'Redis インスタンスに接続できません'
これらのアラートルールにより、問題を早期に検知できるでしょう。
Grafana ダッシュボードの構築
それでは、収集したメトリクスを美しく可視化する Grafana ダッシュボードを作成します。 まず、Grafana にアクセスして Prometheus をデータソースとして追加しましょう。
データソースの追加
ブラウザで http://localhost:3000 にアクセスし、以下の手順でデータソースを追加します。
手順:
- 管理者アカウント(admin/admin)でログイン
- 左メニューから「Configuration」→「Data Sources」を選択
- 「Add data source」をクリック
- 「Prometheus」を選択
- URL に
http://prometheus:9090を入力 - 「Save & Test」をクリックして接続確認
データソースの設定は以下の JSON で自動プロビジョニングも可能です。
json{
"name": "Prometheus",
"type": "prometheus",
"access": "proxy",
"url": "http://prometheus:9090",
"isDefault": true,
"jsonData": {
"timeInterval": "15s"
}
}
ダッシュボードパネルの作成
次に、重要なメトリクスを表示するパネルを作成していきます。 以下は、メモリ使用量を表示するパネルの設定例です。
メモリ使用量パネル:
- タイトル:Redis メモリ使用量
- パネルタイプ:Time series(時系列グラフ)
- クエリ:
redis_memory_used_bytes - 単位:Bytes (IEC)
PromQL クエリの例を見てみましょう。
promql# 使用メモリ量(バイト)
redis_memory_used_bytes{instance="redis-master"}
# メモリ使用率(パーセント)
(redis_memory_used_bytes / redis_memory_max_bytes) * 100
# メモリ使用量の推移(5 分平均)
avg_over_time(redis_memory_used_bytes[5m])
クエリの活用ポイント:
- 絶対値と使用率を組み合わせて表示すると傾向が把握しやすい
avg_over_timeで平均値を取ることでノイズを軽減
続いて、コマンド実行数を表示するパネルを作成します。
promql# 1 秒あたりのコマンド実行数
rate(redis_commands_processed_total[1m])
# コマンドタイプごとの実行数
sum by (cmd) (rate(redis_commands_duration_seconds_count[5m]))
# 上位 10 コマンドの実行数
topk(10, sum by (cmd) (rate(redis_commands_duration_seconds_count[5m])))
コマンド監視のポイント:
rate()関数で秒間実行数を算出sum by (cmd)でコマンドタイプごとに集計topk()で負荷の高いコマンドを特定
接続数とヒット率のパネルも追加しましょう。
promql# 接続クライアント数
redis_connected_clients
# キャッシュヒット率
rate(redis_keyspace_hits_total[5m]) / (
rate(redis_keyspace_hits_total[5m]) +
rate(redis_keyspace_misses_total[5m])
) * 100
# ブロックされたクライアント数
redis_blocked_clients
パフォーマンス指標:
- 接続数が急増していないか監視
- ヒット率が低い場合はキャッシュ戦略の見直しが必要
- ブロックされたクライアントは処理待ちの指標
完成版ダッシュボード JSON
以下は、主要なメトリクスを含む完成版ダッシュボードの JSON です。
grafana/dashboards/redis-dashboard.json として保存しましょう。
json{
"dashboard": {
"title": "Redis 監視ダッシュボード",
"tags": ["redis", "monitoring"],
"timezone": "browser",
"refresh": "30s",
"panels": [
{
"id": 1,
"title": "メモリ使用量",
"type": "timeseries",
"gridPos": { "x": 0, "y": 0, "w": 12, "h": 8 },
"targets": [
{
"expr": "redis_memory_used_bytes",
"legendFormat": "使用量"
},
{
"expr": "redis_memory_max_bytes",
"legendFormat": "上限"
}
],
"fieldConfig": {
"defaults": {
"unit": "bytes"
}
}
}
]
}
}
このダッシュボード定義には、メモリ使用量パネルが含まれています。
さらにコマンド実行数のパネルも追加しましょう。
json{
"id": 2,
"title": "コマンド実行数(秒間)",
"type": "timeseries",
"gridPos": { "x": 12, "y": 0, "w": 12, "h": 8 },
"targets": [
{
"expr": "rate(redis_commands_processed_total[1m])",
"legendFormat": "コマンド/秒"
}
],
"fieldConfig": {
"defaults": {
"unit": "ops"
}
}
}
キャッシュヒット率を表示するゲージパネルも作成します。
json{
"id": 3,
"title": "キャッシュヒット率",
"type": "gauge",
"gridPos": { "x": 0, "y": 8, "w": 6, "h": 6 },
"targets": [
{
"expr": "rate(redis_keyspace_hits_total[5m]) / (rate(redis_keyspace_hits_total[5m]) + rate(redis_keyspace_misses_total[5m])) * 100"
}
],
"fieldConfig": {
"defaults": {
"unit": "percent",
"thresholds": {
"steps": [
{ "value": 0, "color": "red" },
{ "value": 80, "color": "yellow" },
{ "value": 95, "color": "green" }
]
}
}
}
}
ゲージパネルの特徴:
- しきい値に応じて色が変化(95% 以上で緑、80% 以上で黄色、それ以下で赤)
- 一目でパフォーマンス状態を把握できる
実際の運用手順
それでは、構築した監視システムを実際に起動して運用してみましょう。
システムの起動
プロジェクトディレクトリで以下のコマンドを実行します。
bash# すべてのサービスを起動
yarn docker-compose up -d
# ログを確認
yarn docker-compose logs -f
起動確認のポイント:
- すべてのコンテナが正常に起動したか確認
- エラーログがないかチェック
- 各サービスの起動順序が正しいか確認
起動後、各サービスにアクセスできることを確認しましょう。
bash# Redis の接続確認
docker exec -it redis-server redis-cli ping
# Exporter のメトリクス確認
curl http://localhost:9121/metrics
# Prometheus の起動確認
curl http://localhost:9090/-/healthy
アクセス URL:
| # | サービス | URL | 説明 |
|---|---|---|---|
| 1 | Redis Exporter | http://localhost:9121/metrics | メトリクス一覧 |
| 2 | Prometheus | http://localhost:9090 | クエリ実行と設定 |
| 3 | Grafana | http://localhost:3000 | ダッシュボード |
メトリクスの確認
Prometheus の Web UI で収集されているメトリクスを確認してみましょう。
http://localhost:9090 にアクセスし、「Graph」タブでクエリを実行します。
promql# Redis が稼働しているか確認
up{job="redis"}
# 収集されているメトリクスの一覧
{job="redis"}
確認すべきポイント:
upメトリクスが1になっているか(0 は接続失敗)- メトリクスが定期的に更新されているか
- ラベルが正しく付与されているか
ダッシュボードのカスタマイズ
Grafana でダッシュボードを開き、必要に応じてパネルを追加・編集します。 以下は、よく使われるカスタマイズ例です。
追加推奨パネル:
- キー数の推移:
redis_db_keysでデータベース内のキー数を監視 - 有効期限付きキー数:
redis_db_keys_expiringで期限管理されているキー数 - ネットワーク I/O:
rate(redis_net_input_bytes_total[5m])で受信データ量 - レプリケーション遅延:
redis_master_repl_offset - redis_slave_repl_offsetでマスターとレプリカの差分
以下のクエリでレプリケーション遅延を監視できます。
promql# レプリケーション遅延(バイト数)
redis_master_repl_offset{instance="redis-master"} -
on(instance) group_right
redis_slave_repl_offset{instance="redis-replica-1"}
# レプリケーション遅延時間(秒)
redis_replication_lag_seconds
レプリケーション監視の重要性:
- 遅延が大きい場合、レプリカのデータが古い可能性がある
- フェイルオーバー時にデータロスのリスクになります
トラブルシューティング
運用中に発生しやすい問題とその対処法を紹介します。
メトリクスが収集されない場合
Exporter から Prometheus へのメトリクス転送が失敗している可能性があります。 以下の手順で確認しましょう。
bash# Exporter が正常に動作しているか確認
docker logs redis-exporter
# Exporter のヘルスチェック
curl http://localhost:9121/health
# Redis への接続確認
docker exec redis-exporter redis-cli -h redis ping
チェックポイント:
| # | 確認項目 | 対処法 |
|---|---|---|
| 1 | Exporter のログにエラーがある | 環境変数や接続情報を確認 |
| 2 | Redis に接続できない | ネットワーク設定やパスワードを確認 |
| 3 | Prometheus の設定ミス | prometheus.yml の targets を確認 |
| 4 | ファイアウォールでブロック | ポート 9121 が開いているか確認 |
ダッシュボードにデータが表示されない場合
Grafana とデータソースの接続、またはクエリに問題がある可能性があります。
promql# データソースの接続確認
# Grafana で以下のクエリを実行
up
# Redis メトリクスの存在確認
redis_up
確認手順:
- データソース設定で「Save & Test」が成功するか確認
- Prometheus UI で同じクエリが結果を返すか確認
- 時間範囲が適切か確認(過去のデータを見ようとしていないか)
- パネルのクエリ構文にエラーがないか確認
Prometheus のクエリエラーは以下のように確認できます。
bash# Prometheus のログを確認
docker logs prometheus
# クエリの構文チェック
# Prometheus UI の「Graph」タブでクエリを実行し、エラーメッセージを確認
メモリ使用量の急増対応
アラートでメモリ使用量の急増が通知された場合の対処手順です。
bash# Redis の詳細情報を確認
docker exec -it redis-server redis-cli INFO memory
# 大きなキーを特定
docker exec -it redis-server redis-cli --bigkeys
# メモリ使用量の多いキーをサンプリング
docker exec -it redis-server redis-cli --memkeys
対処方法:
- 不要なキーの削除:期限切れキーや不要データを削除
- メモリ上限の調整:
maxmemoryパラメータを増やす - 削除ポリシーの見直し:
maxmemory-policyを適切に設定 - データ構造の最適化:より効率的なデータ型に変更
以下のコマンドでメモリポリシーを変更できます。
bash# メモリ上限を 512MB に変更
docker exec -it redis-server redis-cli CONFIG SET maxmemory 512mb
# 削除ポリシーを volatile-lru に変更
docker exec -it redis-server redis-cli CONFIG SET maxmemory-policy volatile-lru
パフォーマンスチューニング
監視データを基に、Redis のパフォーマンスを最適化する方法を紹介します。
メトリクスに基づく最適化判断
収集したメトリクスから、以下のような最適化判断ができますね。
| # | メトリクス | しきい値 | 最適化アクション |
|---|---|---|---|
| 1 | キャッシュヒット率 | < 80% | キャッシュ戦略の見直し、TTL の調整 |
| 2 | メモリ使用率 | > 80% | メモリ増量、データ削減、シャーディング |
| 3 | コマンド実行時間 | > 10ms | インデックス追加、クエリ最適化 |
| 4 | 接続数 | > 80% of max | コネクションプール調整、接続制限緩和 |
| 5 | レプリケーション遅延 | > 10 秒 | ネットワーク改善、レプリカ追加 |
以下のクエリで具体的な最適化ポイントを特定できます。
promql# 実行時間の長いコマンド上位 5 つ
topk(5,
rate(redis_commands_duration_seconds_sum[5m]) /
rate(redis_commands_duration_seconds_count[5m])
)
# 最も頻繁に実行されるコマンド上位 10
topk(10, sum by (cmd) (rate(redis_commands_duration_seconds_count[5m])))
分析のポイント:
- 遅いコマンドは構造の見直しが必要
- 頻繁なコマンドはキャッシュ戦略の最適化対象
- 両方に該当するコマンドは最優先で対応
継続的な改善サイクル
監視システムを活用した継続的改善のサイクルを確立しましょう。
mermaidflowchart LR
monitor["メトリクス<br/>監視"]
analyze["データ<br/>分析"]
identify["ボトルネック<br/>特定"]
optimize["最適化<br/>実施"]
measure["効果<br/>測定"]
monitor --> analyze
analyze --> identify
identify --> optimize
optimize --> measure
measure --> monitor
改善サイクルの実践:
- 週次レビュー:ダッシュボードで過去 1 週間のトレンドを確認
- 月次分析:長期的なパフォーマンス傾向を分析
- アラート履歴の確認:繰り返し発生するアラートのパターン分析
- キャパシティプランニング:メトリクスに基づく将来予測
まとめ
本記事では、Redis の監視と可観測性を実現するため、Prometheus Exporter と Grafana を使った実践的な監視システムの構築方法を解説しました。
重要なポイント:
- Docker Compose で統合管理:Redis、Exporter、Prometheus、Grafana を一括セットアップできます
- 自動メトリクス収集:15 秒間隔で継続的にパフォーマンスデータを収集
- リアルタイム可視化:Grafana ダッシュボードで直感的に状態を把握できるでしょう
- プロアクティブなアラート:問題発生前にしきい値ベースで通知を受け取れます
- 長期トレンド分析:30 日分のデータ保持で傾向分析が可能
実装した監視システムにより、以下のメリットが得られます。
| # | メリット | 効果 |
|---|---|---|
| 1 | 早期問題検知 | ダウンタイムの最小化 |
| 2 | パフォーマンス最適化 | リソース効率の向上 |
| 3 | 根本原因分析 | 障害対応時間の短縮 |
| 4 | キャパシティプランニング | 適切なリソース計画 |
| 5 | SLA 遵守の証明 | サービス品質の保証 |
監視システムは構築して終わりではなく、継続的に改善していくことが重要ですね。 メトリクスを定期的にレビューし、アラートルールを調整し、ダッシュボードを進化させることで、より効果的な運用が実現できるでしょう。
今回紹介した構成をベースに、皆さんの環境に合わせてカスタマイズしてみてください。
関連リンク
articleRedis 監視と可観測性:Prometheus Exporter と Grafana の実践ダッシュボード
articleRedis 使い方:Next.js で Cache-Tag と再検証を実装(Edge/Node 両対応)
articleRedis キャッシュ設計大全:Cache-Aside/Write-Through/Write-Behind の実装指針
articleRedis コマンド 100 本ノック:Key/Hash/List/Set/ZSet/Stream 早見表
articleRedis セットアップ完全版(macOS/Homebrew):設定テンプレ付き最短構築
articleRedis vs Memcached 徹底比較:スループット・メモリ効率・機能差の実測
articleNotebookLM 情報設計のベストプラクティス:ソース粒度・タグ・命名規則
articleRedis 監視と可観測性:Prometheus Exporter と Grafana の実践ダッシュボード
articleNode.js で ESM の `ERR_MODULE_NOT_FOUND` を解く:解決策総当たりチェックリスト
articleReact 開発環境の作り方:Vite + TypeScript + ESLint + Prettier 完全セットアップ
articlePython エコシステム地図 2025:データ・Web・ML・自動化の最短ルート
articleNext.js でドキュメントポータル:MDX/全文検索/バージョン切替の設計例
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来