ようへいの日々精進XP

よかろうもん

sensu の Redis を ElasticCache for Redis に置き換えてみる

そもそも ElasticCache for Redis という呼び方が合っているのか解らないかわはらです。どうも。

はじめに

  • sensuAWS で運用しようとした場合に sensu が利用する各種ツールを AWS の各サービスで置き換えられないかと思ったので試す
  • まずは(というかこれしかないかw)RedisElasticCache for Redis に置き換えてみた
  • RedisElasticCache for Redis に置き換えることで sensu のコアコンポーネントsensu-serversensu-api)のスケールと切り分けてスケールアウトを計画出来るのが嬉しい...かもしれない

まず結論から

  • とりあえず動いてるけど...というレベル
  • redis-commander を使って GUI で見ることで sensu から Redis ってこんな使い方されてんだなーという収穫はあった

設定

ElasticCache for Redis のセットアップ

  1. VPC 内で ElasticCache を利用したいので Cache Subnet GroupsVPCSubnet 設定する
  2. Launch Cache Cluster Wizard を利用してノード(キャッシュインスタンス)作成を開始する
  3. ポイントは EngineRedis を選択することと 1. で作成した VPC サブネットを選択する
  4. Launch Cache Cluster をクリックしてインスタンスを起動する
  5. インスタンスが起動するまで暫し待つ

sensu 側の設定

sensu-serverRedis ホストの設定を ElasticCacheENDPOINT に置き換えるだけ。

--- config.json.original        2014-03-30 13:53:58.110841065 +0900
+++ config.json 2014-03-30 13:54:10.974513172 +0900
@@ -7,7 +7,7 @@
     "vhost": "/sensu"
   },
   "redis": {
-    "host": "localhost",
+    "host": "sensu-test.abcdefg.0001.use1.cache.amazonaws.com",
     "port": 6379
   },
   "api": {

修正したら sensu-serversensu-api を再起動する。ElasticCache for Redis にうまく接続出来ない場合には sensu-serversensu-api も起動しない。もし、起動しない場合には ElasticCache for Redis への接続を確認する。

せっかくなので redis-commander で可視化

Redis にもコマンドラインは用意されているが世の中には便利なツールもあるもので redis-commander という Node.js で実装された Web ベースのツールを使えば GUI から Redis 上のデータにアクセスことが出来る。

セットアップ

起動

以下のようなコマンドで実行する。

redis-commander --redis-host sensu-test.xxxxx.0001.use1.cache.amazonaws.com &

redis-commander はホストの 8081 ポートを利用するので SecurityGroup で事前にポートを開放する設定を行うのをお忘れなく...。

画面

ブラウザからアクセスすると以下のように表示される。

f:id:inokara:20140330141158p:plain

ほうほう、とりあえず sensu からアクセスは出来ている。


redis-commander で見る Redis の使われ方

とりあえず見えるようになったので Redissensu からどんな風に使われているかを見てみた。(各 key を見てみる)

client

以下のように監視対象が保存されている。

f:id:inokara:20140330144752p:plain

タイプは string となっている。

clients

以下のように監視対象のクライアントリストが保存されている。

f:id:inokara:20140330144804p:plain

タイプは set となっている。

exection

おそらくチェックを行った時間をタイムスタンプで記録されている。

f:id:inokara:20140330144814p:plain

タイプは string となっている。

history

チェックの結果が 0 / 1 / 2 のそれぞれのフラグで記録される。

f:id:inokara:20140330144830p:plain

タイプは list となっている。

lock

何に使ってるんだろう...lock:master ってなんや?

f:id:inokara:20140330144841p:plain

ソースコードの中から lock:master を追っていくと setup_master_monitorrequest_master_election というメソッドに辿りついた。さらに setup_master_monitor を追うと bootstrap というメソッドから呼ばれていることが解る。どうやら sensu-server が起動する際にセットするフラグのようだ。

また lock:master がセットされるとインスタンス変数の @is_master が真となりその後の処理の条件分岐で利用されている。

タイプは無難な string となっている。

stash

stash は特殊はキーで sensu-dashboardClientCheck に対して Silence 等の設定を行った場合にのみ生成される。

以下のように sc02 に対して Silence を設定した場合に...

f:id:inokara:20140330144853p:plain

以下のように stashValue がセットされる。

f:id:inokara:20140330154346p:plain

タイプは string となっている。

stashes

stashesstashe の一覧。

f:id:inokara:20140330154358p:plain

タイプは set となっている。


まとまってないまとめ

  • sensuRedisElasticCache for Redis に置き換えることは出来そう
  • 但し、複数の sensu-server からつないだ場合にはどうなるのかは引き続き調査