こんにちは。よっしーです(^^)
今日は、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にタグ付けしています。
もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。
また明日お会いしましょう!
コメント