Ubuntu 14.04でSensu Monitoring、RabbitMQ、およびRedisを構成する方法

前書き

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

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

「check」スクリプトと「handler」スクリプトの両方がSensuマスターサーバー上で実行され、Sensuクライアントサーバー間のチェック実行の調整とチェック結果の処理を行います。 チェックによってイベントがトリガーされると、ハンドラーに渡され、指定されたアクションが実行されます。

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

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

前提条件

Sensuをセットアップするには、次のものが必要です。

  • * Ubuntu 14.04 *を実行している1つのマスターノードドロップレット。 これは、すべての監視データを表示するために使用するノードです。

  • * Ubuntu 14.04 *を実行して、監視する少なくとも1つの追加ノード。

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

adduser

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

次に、 `+ visudo +`コマンドでユーザーにsudo権限を付与します。

visudo

これにより、ファイルが開きます。 `+ User privilege specification +`セクションで、作成されたユーザーに別の行を追加して、次のようにします(ではなく、選択したユーザー名で):

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

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

su -

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

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の証明書ジェネレーターをディレクトリにダウンロードし、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

ファイルを作成および編集します。

sudo vi /etc/rabbitmq/rabbitmq.config

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

[
   {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仮想ホストとユーザーを作成します。 パスワードを変更します()。 後でSensuサーバーとクライアントを監視するように設定するときに、このパスワードが必要になります。

sudo rabbitmqctl add_vhost /sensu
sudo rabbitmqctl add_user sensu
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 / config.json.example <^>は、Sensuの構成にコピーして使用できる別の構成ファイルの例です。

ファイルを作成および編集します。

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": "",
   "password": ""
 }
}

ファイルを作成および編集します。

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

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

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

ファイルを作成および編集します。

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

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

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

ファイルを作成および編集します。

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

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

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

この例では、Sensuマスターサーバーがクライアントとして自身を監視します。 そのため、ファイルを作成および編集します。

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

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

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

{
 "client": {
   "name": "",
   "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://:3000でSensuにアクセスできます。

image:https://assets.digitalocean.com/articles/sensu/uchiwa-home.png [Sensuデフォルトのダッシュボード]

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

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

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

scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem @:/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

ファイルを作成および編集します。

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

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

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

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

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

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

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

{
 "client": {
   "name": "",
   "address": "",
   "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をインストールする前に、必要なライブラリがすべて揃っていることを確認してください。 SensuマスターサーバーとSensuクライアントサーバーの両方にRubyライブラリとビルド必須ライブラリをインストールします。

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

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

sudo gem install sensu-plugin

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

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

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

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マスターサーバーのみでファイルを作成および編集します。

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はクライアントサーバーで停止されています。 これは* Clients *ページです。

image:https://assets.digitalocean.com/articles/sensu/uchiwa-checks.png [Sensuダッシュボードクライアント]

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

sudo service apache2 start

ステップ5-ハンドラーのセットアップ

ハンドラーは、通知メールを送信したり、イベントに基づいてGraphiteなどの他のアプリケーションにデータを送信したりできます。 ここでは、Apacheチェックが失敗した場合に電子メールを送信するハンドラーを作成します。 電子メールを送信するようにサーバーを構成する必要があることに注意してください。 このhttps://www.digitalocean.com/community/tutorials/how-to-install-and-setup-postfix-on-ubuntu-14-04[Postfix Tutorial]を使用して、簡単なメールサーバーをセットアップできます。 (最も簡単な構成のために、Sensuマスターサーバー上のユーザーにメールを送信したい場合があります。)

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

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

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

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

を編集します。

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

ブロックにハンドラーを含む新しい行を追加します。

{
 "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は、プラグインと、作成できるカスタムスクリプトを備えた汎用性の高い監視ツールです。 また、ハンドラーを作成して、データをほとんど何でも処理できます。 最適な状態を得るために、探索を続けてください。

Related