ようへいの日々精進XP

よかろうもん

Amazon Linux 上に sensu-server を構築する(1)

はじめに

  • とりあえず sensu で監視環境を作りたい
  • Sensu についてはこちらこちらこちら等で詳しく纏めて頂いていて参考になる
  • chef とか puppet での構築が推奨されているが、今回はこちらを見ながら sensu-server の構築をやってみる
  • EC2 上の Amazon Linux 上に構築する

参考


最低限必要なツールをインストール

rabbitmq

sudo yum --enablerepo=epel install rabbitmq-server
sudo chkconfig rabbitmq-server on
sudo /etc/init.d/rabbitmq-server start

redis

sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo yum install --enablerepo=remi redis
sudo chkconfig redis on
sudo /etc/init.d/redis start

sensu

リポジトリを登録する。

sudo sh -c 'cat << EOT >> /etc/yum.repos.d/sensu.repo
[sensu]
name=sensu-main
baseurl=http://repos.sensuapp.org/yum/el/6/\$basearch/
gpgcheck=0
enabled=1
EOT
'

yum で一発!

sudo yum -y install sensu

SSL 証明書の生成

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

各種設定

[Amazon Linux] 日時を日本時間に修正する

sudo cp /usr/share/zoneinfo/Japan /etc/localtime

[rabbitmq] vhost を作成

sudo su - rabbitmq
rabbitmqctl add_vhost /sensu

以下のように出力される。

Creating vhost "/sensu" ...
...done.

[rabbitmq] vhost の権限を設定

sensu ユーザーを作成する。

sudo su - rabbitmq
rabbitmqctl add_user sensu mypass

以下のように出力される。

Creating user "sensu" ...
...done.

/sensu に対して sensu ユーザーの権限を指定する。

rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"

以下のように出力される。

Setting permissions for user "sensu" in vhost "/sensu" ...
...done.

[rabbitmq] rabbitmq_management を有効にする

sudo /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management

以下のように出力される。

The following plugins have been enabled:
  mochiweb
  webmachine
  rabbitmq_web_dispatch
  amqp_client
  rabbitmq_management_agent
  rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

以下のような rabbitmq を管理するダッシュボードが有効になる。

f:id:inokara:20140302233301p:plain

[rebbitmq] rebbitmq.config の設定

rabbitmq.config/etc/rabbitmq/ 以下に設置する。

sudo sh -c 'cat << EOT >> /etc/rabbitmq/rabbitmq.config
[
    {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}]}
  ]}
].
EOT
'

[rabbitmq] SSL 証明書を設置

先ほどの SSL 証明書作成で作成した証明書を設置しなければいけないが、上記の rabbitmq.configssl_options で指定している証明書を設置する為のディレクトリを作成する。

sudo mkdir -p /etc/rabbitmq/ssl/

ディレクトリの作成後、証明書を /etc/rabbitmq/ssl/ 以下にコピーする。

sudo cp /tmp/ssl_certs/sensu_ca/cacert.pem /etc/rabbitmq/ssl/
sudo cp /tmp/ssl_certs/server/cert.pem /etc/rabbitmq/ssl/
sudo cp /tmp/ssl_certs/server/key.pem /etc/rabbitmq/ssl/

[rabbitmq] rabbitmq-server の再起動

sudo service rabbitmq-server restart

[sensu-server] config.json の設定

sensu 自身をインストール後に /etc/sensu/config.json.example というファイルが置いてある。

{
  "rabbitmq": {
    "host": "localhost",
    "port": 5672,
    "user": "sensu",
    "password": "sensu",
    "vhost": "/sensu"
  },
  "redis": {
    "host": "localhost",
    "port": 6379
  },
  "api": {
    "host": "localhost",
    "port": 4567
  },
  "dashboard": {
    "port": 8080,
    "user": "admin",
    "password": "secret"
  },
  "handlers": {
    "default": {
      "type": "set",
      "handlers": [
        "stdout"
      ]
    },
    "stdout": {
      "type": "pipe",
      "command": "cat"
    }
  },
  "checks": {
    "test": {
      "command": "echo -n OK",
      "subscribers": [
        "test"
      ],
      "interval": 60
    }
  },
  "client": {
    "name": "localhost",
    "address": "127.0.0.1",
    "subscriptions": [
      "test"
    ]
  }
}

また、/etc/sensu/conf.d/README を斜め読みしたところ conf.d 以下に .json という拡張子でファイルを置くことで設定ファイルとして認識されるようだ。(※設定ファイルは .json という拡張子を付けなはれということかな)

ということで、/etc/sensu/config.json.example をベースに以下のようにファイルを設置した。

/etc/sensu/conf.d/
├── README.md
├── api.json
├── client.json
├── dashboard.json
├── rabbitmq.json
└── redis.json

ポイントというかドキュメントを参考にしながら設定を進めていく上での注意点としては config.json.example をそのままだと rabbitmq に接続出来なかったので、今回、rabbitmq への接続が定義されている rabbitmq.json は以下のように修正した。

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

[sensu-server] 各種サービスの起動

以下のように関連するサービスを起動する。

sudo /etc/init.d/sensu-server start
sudo /etc/init.d/sensu-api start
sudo /etc/init.d/sensu-dashboard start

ついでに sensu-client も起動して sensu-server 自身が稼働するホストも監視するようにする。

sudo /etc/init.d/sensu-client start

[sensu-server] Web Dashboard にアクセスする

各種サービスが正常に起動したらブラウザをでインスタンス8080 ポートにアクセスすると...以下のようなシンプルなダッシュボードが表示される。

f:id:inokara:20140303011945p:plain

とりあえずここまで。監視対象としてはローカルホストのみの状態。

f:id:inokara:20140303013055p:plain

但し、監視項目の設定は無いのでクライアントとして登録されているのみ。


とりあえず...

現在、こんな状態

構成としては以下のような状態。

f:id:inokara:20140303011746p:plain

次のステップ

以下のようなことをやりたい。

  • コミュニティのプラグインを使った監視項目の追加
  • Nagiosプラグインを使った監視項目の追加
  • クライアントの追加
  • EC2 インスタンスをクライアントにした場合の監視対象ノード(クライアント)の自動登録