Ubuntu14.04でSensuMonitoring、RabbitMQ、およびRedisを構成する方法
序章
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
これにより、ユーザーと適切なホームディレクトリおよびグループが作成されます。 新しいユーザーのパスワードを設定し、パスワードを確認するように求められます。 また、ユーザーの情報を入力するように求められます。 ユーザー情報を確認してユーザーを作成します。
次に、ユーザーにsudo権限を付与します。 visudo
指図。
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インスタンスに安全に接続できるようになります。 userとpassは、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にアクセスできます。
ステップ3—クライアントへのインストール
監視するすべてのクライアントマシンにSensuをインストールする必要があります。
Sensuマスターサーバーでを維持したまま、SSL証明書をクライアントサーバーにコピーします。 /tmp
SCPを使用するフォルダ。 以下のuserとIPを、クライアントサーバーの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ディレクトリを作成し、証明書をコピーします。 /tmp
Sensuマスターサーバーからコピーされたフォルダー。
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はクライアントサーバーで停止しています。 これはクライアントページです。
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: <sensu@sensu-master>
...
Subject: sensu event
To: <[email protected]>
...
From: sensu@sensu-master (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は、プラグインとそのために作成できるカスタムスクリプトを備えた多用途の監視ツールです。 また、データを操作するためのハンドラーを作成することもできます。 あなたにぴったりのそれを手に入れるために探求し続けてください。