Sensuプラグインをインストール、設定して、監視/通知してみよう:Sensuで始めるクラウド時代のシステム監視(5)
新たなクラウド監視ツールとして注目され始めている「Sensu」の活用方法を解説する本連載。今回は、Sensuが監視や通知を行う際に使用するプラグインのインストールと設定方法、独自プラグインの開発方法を解説します。
Sensuプラグインを使って監視/通知する
前回は、「Sensu」本体とSensuのダッシュボードである「Uchiwa」のインストールと設定方法を説明しました。設定ファイルがJSON形式で簡素であること、「Ansible」などの構成管理ツールを利用することでミドルウェアの導入も含めた構築を自動化できるという点を理解いただけたと思います。
今回はSensuが監視や通知を行う際に使用するプラグインについて、そのインストールと設定方法、そして、簡単な独自プラグインの開発方法を説明します。
Sensuプラグインとは?
Sensuのプラグイン(Sensu Plugins)はコミュニティーの有志によって開発されており、「Sensu Plugins」で公開されています(画面1)。以前は「Sensu Community Plugins」と呼ばれていましたが、リニューアルされたようです。
CPUやメモリといった基本的な項目から、「Redis」や「Elasticsearch」といったミドルウェアまで、監視に必要なプラグインは一通りそろっているため、まずはここを見るとよいでしょう。
Sensuのv0.21以降では、「sensu-install」コマンドを使うことで簡単にプラグインをインストールすることができます。
例えば、「sensu-plugins-cpu-checks」をインストールする場合は、以下のsensu-installコマンドを実行します。
# sensu-plugins-cpu-checksをインストール $ sudo sensu-install -p cpu-checks # CPU使用率を監視するプラグインを手動で実行 $ /opt/sensu/embedded/bin/check-cpu.rb CheckCPU TOTAL OK: total=0.0 user=0.0 nice=0.0 system=0.0 idle=100.0 iowait=0.0 irq=0.0 softirq=0.0 steal=0.0 guest=0.0 guest_nice=0.0
内部では「Gem」(Rubyのライブラリマネージャ)を使っており、依存するライブラリもインストールされます。プラグインは、Sensu同梱のRubyのディレクトリ(/opt/sensu/embedded)に保存されます。
Sensuで利用可能な3種類のプラグイン
Sensuのプラグインには「Check」「Handler」「Mutator」の3種類があります。ここでは、それぞれの機能と設定をチュートリアル形式で説明していきます。前回までに構築したオールインワンのSensu環境で試しながら読み進めてください。
Check
「Check」は、実際に監視したり、メトリクスを測定したりするためのプラグインです。以下のような項目を監視したり、測定したりできます。
- CPUやメモリ、ディスクの使用率が閾値を越えていないか
- ミドルウェアのサービス(デーモン)は起動しているか
設定は「sensu-server」上で行い、プラグインは実行する各「sensu-client」にインストールします。ここでは、先ほどインストールした「check-cpu.rb」の設定例を紹介します。
最初に、sensu-serverで「/etc/sensu/conf.d/check-cpu.rb」を下記の内容で作成します。準備ができたら、設定を有効にするためにsensu-serverを再起動してください。
{ "checks": { "check-cpu": { // CPU使用率が80%以上でWARNING、90%以上でCRITICAL "command": "check-cpu.rb -w :::cpu.warning|80::: -c :::cpu.critical|90:::", // 60秒間隔で監視を実行 "interval": 60, // 10回の監視(10分)ごとに通知 "refresh": 10, // subscriptionsにallを含むsensu-clientを監視 "subscribers": ["all"], // 次章で設定するhandler-slackで通知 "handlers": ["slack"] } } }
次に、sensu-clientの設定ファイルを開き、「subscriptions」の配列に「all」を追加します。sensu-clientを再起動してしばらく待つと、監視結果をUchiwa上で確認できるようになります(画面2)。
また、sensu-clientごとにアラートを出す閾値を変更することもできます。sensu-clientの設定ファイル(/etc/sensu/conf.d/client.json)に下記のように「cpu」項目を追加して再起動します(プラグイン設定の「cpu.warning」や「cpu.critical」に対応しています)。
{ "client": { "subscriptions": ["all"], "cpu": { "warning": 70, "critical": 80 } } }
Handler
「Handler」は、監視結果をメールやチャットを介して通知するためのプラグインです。「PagerDuty」など、他のエスカレーションを行うサービスと連携させることも可能です。ここでは、Slackに通知する「sensu-plugins-slack」の設定を紹介します。
sensu-installコマンドでプラグインをインストールし、設定ファイルを作成します。Handlerはsensu-server上で実行されるため、sensu-client側での準備は不要です。
# sensu-plugins-slackをインストール $ sudo sensu-install -p slack
{ "handlers": { "slack": { "type": "pipe", "command": "handler-slack.rb" } }, "slack": { // https://my.slack.com/services/new/incoming-webhook/ でURLを作成 "webhook_url": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX", // https://github.com/sensu-pluginsのアイコンを使用 "icon_url": "https://avatars2.githubusercontent.com/u/10713628" } }
CPU使用率が閾値を越えると、10分ごとにSlackに通知されます(画面3)。通知文面はカスタマイズすることも可能です。詳細は「README」をご覧ください。
Mutator
「Mutator」は、Checkの監視結果をHandlerに渡す前に整形するためのプラグインです。あまり使う機会はないのですが、他のサービスと連携するときに必要な場合があるようです。
例えば、Sensuで取得したメトリクスを「Graphite」に保存できるように、sensu-client名に含まれる「.(ピリオド)」を「_(アンダースコア)」に置換するMutatorが提供されています。
【番外編】Filterの紹介
Sensuにはプラグインに近い機能として「Filter」があります。
Filterの条件に一致する場合は、Checkの実行結果(Event)がHandlerに渡されます。ここでは、よく使いそうなFilterを2つ紹介しましょう。
商用環境(production)のアラートだけ通知する
{ "filters": { "filter-production": { "attributes": { // ClientやCheckの属性でフィルタリング可能 "client": { "environment": "production" } } } } }
メンテナンス時間(金曜日20時台)はアラートを通知しない
{ "filters": { "filter-maintenance": { // 条件に一致しない場合にHandlerで処理 "negate": true, "attributes": { // evalでRubyのコードを使用可能、属性の値はvalueに格納 "check": { "executed": "eval: Time.at(value).wday == 5 && Time.at(value).hour == 20" } } } } }
Filterを追加したら、設定を有効にするためにsensu-serverを再起動してください。アラートを通知する条件は細かく設定することができるので、ぜひ活用してみてください。
独自のプラグインを作成してみよう
Sensu Pluginsには用意されていない、独自のサービスなどを監視したい場面もあると思います。そんなときは、独自のプラグインを簡単に開発することができます。
Sensuでは、プラグインの開発を補助する「sensu-plugin」というライブラリが提供されています。今回は例として、URLにアクセスし、意図したステータスコードが帰るかどうかを確認するプラグインを作ってみます。
#!/opt/sensu/embedded/bin/ruby require 'sensu-plugin/check/cli' require 'net/http' class CheckHttp < Sensu::Plugin::Check::CLI option :url, short: '-u URL', long: '--url URL' option :status, short: '-s CODE', long: '--status CODE' def run response = Net::HTTP.get_response(URI.parse(config[:url])) if response.code == config[:status] ok "#{config[:url]} #{response.code}" else critical "#{config[:url]} #{response.code}" end end end
「option」でコマンドラインオプションを定義し、「config」に格納されます。また、「/etc/sensu/conf.d」の設定ファイルも「settings」で読み込むことができます(「handler-slack.rb」の場合は、「settings[:slack][:webhook_url]」など)。
例えば、「http://www.atmarkit.co.jp」が200を返すことを確認する場合は、以下のようなコマンドになります。
$ /opt/sensu/embedded/bin/check-http.rb -u http://www.atmarkit.co.jp -s 200 CheckHttp OK: http://www.atmarkit.co.jp 200
CheckだけでなくHandlerも開発できるので、ぜひ独自プラグインを作成してみてください。
SensuのプラグインはRubyが一般的ですが、数が増えるとオーバーヘッドが大きくなりがちです。言語は限定されていないため、筆者は高速なGo言語でプラグインを開発していました。簡単なライブラリもありますので、興味のある方は使ってみてください。
- hico-horiuchi/sensu-plugins-go:Sensu plugins & libraries by Golang
- Sensuプラグイン開発用のGo言語パッケージを作った(Qiita)
終わりに
今回はSensuの3種類のプラグイン「Check」「Handler」「Mutator」のインストールと設定方法、sensu-pluginライブラリを使った独自プラグインの開発方法について説明しました。Sensu Pluginsには多くのプラグインが用意されており、ない場合も自分で簡単に開発することできます。
次回はSensuで取得したCPU使用率などのメトリクスを時系列データベースに格納し、可視化ツールを使ってグラフやダッシュボードを作る方法について説明します。
筆者紹介
堀内 晨彦(ほりうち あきひこ)
生まれも育ちも香川県。香川大学大学院 情報科出身。学生時代は研究の傍ら、勉強会やコミュニティー活動に積極的に参加し、「Sensu Deep Talks」などを主催。2016年4月からは上京し、ICT企業でベアメタルクラウドの開発に従事。趣味は料理とカメラ。
Webサイト:https://hico-horiuchi.github.io/
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- OSS運用監視ソフト 注目の10製品徹底比較 2016年版
運用監視をはじめ、多くの企業が取り入れているOSS(オープンソースソフトウェア)。目的に応じて最適なものを選択し、うまく使いこなせば強力な武器となるが、それができなければかえって手間や混乱の原因にもなりかねない。本連載では注目のOSSをピックアップして実際に検証し、基本的な優位性、劣位性を明確化した。ぜひOSSを選ぶ際の参考にしてほしい。 - 「複雑な混在環境を使いこなす」クラウド/OSS時代の運用管理、4つの視点
近年の「先が見えない」市場環境の中、ビジネス要請へのスピーディな対応が求められるシステム運用管理にも新しいアプローチが求められている。本特集『クラウド/OSS時代の「業務を止めない」運用ノウハウ』では、そのアプローチを一つ一つ掘り下げていく。 - 初めての運用管理者が知っておきたい監視・ジョブ管理向けOSS構成例4つの比較まとめ
システム運用の上で重要な「監視」と「ジョブ管理」について、効率的な実現方法を解説。