序章

Sensuは、RubbitMQをメッセージブローカーとして使用し、Redisをデータの保存に使用するRubyで記述された監視ツールです。 クラウド環境の監視に最適です。

Sensuは、「チェック」スクリプトからの出力を「ハンドラー」スクリプトに接続して、堅牢な監視およびアラートシステムを作成します。 チェックスクリプトは多くのノードで実行でき、Apacheが実行されているなどの特定の条件が満たされているかどうかを報告します。 ハンドラースクリプトは、アラートメールの送信などのアクションを実行できます。

「チェック」スクリプトと「ハンドラー」スクリプトはどちらもSensuマスターサーバー上で実行されます。Sensuマスターサーバーは、Sensuクライアントサーバー間のチェック実行の調整とチェック結果の処理を担当します。 チェックがイベントをトリガーすると、ハンドラーに渡され、ハンドラーは指定されたアクションを実行します。

この例は、ApacheWebサーバーのステータスを監視するチェックです。 チェックはSensuクライアントで実行されます。 チェックでサーバーがダウンしていると報告された場合、Sensuサーバーはイベントをハンドラーに渡します。これにより、電子メールの送信やダウンタイムメトリックの収集などのアクションがトリガーされる可能性があります。

このチュートリアルでは、1台のSensuマスターサーバーと1台のSensuクライアントサーバーをインストールして構成します。

前提条件

Sensuを設定するには、次のものが必要です。

  • Ubuntu14.04を実行している1つのマスターノードドロップレット。 これは、すべての監視データを表示するために使用するノードです。
  • Ubuntu 14.04 を実行している、監視する少なくとも1つの追加ノード。

各ドロップレットにsudoユーザーを作成します。 まず、 adduser コマンドを使用してユーザーを作成し、ユーザー名を使用する名前に置き換えます。

adduser username

これにより、ユーザーと適切なホームディレクトリおよびグループが作成されます。 新しいユーザーのパスワードを設定し、パスワードを確認するように求められます。 また、ユーザーの情報を入力するように求められます。 ユーザー情報を確認してユーザーを作成します。

次に、visudoコマンドを使用してユーザーにsudo権限を付与します。

visudo

これにより、 / etc /sudoersファイルが開きます。 User privilege specificationセクションで、作成したユーザーに別の行を追加して、次のようにします( username の代わりに選択したユーザー名を使用):

# User privilege specification
root ALL=(ALL:ALL) ALL
username ALL=(ALL:ALL) ALL

ファイルを保存して、新しいユーザーに切り替えます。

su - username

システムパッケージを更新してアップグレードします。

sudo apt-get update && sudo apt-get -y upgrade

ステップ1—マスターへのインストール

まず、Sensuマスターサーバーをセットアップします。 これには、RabbitMQ、Redis、Sensu自体、およびUchiwaダッシュボードと、いくつかのサポートソフトウェアが必要です。

RabbitMQソースをAPTソースリストに追加します。

echo "deb http://www.rabbitmq.com/debian/ testing main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list

RabbitMQの署名キーをダウンロードして追加します。

curl -L -o ~/rabbitmq-signing-key-public.asc http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
 
sudo apt-key add ~/rabbitmq-signing-key-public.asc

RabbitMQとErlangをインストールします。

sudo apt-get update && sudo apt-get install -y rabbitmq-server erlang-nox

RabbitMQサービスが自動的に開始されます。 そうでない場合は、次のコマンドで起動します。

sudo service rabbitmq-server start

Sensuは、コンポーネントとRabbitMQ間の安全な通信にSSLを使用しています。 SSLなしでSensuを使用することは可能ですが、強くお勧めしません。 証明書を生成するには、Sensuの証明書ジェネレーターを / tmp ディレクトリにダウンロードし、SSL証明書を生成します。

cd /tmp && wget http://sensuapp.org/docs/0.13/tools/ssl_certs.tar && tar -xvf ssl_certs.tar
 
cd ssl_certs && ./ssl_certs.sh generate

RabbitMQ SSLディレクトリを作成し、証明書をコピーします。

sudo mkdir -p /etc/rabbitmq/ssl && sudo cp /tmp/ssl_certs/sensu_ca/cacert.pem /tmp/ssl_certs/server/cert.pem /tmp/ssl_certs/server/key.pem /etc/rabbitmq/ssl

/etc/rabbitmq/rabbitmq.configファイルを作成して編集します。

sudo vi /etc/rabbitmq/rabbitmq.config

次の行をファイルに追加します。 これにより、ポート5671でリッスンし、生成された認証局とサーバー証明書を使用するようにRabbitMQSSLリスナーが構成されます。 また、接続を確認し、証明書がない場合は失敗します。

[
    {rabbit, [
    {ssl_listeners, [5671]},
    {ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
                   {certfile,"/etc/rabbitmq/ssl/cert.pem"},
                   {keyfile,"/etc/rabbitmq/ssl/key.pem"},
                   {verify,verify_peer},
                   {fail_if_no_peer_cert,true}]}
  ]}
].

RabbitMQを再起動します。

sudo service rabbitmq-server restart

SensuのRabbitMQ仮想ホストとユーザーを作成します。 パスワードを変更します( pass )。 このパスワードは、後でSensuサーバーと監視対象のクライアントを構成するときに必要になります。

sudo rabbitmqctl add_vhost /sensu
sudo rabbitmqctl add_user sensu pass
sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"

Redisをインストールします。

sudo apt-get -y install redis-server

Redisサービスが自動的に開始されます。 そうでない場合は、次のコマンドで起動します。 (Redisがすでに実行されている場合は、「Redis-serverの開始:失敗しました」というエラーが表示されることに注意してください。)

sudo service redis-server start

ソースとキーを追加してSensuをインストールします。

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
 
echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

SensuとUchiwaをインストールします(Uchiwaは監視ダッシュボードです)。

sudo apt-get update && sudo apt-get install -y sensu uchiwa

SensuはRabbitMQへの安全な接続情報を必要としています。 SensuのSSLディレクトリを作成し、生成された証明書をコピーします。

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem /etc/sensu/ssl

これで、Sensuモニタリングのすべてのコンポーネントがインストールされました。

ステップ2—マスターでの構成

次に、Sensuを構成する必要があります。 読みやすさと管理を容易にするために、/etc/sensu/conf.dフォルダーに個別の構成ファイルを作成します。 構成ファイルに記載されているサービスとコンポーネントを別々のマシンで構成していない限り、以下に示すほとんどのサンプル値は変更しないでおくことができます。 または、/ etc / sensu / config.json.example <^>は、Sensuを構成するためにコピーして使用できる別の構成ファイルの例です。

rabitmq.jsonファイルを作成して編集します。

sudo vi /etc/sensu/conf.d/rabbitmq.json

次の行を追加します。これにより、RedisはSSL証明書を使用してRabbitMQインスタンスに安全に接続できるようになります。 userpassは、RabbitMQ仮想ホストに設定するものである必要があります。

{
  "rabbitmq": {
    "ssl": {
      "cert_chain_file": "/etc/sensu/ssl/cert.pem",
      "private_key_file": "/etc/sensu/ssl/key.pem"
    },
    "host": "localhost",
    "port": 5671,
    "vhost": "/sensu",
    "user": "sensu",
    "password": "pass"
  }
}

redis.jsonファイルを作成して編集します。

sudo vi /etc/sensu/conf.d/redis.json

次の行を追加します。これには、SensuがRedisインスタンスにアクセスするための接続情報が含まれています。

{
  "redis": {
    "host": "localhost",
    "port": 6379
  }
}

api.jsonファイルを作成して編集します。

sudo vi /etc/sensu/conf.d/api.json

SensuがAPIサービスにアクセスするための接続情報を含む次の行を追加します。

{
  "api": {
    "host": "localhost",
    "port": 4567
  }
}

uchiwa.jsonファイルを作成して編集します。

sudo vi /etc/sensu/conf.d/uchiwa.json

次の行を追加します。 これには、SensuAPIにアクセスするためのUchiwaダッシュボードの接続情報が含まれます。 オプションで、ダッシュボード認証用のuchiwaブロックにユーザー名とパスワードを作成できます。 ダッシュボードを一般公開でアクセスできるようにする場合は、そのままにしておきます。

{
    "sensu": [
        {
            "name": "Sensu",
            "host": "localhost",
            "ssl": false,
            "port": 4567,
            "path": "",
            "timeout": 5000
        }
    ],
    "uchiwa": {
        "port": 3000,
        "stats": 10,
        "refresh": 10000
    }
}

この例では、Sensuマスターサーバー自体をクライアントとして監視します。 したがって、client.jsonファイルを作成して編集します。

sudo vi /etc/sensu/conf.d/client.json

次の行を追加し、Sensuクライアントのname値を編集します。 これは、内和ダッシュボードに表示されるサーバーの名前です。 名前にスペースや特殊文字を含めることはできません。

このサーバーを監視しているため、addressの値はlocalhostのままにしておくことができます。 監視対象のすべてのクライアントホストについて、後で同様のファイルを再度作成します。

{
  "client": {
    "name": "server",
    "address": "localhost",
    "subscriptions": [ "ALL" ]
  }
}

Sensuサービスを自動的に開始できるようにします。

sudo update-rc.d sensu-server defaults
sudo update-rc.d sensu-client defaults
sudo update-rc.d sensu-api defaults
sudo update-rc.d uchiwa defaults

Sensuサービスを開始します。

sudo service sensu-server start
sudo service sensu-client start
sudo service sensu-api start
sudo service uchiwa start

この時点で、http:// ip-address :3000でSensuにアクセスできます。

Sensu default dashboard

ステップ3—クライアントへのインストール

監視するすべてのクライアントマシンにSensuをインストールする必要があります。

Sensuマスターサーバー上にを置いたまま、SCPを使用してSSL証明書をクライアントサーバーの/tmpフォルダーにコピーします。 以下のuserIPを、クライアントサーバーのsudoユーザーとIPアドレスに置き換えます。

scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem user@ip:/tmp

監視対象のクライアントで、Sensuキーとソースを追加します。

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

Sensuをインストールします。

sudo apt-get update && sudo apt-get -y install sensu

クライアントにRabbitMQへの接続情報を提供する必要があります。 SensuのSSLディレクトリを作成し、Sensuマスターサーバーからコピーした/tmpフォルダーに証明書をコピーします。

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/cert.pem /tmp/key.pem /etc/sensu/ssl

rabitmq.jsonファイルを作成して編集します。

sudo vi /etc/sensu/conf.d/rabbitmq.json

次の行を追加します。 host 値を編集して、RabbitMQサーバーのIPアドレスを使用します。 つまり、SensuマスターサーバーのIPアドレスです。 userおよびpasswordの値は、Sensuマスターサーバー上のRabbitMQ仮想ホストに設定した値である必要があります。

{
  "rabbitmq": {
    "ssl": {
      "cert_chain_file": "/etc/sensu/ssl/cert.pem",
      "private_key_file": "/etc/sensu/ssl/key.pem"
    },
    "host": "1.1.1.1",
    "port": 5671,
    "vhost": "/sensu",
    "user": "sensu",
    "password": "pass"
  }
}

client.json ファイルを作成および編集して、このSensuサーバーの構成情報を提供します。

sudo vi /etc/sensu/conf.d/client.json

次の行を追加します。 name の値を、このサーバーがUchiwaダッシュボードで呼び出されるように編集する必要があります。 名前にスペースや特殊文字を含めることはできません。

このSensuクライアントサーバーを監視しているため、addressの値をlocalhostに設定したままにしておくことができます。

{
  "client": {
    "name": "client1",
    "address": "localhost",
    "subscriptions": [ "ALL" ]
  }
}

クライアントを有効にして起動します。

sudo update-rc.d sensu-client defaults
 
sudo service sensu-client start

これで、Sensuダッシュボードの[クライアント]タブにクライアントが表示されます。

ステップ4—チェックを設定する

Sensuが実行されているので、両方のサーバーにチェックを追加する必要があります。 Apacheが実行されているかどうかを確認するRubyスクリプトを作成します。

Apacheがインストールされていない場合は、SensuマスターサーバーとSensuクライアントサーバーの両方に今すぐインストールしてください。

sudo apt-get install -y apache2

Apacheは、デフォルトで両方のサーバーで実行されている必要があります。

sensu-plugin gemをインストールする前に、必要なライブラリがすべて揃っていることを確認してください。 Rubyライブラリとbuild-essentialライブラリをSensuマスターサーバーとSensuクライアントサーバーの両方にインストールします。

sudo apt-get install -y ruby ruby-dev build-essential

sensu-plugingemをSensuマスターサーバーとSensuクライアントサーバーの両方にインストールします。

sudo gem install sensu-plugin

Sensuプラグインフォルダーにcheck-apache.rbファイルを作成し、SensuマスターサーバーとSensuクライアントサーバーの両方でファイルのアクセス許可を変更します。

sudo touch /etc/sensu/plugins/check-apache.rb && sudo chmod 755 /etc/sensu/plugins/check-apache.rb

SensuマスターサーバーとSensuクライアントサーバーの両方でcheck-apache.rbファイルを編集します。

sudo vi /etc/sensu/plugins/check-apache.rb

次の行を追加します。これは、Apacheをチェックするプロセスをスクリプト化したものです。

#!/usr/bin/env ruby
 
procs = `ps aux`
running = false
procs.each_line do |proc|
  running = true if proc.include?('apache2')
end
if running
  puts 'OK - Apache daemon is running'
  exit 0
else
  puts 'WARNING - Apache daemon is NOT running'
  exit 1
end

Sensuマスターサーバーのみでcheck_apache.jsonファイルを作成および編集します。

sudo vi /etc/sensu/conf.d/check_apache.json

次の行を追加して、スクリプトを実行し、60秒ごとにApacheをチェックします。

{
  "checks": {
    "apache_check": {
      "command": "/etc/sensu/plugins/check-apache.rb",
      "interval": 60,
      "subscribers": [ "ALL" ]
    }
  }
}

SensuマスターサーバーでSensuサーバーとAPIを再起動します。

sudo service sensu-server restart && sudo service sensu-api restart

SensuクライアントサーバーでSensuクライアントを再起動します。

sudo service sensu-client restart

数分後、Sensuダッシュボードの[チェック]タブにチェックが表示されます。

いずれかのサーバーでApacheサービスを停止して、スクリプトが機能していることをテストします。

sudo service apache2 stop

数分後、イベントダッシュボードにアラートが表示されます。 アラートをクリックして詳細情報を表示し、サイレンシングや解決などのアクションを実行します。

このイメージでは、Apacheはクライアントサーバーで停止しています。 これはクライアントページです。

Sensu dashboard clients

Apacheサービスを開始して、警告を停止します。

sudo service apache2 start

ステップ5—ハンドラーを設定する

ハンドラーは、イベントに基づいて通知メールを送信したり、Graphiteなどの他のアプリケーションにデータを送信したりできます。 ここでは、Apacheチェックが失敗した場合に電子メールを送信するハンドラーを作成します。 メールを送信するようにサーバーを構成する必要があることに注意してください。 このPostfixチュートリアルを使用して、簡単なメールサーバーをセットアップできます。 (最も簡単な構成のために、Sensuマスターサーバー上のユーザーにメールを送信することをお勧めします。)

Sensuマスターサーバーで、handler_email.jsonファイルを作成および編集します。

sudo vi /etc/sensu/conf.d/handler_email.json

次の行を追加し、[email protected]を通知を受信するメールアドレスに置き換えます。 メールサーバーの設定によっては、これをSensuマスターサーバー上のユーザーのエイリアスに設定するのが最も簡単な場合があります。 このハンドラーは「電子メール」と呼ばれ、メールユーティリティを使用して、件名が「sensuevent」のアラート電子メールを指定された電子メールアドレスに送信します。

{
  "handlers": {
    "email": {
      "type": "pipe",
      "command": "mail -s 'sensu event' [email protected]"
    }
  }
}

check_apache.jsonを編集します。

sudo vi /etc/sensu/conf.d/check_apache.json

apache_checkブロックのemailハンドラーに新しいhandlers行を追加します。


{
  "checks": {
    "apache_check": {
      "command": "/etc/sensu/plugins/check-apache.rb",
      "interval": 60,
      "handlers": ["default", "email"],
      "subscribers": [ "ALL" ]
    }
  }
}

sensu-apiとsensu-serverを再起動します。

sudo service sensu-api restart && sudo service sensu-server restart

電子メールアラートをテストするには、Apacheサービスを再度停止します。 60秒ごとに1つ取得する必要があります。

sudo service apache2 stop

メールは次のようになります。

Return-Path: <[email protected]>
...
Subject: sensu event
To: <[email protected]>
...
From: [email protected] (Sensu Monitoring Framework)

{"id":"481c85c4-485d-4f25-b835-cea5aef02c69","client":{"name":"Sensu-Master-Server","address":"localhost","subscriptions":["ALL"],"version":"0.13.1","timestamp":1411681990},"check":{"command":"/etc/sensu/plugins/check-apache.rb","interval":60,"handlers":["default","email"],"subscribers":["ALL"],"name":"apache_check","issued":1411682001,"executed":1411682001,"duration":0.023,"output":"WARNING - Apache daemon is NOT running\n","status":1,"history":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"]},"occurrences":1,"action":"create"}

電子メールアラートの受信を停止するには、Apacheサービスを再度開始します。

sudo service apache2 start

結論

Sensuは、プラグインとそのために作成できるカスタムスクリプトを備えた多用途の監視ツールです。 また、データを操作するためのハンドラーを作成することもできます。 あなたにぴったりのそれを手に入れるために探求し続けてください。