右往左往ブログ

日々よりみち

zabbixで運用していた人間がsensuを触ってみた感想

zabbixでシステム運用に関わっている人間が、sensuを使った運用にチャレンジした話です。
結論としては、運用に本格的に入る前に、sensuの導入を断念しました。

f:id:unchemist:20140518200938p:plain:medium

sensuとは

f:id:unchemist:20140518200929j:plain

sensuは、クラウド環境に親和性の高い監視・モニタリングソフトウェアです。
http://sensuapp.org/

大まかなポイントは以下だと思います。

  • Chefやpuppetで簡単に導入できる
  • community pluginが豊富
  • 設定が全てコードで記載されている。変更するときもjsonファイルの書き換え
  • クライアント側からサーバへ通知して監視が始まる(サーバ側にクライアントの定義が必要ない) → AWS EC2のようなImmutableに扱う環境で便利

詳細は以下の記事が詳しいです。
【DevOpsDays Tokyo 2013】クラウド時代のモニタリングツール、UNIXの思想が息づくsensuチュートリアル
監視ソフトをNagiosからSensuに切り替えて2ヶ月経ったのでまとめた

使ってみた状況

  • オンプレミス環境でzabbixを使い、数ヶ月の運用を行っていた
  • AWS環境を利用するにあたって、sensuの導入を検討した
  • 監視+モニタリングが要件 なので、必然的にgraphiteも導入した
  • AWS環境ではBlue Green Deploymentを導入。従って頻繁にEC2インスタンスを作り替える

感想

sensu(とgraphite)が物凄く使いづらい印象を受けました。以下、sensuを使ってみた感想です。

導入が容易じゃない

確かに、基本インストールは簡単です。chef-soloで導入しましたが、erlangのインストールトラブルはあったものの、割とすんなり入れることができます。
ただ、簡単なのはあくまで基本インストールのみで、実際に使うためにはほとんどの場合は以下を行うことになります。

  • community pluginの導入
  • subscribers (クライアントを役割別に分けるグループ名) の設定
  • モニタリング用にgraphiteの導入

特に面倒なのが後半2つです。

subscribersの設定は、クライアントごとにどうやって名前を定義するか?それをいかに自動的に設定するか?のベストプラクティスがまだ確立されていない気がします。そのため、色々な方法はあるものの、ある程度アーキテクチャを自分で考えて作りこむ必要があります。なおchef-serverで導入する場合は、role名が自動で割り当たるらしいので、それほど大変ではないみたいですが…。

graphiteはそもそもsensuではないので、自動的にはインストールされません。なので、chefに組み込むところから始まります。後述しますが、必要となるソフトウェアも多く、Djangoに馴染みがないならなおさら大変です。

メンテナンスが容易じゃない

sensuを導入すると、(自動でインストールされるとはいえ)以下の面倒を見る必要が生じます。

  • sensu本体
  • rabbitmq
  • redis

ということは、障害発生時は上記をチェックする必要があるということです。 そして、sensu-adminを導入すると、更に…

が増えます。
graphiteも導入すると、更に増えます。

sensuはRuby、sensu-adminはRuby on Rails、graphiteはpython (Django)というのもちぐはぐで、なんだかなぁという感じ。

ちなみにzabbixなら

  • zabbix本体 (zabbix-server, zabbix-agent)
  • データベース

で済みます。面倒を見なければならないソフトウェアは少ないほうがいいかと。

使用感もあんまり

sensuは監視ソフトウェア、graphiteはグラフ化のソフトウェアなので、監視とモニタリングでいちいち画面遷移しなければいけません。少なくとも素のsensu管理画面はかなり簡素なので、機能は必要最低限しかないように思います。シンプルという見方もできますが。

設定がjson形式だから見やすい、という見方もあるにはあるのですが、所詮ファイルなので、いろんな軸で見る、という多面的な見方はできません。

また、graphiteは完全なグラフ化ソフトウェアなので、"メトリクス取得のための"ソフトウェアではありません。そのため、いろんなサーバで横断的に見るとか複数のグラフを並べるとか、そんな気の利いたことはできません。これはsensuの問題ではありませんが。

ほとんどの機能はzabbixでもできる

もともとの触れ込みである"クライアント側からサーバへ通知して監視が開始"の仕組みも、zabbixではディスカバリ機能を使うことでほぼ同様のことができます。

sensuはapiを提供しているので独自の仕組みを作りやすい、という意見も、zabbixだってAPIを提供しています。

逆に、zabbixでできてsensuでできないことは多いです。sensu管理画面自体の認証とか、メンテナンス機能(一時的にアラートを抑止する機能)とか。後者はsensu-adminを導入すれば可能かもしれません。

community pluginが動かない…ものもある

1ヶ月くらい前に触ってみた当初は、elasticsearchのpluginが最新バージョンに対応していなかったり、別のプラグインで引数を用意しているくせに動かない(純粋なバグ)というものもありました。pull requestしろよっていう感じかもしれませんが…。幸いコード自体は簡単なので、修正することはできます。ただ、いちいちpluginくらいで信用しないことを前提にバグとか検証で時間を取っていられないし、動くことを前提としたかったなぁというのはあります。

ただ、zabbixだとユーザパラメータとか外部スクリプトとかでプラグイン相当の仕組みはあるにはあるのですが、communityとしてまとまっているわけではないので、その都度ネット上から探す(もしくは一から作る)必要があります。基本的なプロセス、ポート、リソース監視などだけで済むなら考える必要はありませんが、新しいソフトウェアがAPIを提供していて、API経由で新しいメトリクスを取得できるとすると、その仕組みに追従できるのはsensuの方が可能性があるかもしれません。

コードベースの変更管理

これは完全に志向の問題ですが、設定が全てjsonで記載されているということは、GUIからポチポチ設定を変更できないということです。変更履歴をコードベースで管理できるので、例えばgithubなんかで管理すると、いつ誰が設定を変更したかは分かりやすいと思います。
一方で、GUIでカジュアルに変更したいという志向のチームだと、かなり敷居が高いでしょう。設定を変更するだけで、その都度git pull → コード変更 → コミットしてpush → デプロイ となるので。変更履歴を取るか、カジュアルに設定変更できることを取るかはチームによると思います。

まとめ

最初に挙げた特徴の反対意見として、以下のように感じました。

  • Chefやpuppetで簡単に導入できる
    →ただし、簡単なのは基本インストールまでで、追加設定まで行うとそれなりに面倒
  • community pluginが豊富
    →community pluginでいろんなソフトウェアに対して簡単に監視が行えるし、今後もきっと追加されていくだろう
    ただし、バグが多い
  • 設定が全てコードで記載されている。変更するときもjsonファイルの書き換え
    →確かに1側面では見やすい。ただ、色々な軸で横断的に見るのには向いていない。
    設定変更履歴をgitなどで取ることができるのは便利
  • クライアント側からサーバへ通知して監視が始まる(サーバ側にクライアントの定義が必要ない)
    →確かにそうですがzabbixでもできる

さらに…

  • そもそもsensuを利用するために様々なソフトウェアを導入する必要があり、それらをメンテナンスする必要がある
  • 色々なソフトウェア、サービスと連携できるという触れ込みだが、例えばグラフ化はgraphiteという以外にそんなに選べるほど選択肢がある状況でもない

ちなみにリソースに関しては、長期間で運用したわけではないので評価できません。

sensuを利用するのに適した状況

なので、sensuを使いたいという場合は、以下になると思います。

  • sensu apiを利用して、一から手に馴染む監視サービスを作る覚悟がある
  • GUIで設定変更とか軟弱なことはしない、もしくは変更履歴をしっかり取ることが求められる
  • もともとrabbitmqやredis, graphiteなど関わりのあるソフトウェアを利用している
  • 今後も新しいソフトウェアをどんどん導入していく予定で、それを監視する予定

そう考えると、zabbixはやっぱり監視・モニタリング用によく考えられているのだなぁと思います。