muninからchatworkにアラートを送る方法


AWSのEC2にmuninをインストールして、そこからチャットワークに通知するようにしました。

手順

  1. muninをインストールする
  2. Chatworkに送信するためのスクリプトを用意する
  3. munin.confにchatworkに送信する設定を行う

1. muninをインストールする

sudo yum install -y munin munin-node
sudo chkconfig munin-node on

munin-nodeは、muninのみを指定しても併せてインストールされますので省略しても問題ありません。
他のサーバも監視する場合、監視先のサーバではmunin自体は不要です。

2. chatworkに送信するためのスクリプトを用意する

場所はどこでも良いのですが、muninが配置されていた/var/lib/muninにインストールしました。
muninユーザーで実行できるように実行権限をつけるのを忘れない様にしましょう。

最初の方のROOM_ID、API_KEY、SEND_TOは適当に書き換えてください。

/var/lib/munin/chatwork_notify.rb
#!/usr/bin/ruby

require "net/http"

ROOM_ID = NNNNNNNNN
API_KEY = "XXXXXXXX"
SEND_TO = "[To:NNNNNN] zenpou"

url = "https://api.chatwork.com/v2/rooms/#{ROOM_ID}/messages"
uri = URI.parse (url)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true

message = "[info][title]#{ARGV.join}[/title]#{SEND_TO}\n#{STDIN.read}[/info]"

request = Net::HTTP::Post.new (uri.request_uri)
request.add_field "X-ChatWorkToken", API_KEY
request.set_form_data :body => message
https.request(request)

3. munin.confにchatworkに送信する設定を行う

[localhost]などのサーバ毎の設定より前に送信するコマンドを設定します

contact.admin.command /var/lib/munin/chatwork_notify.rb "Munin Alert [${var:group}]:${var:host}"
contact.admin.max_messages 3
contact.admin.always_send  warning critical

各サーバ毎に、アラートの基準も設定が必要です

[localhost]
    address 127.0.0.1
    use_node_name yes
    df._dev_xvda1.warning 90
    df._dev_xvda1.critical 95
    load.warning 2
    load.critical 4

試しにしきい値を物凄く低くして、warning状態にして以下のコマンドを実行して送信を試す事ができます。

su - munin --shell=/usr/bin/munin-cron