ようへいの日々精進XP

よかろうもん

redis のリソースモニタするスクリプトを書いてみた

概要

  • redis のリソースをモニタするスクリプトを ruby の勉強を兼ねて書いてみた
  • 既にちゃんと perl実装されているので、業務等の現場で利用する場合にはそちらを利用しようと思う
  • 対象となる項目は下記のとおり

モニタする対象

モニタする対象は INFO コマンドで取得出来る値の中から以下を選択。

項目 メモ
connected_clients 接続中のクライアント数
used_memory 使用中のメモリ量
total_connections_received 接続された累積数
total_commands_processed 実行されたコマンドの累積数
mem_fragmentation_ratio メモリのフラグメント状況

上記を選択したネタ元はこちら

irb コマンドで確認する

まずは irb コマンドで INFO コマンドからどのような値が取れるのかを確認してみる。

f:id:inokara:20130804060314p:plain

スクリプト

github はこちら

未だにクラス、メソッドの使い方が半信半疑で自信無し。

使い方

必要な gem のインストール

sudo gem install terminal-table --no-ri --no-rdoc -V
sudo gem install redis --no-ri --no-rdoc -V
sudo gem install hiredis --no-ri --no-rdoc -V

次期バージョンを見据えてと思って、うっかり ncursesw とか parallel も入れておいた。

対象ホストリストの準備

まず、以下のようにモニタリングの対象となるホストとポート番号をカンマ区切りで記載する。

xxx.xxx.xxx.xxx,6379
xxx.xxx.xxx.xxx,6380

実行

上記でホストリスト作成したら、ホストリストを引数としてスクリプトを実行する。

./get-redis-info.rb config.txt

以下のような実行結果が出力される。

f:id:inokara:20130804053522p:plain

watch コマンドとの併用

少しでもリアルタイムにということで watch コマンドを併用することで、それらしいことが出来る(と思う)。

watch ./get-redis-info.rb config.tx

f:id:inokara:20130804053844p:plain

複数ホストに対して順次 redis.info を実行しているので厳密なリアルタイム性には掛けるかもしれないけどとりあえず雰囲気的にはイケそう。

次の目標

ということで、作って試してブログにしたあたりで色々と課題も見えてきたので、次のバージョンの目標みたいなものを書いてみる。

  • 取得出来るパラメータを選択可能、もしくは引数で指定することで任意のパラメータを監視出来るようする
  • ホストリストを yaml 形式で書けるようにする
  • parallel を利用して並列に redis.info を実行してリアルタイム性を追求する
  • watch コマンドとの併用ではなくコマンド単体で watch コマンドを使ったような表示を実現する