T-CREATOR

Redis 監視と可観測性:Prometheus Exporter と Grafana の実践ダッシュボード

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

主な課題

  1. 手動確認の負担:CLI で都度コマンドを実行する必要があり、継続的な監視が困難です
  2. 履歴データの不足:過去のパフォーマンス傾向を分析できません
  3. アラート機能の欠如:問題発生時に自動通知ができないのです
  4. 複数インスタンスの管理: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 が一元的に収集します。

必要なコンポーネント

監視システムを構築するために、以下のコンポーネントを使用します。

#コンポーネントバージョン役割
1Redis7.x監視対象のデータベース
2Redis Exporter1.55.0メトリクスの収集と公開
3Prometheus2.48.0メトリクスの保存と管理
4Grafana10.2.0メトリクスの可視化
5Docker / 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 にアクセスし、以下の手順でデータソースを追加します。

手順

  1. 管理者アカウント(admin/admin)でログイン
  2. 左メニューから「Configuration」→「Data Sources」を選択
  3. 「Add data source」をクリック
  4. 「Prometheus」を選択
  5. URL に http:​/​​/​prometheus:9090 を入力
  6. 「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説明
1Redis Exporterhttp://localhost:9121/metricsメトリクス一覧
2Prometheushttp://localhost:9090クエリ実行と設定
3Grafanahttp://localhost:3000ダッシュボード

メトリクスの確認

Prometheus の Web UI で収集されているメトリクスを確認してみましょう。 http:​/​​/​localhost:9090 にアクセスし、「Graph」タブでクエリを実行します。

promql# Redis が稼働しているか確認
up{job="redis"}

# 収集されているメトリクスの一覧
{job="redis"}

確認すべきポイント

  • up メトリクスが 1 になっているか(0 は接続失敗)
  • メトリクスが定期的に更新されているか
  • ラベルが正しく付与されているか

ダッシュボードのカスタマイズ

Grafana でダッシュボードを開き、必要に応じてパネルを追加・編集します。 以下は、よく使われるカスタマイズ例です。

追加推奨パネル

  1. キー数の推移redis_db_keys でデータベース内のキー数を監視
  2. 有効期限付きキー数redis_db_keys_expiring で期限管理されているキー数
  3. ネットワーク I/Orate(redis_net_input_bytes_total[5m]) で受信データ量
  4. レプリケーション遅延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

チェックポイント

#確認項目対処法
1Exporter のログにエラーがある環境変数や接続情報を確認
2Redis に接続できないネットワーク設定やパスワードを確認
3Prometheus の設定ミスprometheus.yml の targets を確認
4ファイアウォールでブロックポート 9121 が開いているか確認

ダッシュボードにデータが表示されない場合

Grafana とデータソースの接続、またはクエリに問題がある可能性があります。

promql# データソースの接続確認
# Grafana で以下のクエリを実行
up

# Redis メトリクスの存在確認
redis_up

確認手順

  1. データソース設定で「Save & Test」が成功するか確認
  2. Prometheus UI で同じクエリが結果を返すか確認
  3. 時間範囲が適切か確認(過去のデータを見ようとしていないか)
  4. パネルのクエリ構文にエラーがないか確認

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

対処方法

  1. 不要なキーの削除:期限切れキーや不要データを削除
  2. メモリ上限の調整maxmemory パラメータを増やす
  3. 削除ポリシーの見直しmaxmemory-policy を適切に設定
  4. データ構造の最適化:より効率的なデータ型に変更

以下のコマンドでメモリポリシーを変更できます。

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. 週次レビュー:ダッシュボードで過去 1 週間のトレンドを確認
  2. 月次分析:長期的なパフォーマンス傾向を分析
  3. アラート履歴の確認:繰り返し発生するアラートのパターン分析
  4. キャパシティプランニング:メトリクスに基づく将来予測

まとめ

本記事では、Redis の監視と可観測性を実現するため、Prometheus Exporter と Grafana を使った実践的な監視システムの構築方法を解説しました。

重要なポイント

  • Docker Compose で統合管理:Redis、Exporter、Prometheus、Grafana を一括セットアップできます
  • 自動メトリクス収集:15 秒間隔で継続的にパフォーマンスデータを収集
  • リアルタイム可視化:Grafana ダッシュボードで直感的に状態を把握できるでしょう
  • プロアクティブなアラート:問題発生前にしきい値ベースで通知を受け取れます
  • 長期トレンド分析:30 日分のデータ保持で傾向分析が可能

実装した監視システムにより、以下のメリットが得られます。

#メリット効果
1早期問題検知ダウンタイムの最小化
2パフォーマンス最適化リソース効率の向上
3根本原因分析障害対応時間の短縮
4キャパシティプランニング適切なリソース計画
5SLA 遵守の証明サービス品質の保証

監視システムは構築して終わりではなく、継続的に改善していくことが重要ですね。 メトリクスを定期的にレビューし、アラートルールを調整し、ダッシュボードを進化させることで、より効果的な運用が実現できるでしょう。

今回紹介した構成をベースに、皆さんの環境に合わせてカスタマイズしてみてください。

関連リンク