FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

sensu-serverとpagerdutyの連携

こんにちは、貴子です。

この記事では、sensuでhttpdの死活監視を行い
pagerdutyを利用してアラートが飛ぶところまでをやります。
sensu-server・clientはインストール済みとします。

sensu-serer・clientのインストールはこちらから。
https://sensuapp.org/docs/latest/install-sensu-client

sensuでhttpdの死活監視を行います


まずsensu-serverにプロセス監視のスクリプトとconfファイルを置いてrestartします。

# sensu監視pluginを設置します
mkdir /etc/sensu/plugins/processes
wget -O /etc/sensu/plugins/processes/check-procs.rb https://sensuapp.org/docs/0.19/files/check-procs.rb
chmod +x /etc/sensu/plugins/check-procs.rb
chown sensu:sensu /etc/sensu/plugins/check-procs.rb
# pluginを利用するconfファイルを書きます
vi /etc/sensu/conf.d/proc_httpd.json
{
  "checks": {
    "httpd": {
      "handlers": ["default"],
      "pager_team": "septeni.sensu-server",
      "command": "/etc/sensu/plugins/processes/check-procs.rb -p httpd -w 128 -c 64",
      "interval": 30,
      "subscribers": [
        "httpd" , "web"
      ]
    }
  }
}
# 設定が完了したのでsensu-serverの再起動をします
service sensu-server restart

今度はsensu-client側でhttpdのsubscribersを追記してclientをrestartします。

vi /etc/sensu/conf.d/client.json
{
  "client": {
    "name": "sensu-client",
    "address": "監視先ipアドレス",
    "subscriptions": ["httpd"]
  }
}
>|sh|
>|sh|
service sensu-client restart

設定が反映されて監視されているかsensu-serverのダッシュボード(Uchiawa)を確認します。
f:id:taketor:20150722110024p:plain

sensu-serverとpagerdutyを連携させます

1.pagerdutyのapi_keyを取得します

pagerdutyのアカウントを作って管理画面にログインします。
その後、「Configuration > Services」 をクリックしてServices画面を開きます。
f:id:taketor:20150722110153p:plain
「Add New Services」をクリックします。
f:id:taketor:20150722110234p:plain
必要な項目を入力してAdd Serviceを押して保存します。
f:id:taketor:20150722110250p:plain
api_keyが表示されます。
f:id:taketor:20150722110301p:plain

2.sensu-serverとpagerdutyを連携させます


sensu-serverにログインし、pagerdutyのhandlersの設定をします。
(1)pagerdutyで使用するgemをインストールします

/opt/sensu/embedded/bin/gem install redphone

(2)handlersを取得します

cd /etc/sensu/handlers
wget https://raw.github.com/sensu/sensu-community-plugins/master/handlers/notification/pagerduty.rb
chmod 755 pagerduty.rb
chown sensu:sensu pagerduty.rb

(2)handler_notification.jsonを作成します

vim /etc/sensu/conf.d/handler_notification.json
{
    "handlers": {
      "pagerduty": {
        "type": "pipe",
        "command": "/etc/sensu/handlers/pagerduty.rb"
      }
    }

(3)notification.jsonを作成して、1で取得したapi_keyをセットします

vim /etc/sensu/conf.d/notification.json
{
  "pagerduty": {
    "api_key": "*****************"
  }
}

(4) sensu-serverに設定したhttpdの監視confのhandlersに追記します

vim proc_httpd.json
{
  "checks": {
    "httpd": {
      "handlers": ["default", "pagerduty"],
      "command": "/etc/sensu/plugins/processes/check-procs.rb -p httpd -w 128 -c 64",
      "interval": 30,
      "subscribers": [
        "httpd" , "web"
      ]
    }
  }
}

(4)設定が完了したので、sensu-clientをrestartします

chown -R sensu:sensu /etc/sensu/
service sensu-server restart
service sensu-client restart

3.確認します

service httpd stop

sensuがerrorを検知しました。
f:id:taketor:20150722110508p:plain
pagerdutyのダッシュボードでもerrorが表示され
emailが届くことを確認できたら、これで連携完了です!
f:id:taketor:20150722110526p:plain