モチベーション

大規模インフラの監視ツールとしてSensuを導入したい,

記事概要

大規模なインフラの運用を安定化させるためにサーバの監視システムを選定している.監視システムは従来からZabbix,Nagios,Monitなど有名どころがありこれらは資料も,実績も十分にある.一方でこれらの監視ツールはサーバ台数が増加する度に多くの設定を投入する必要がある.これは,開発も運用もしている多忙なエンジニアからすると地味に辛い.そこで,クラウドのような多数のサーバからなるシステムを考慮して作られた,監視のフレームワークで最近注目されているSensuで監視システムを構築する.

なぜSensuを選んだか?

Sensuは急増するサーバ台数を考慮して設計されたフレームワークで,スケーラビリティが重要になってくるアーキテクチャに適している.また,以下の様な特徴を持っている.

  • エージェント型の監視ツールなので監視対象のサーバにSensu clientをインストールすると監視対象になる.(運用者が一々設定を入れる必要がない)
  • ややこしい設定ファイルの記述が要らない
  • ChefやPuppetとの連係が考慮されている(CMツールとの相性が良い)
  • ユーザビリティを考慮したWebUIがある
  • 便利なプラグインが沢山ある
  • APIが用意されているので独自拡張も容易

特に,先ほどから述べている通りエージェント型というメリットは大きく,運用も開発も行っている様な多忙なチームでサーバの追加時にChefのレシピを実行した瞬間からそのサーバが監視対象になるのは嬉しい.このように,自分に取って導入するに足るメリットがあり,従来のツールが使いにくいからという理由だけでSensuに興味を持っているわけではない.グダグタと長い説明になってしまった...それでは,Sensuのインストールを始めよう!

Sensuのインストール手順

この記事では,Chef client(knife solo)を使いSensuサーバの構築をする前提で話を進める.SensuはChefやPuppetなどのツールと組み合わせてインストールすることが公式に推奨されており,Chefのcookbook,Puppetのmanifestがそれぞれ用意されている.Chefを使ってインストールする場合はBerksfileにSensu(sensu-chef)を追加することで,include_recipeをしたrecipe内でSensuのLWRPが使用可能になる.

#Berksfile
source "https://supermarket.chef.io"

cookbook 'sensu', '~> 2.6.0'
cookbook 'uchiwa', '~> 1.0.0'

この時Uchiwaのcookbookも一緒にインストールする.一昔前はsensu-dashboardというWeb GUIを要するレシピも存在していたが,既に非推奨になっており,代替手段を各々探す必要がある.APIがあるのでDashboardを自作しても良いが今回はUchiwaをインストールする.

次にknife cookbook create sensu-wrapper -o site-cookbooksで自作のwrapper cookbookを作成する.上述の通り,sensu-chefをrecipe内でincludeすることでsensuに必要なミドルウェアや設定に関するLWRPが利用に可能になる.作成したcookbookのrecipeはこんな感じ.

include_recipe "sensu"
include_recipe "sensu::redis"
include_recipe "sensu::rabbitmq"

sensu_handler "default" do
  type "pipe"
  command "ls"
end

sensu_client node.name do
  address node.ipaddress
  subscriptions node.roles + ["all"]
end

include_recipe "sensu::api_service"
include_recipe "sensu::client_service"
include_recipe "sensu::server_service"

また,wrapperとなるrecipeのmetadata.rbdepends sensuを追記しないと,”Undefined method or attribute ‘sensu’ on ‘node’“とエラーが出てしまうので追記する.

name             'sensu-wrapper'
maintainer       'takanabe'
(略)

depends "sensu"

また,sensu-chefではRabbitMQとSSL証明書による通信を行うため以下の手順でssl.jsonを作成する.

$ git clone https://github.com/sensu/sensu-chef.git
$ cd examples/ssl/
$ ./ssl_certs.sh generate
$ mkdir -p ../../data_bags/sensu
$ cp ./ssl.json ../../data_bags/sensu
$ ./ssl_certs.sh clean

証明書の準備が完了したらいよいよ,インストールだ.

$ knife solo bootstrap vagrant@sensu-server

構築完了!

Uchiwaからアクセスしてみる

SensuとUchiwaのインストールが無事に完了したらブラウザからアクセスしてみる.デフォルトだとUchiwaのポート番号は3000.

sensu-top

無事にUchiwaの管理画面が表示された.Clientはまだ自分しかいないけど追加して行くとこの画面が賑やかになってくると思われる.

sensu-client-monitor

作成したプログラムはこちら インストール自体はとても簡単だった.プログラムも時間が有るときに確認しよう.

参考

Sensu API関連 

運用実績