Dockerで作る開発環境:redis-exporterの導入

スポンサーリンク
Dockerで作る開発環境:Redis-exporterの導入 ノウハウ
Dockerで作る開発環境:Redis-exporterの導入
この記事は約8分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、dockerで構築した開発環境において、redis-exporterを導入した手順をご紹介します。

スポンサーリンク

実行環境

この記事は、特定の開発環境を前提として書かれています。もし興味がある場合は、その開発環境を構築するための説明が書かれている記事を参考にしてください。該当記事は下記になります。

ただ、この記事で紹介している修正内容がたくさんあるので、その修正を反映した最新版のプログラムをダウンロードして、参照することをおすすめします。該当のプログラムの詳細については、下記のページで確認できます。

背景

Redis Exporterは、Prometheus用のRedisデータ収集エージェントであり、Redisからメトリクスを収集し、Prometheusがこれらのメトリクスをスクレイプできる形式に変換します。Redis Exporterを使用することで、Redisインスタンスのパフォーマンスを監視することができます。

Redis Exporterが収集するメトリクスには、以下のようなものがあります。

  • Redisのバージョン情報
  • キーの数、データベースの数、接続数などのRedisインスタンスの状態情報
  • CPU使用率、メモリ使用量、I/O操作などのRedisインスタンスのパフォーマンス情報

これらのメトリクスを収集することにより、Redisインスタンスの動作状況を把握し、問題を特定することができます。また、Redis ExporterをPrometheusと組み合わせることで、Redisインスタンスのパフォーマンス情報を可視化し、長期的なトレンドを把握することができます。

ディレクトリ構造

ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新、削除になります。

.
├── LICENSE
├── Makefile
├── README.md
└── app
    ├── apache-exporter
    ├── compose.yml
    ├── flyway
    ├── grafana
    │   ├── dashboard.yml
    │   └── dashboards
    │          └── redis.json
    ├── influxdb
    ├── k6
    ├── memcached
    ├── memcached-exporter
    ├── nginx
    ├── nginx-exporter
    ├── php-fpm
    ├── php-fpm-exporter
    ├── mongo
    ├── mysql
    ├── mysqld-exporter
    ├── prometheus
    │   └── prometheus.yml
    ├── redis
    ├── redis-exporter
    │   └── Dockerfile
    ├── schemaspy
    ├── web
    └── xhgui

compose.yml

下記の内容をファイル(compose.yml) 257-267 行目に追加します。

  redis-exporter:
    build: ./redis-exporter
    container_name: redis-exporter
    restart: unless-stopped
    environment:
      - REDIS_ADDR=redis:6379
    ports:
      - 9121:9121
    networks:
      - net

redis-exporter/Dockerfile

下記の内容でファイル(redis-exporter/Dockerfile) を更新します。

FROM bitnami/redis-exporter:latest

prometheus/prometheus.yml

下記の赤字内容でファイル(prometheus/prometheus.yml) を更新します。

global:
  scrape_interval: 5s
scrape_configs:
  - job_name: 'docker-for-mac'
    static_configs:
      - targets: ['docker.for.mac.host.internal:9323']
  - job_name: 'apache'
    static_configs:
      - targets: ['apache-exporter:9117']
  - job_name: 'nginx'
    static_configs:
      - targets: ['nginx-exporter:9113']
  - job_name: 'php-fpm'
    static_configs:
      - targets: ['php-fpm-exporter:9253']
  - job_name: 'redis'
    static_configs:
      - targets: ['redis-exporter:9121']
  - job_name: 'memcached'
    static_configs:
      - targets: ['memcached-exporter:9150']
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld-exporter:9104']

grafana/dashboard.yml

下記の赤字内容をファイル(grafana/dashboard.yml) 48-58行目に追記します。

  - name: 'redis'
    orgId: 1
    folder: 'Service'
    type: file
    disableDeletion: false
    updateIntervalSeconds: 10
    allowUiUpdates: false
    options:
      path: /var/lib/grafana/dashboards/redis.json
      foldersFromFilesStructure: false

grafana/dashboards/redis.json

jsonファイルは行数が多いので、ここでの掲載は割愛します。

作成方法は、grafanaのdashboardで763をインポートして、JSON出力したものになります。詳細は、GitHUBのコードをご参照ください。

動作確認

下記のコマンドを実行して、サービスを起動します。

make setup

ブラウザで「http://localhost:3000/dashboards」にアクセスして、redisのダッシュボードが表示されていて、ダッシュボードを開いたときに、メトリクス情報が取得できていれば、成功です。

解説

redis-exporterについて

Redis Exporterは、Redisサーバーから収集できる多数のメトリクスを提供しています。以下は、Redis Exporterが取得できる主な情報の例です。

  • Memory Usage: Redisサーバーのメモリ使用量を示す情報を提供します。例えば、使用中のメモリ、使用可能なメモリ、最大メモリ、フラグメント化率などの情報を提供します。
  • Commands Processed: Redisサーバーで実行されたコマンドの数を示します。例えば、GET、SET、DEL、INCR、HGETALLなどのRedisコマンドに関する情報を提供します。
  • Connected Clients: Redisサーバーに接続しているクライアントの数を示します。また、クライアントがRedisサーバーに接続する方法(TCP、Unixソケットなど)や、クライアントが実行したコマンドの数などの情報も提供します。
  • Key Statistics: Redisサーバーで使用されるキーの種類や数を示します。例えば、データベース内のキーの数、最近アクセスされたキーの情報、または最も頻繁にアクセスされたキーの情報を提供することができます。
  • Replication: Redisサーバーのレプリケーションに関する情報を提供します。例えば、レプリケーションが有効かどうか、レプリケーションのマスターとスレーブノードの情報、同期中のキーの数、同期エラーの数などの情報を提供することができます。

以上の情報の他、Redis ExporterはRedisのslowlogに関する情報、Luaスクリプトに関する情報、およびRedisのCONFIGコマンドで取得できる情報なども提供することができます。これらの情報を使用して、Redisサーバーのパフォーマンスや使用状況に関する洞察を得ることができます。

おわりに

今日は、dockerで構築した開発環境にredis-exporterを導入し、grafanaでメトリクス情報を可視化しました。ぜひ、性能改善等に使用してみてください。

今回使用したファイルは下記のGitHubにタグ付けしています。

もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました