Zabbix のメディアタイプに Growl を指定し、手元のマシンの Growl で障害情報を受け取る方法
はじめに
「サーバー監視をしていなくて許されてるのは小学生までですよね〜キャハハ」
私感ですが、 Munin と Zabbix のハイブリッド監視がステキです。
手順
Zabbix では、ある監視項目の値が閾値を超えるなどのイベントをトリガーに、その情報を監視者に通知することができます。 その通知方法として Zabbix にデフォルトで用意されている方法は、"メール", "Jabber", "SMS", そして"スクリプト"です。
Growl 通知を使うためには、この4つの通知方法のうち"スクリプト"を使用します。 つまり、"Growl で障害通知をするスクリプトを自分で書いて、ここに指定すればいいってワケ"です。
手順1. スクリプト
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from gntp import notifier as growl
def main():
user, password, hostname, port = reduce(
lambda a, b: a + b,
map(lambda a: a.split(u':'), sys.argv[1].split(u'@'))
)
notifier = growl.GrowlNotifier(
applicationName=u'Zabbix',
notifications=[u'zabbix'],
defaultNotifications=[u'zabbix'],
hostname=hostname,
port=port,
password=password
)
ret = notifier.register()
if ret is True:
notifier.notify(
noteType=u'zabbix',
title=sys.argv[2],
description=sys.argv[3],
# icon=u'[URI of ICON]',
sticky=True,
priority=-1
)
else:
print ret
if __name__ == u'__main__':
main()
こちらが予め用意した通知スクリプトです。
これを zabbix_server.conf の"AlertScriptsPath"に指定されているディレクトリに保存します。
なお、このスクリプトを動作させるためには gntp というライブラリが必要ですので、 pip または easy_install を使ってサクッとインストールしておいて下さい。 また、 virtualenv を使う場合は、適切に shebang を変更して下さい。
保存したら、 Zabbix の実行ユーザーが実行できるように、適切にオーナーやグループ, パーミッションを調整して下さい。
手順2. メディアタイプに追加する
Zabbix にログインした状態で、「管理」-> 「メディアタイプ」 -> 「メディアタイプの作成」と進み、フォームに適切な情報を入力し、 Zabbix メディアタイプを作成して下さい。
手順3. "Growl" メディアをユーザーに追加する
Zabbix にログインした状態で、「管理」 -> 「ユーザー」と進み、 Growl 通知を受け取りたいユーザーの設定画面を開きます。 ユーザー設定画面の下方に「メディア」という項目があるので、この項目の「追加」ボタンを押し、開いたフォームに適切な情報を入力し、 "Growl" メディアをユーザーに追加します。
なお、「送信先」のフォーマットですが、 "user:password@hostname:port" を想定しています。 user は不使用ですので空を、 password は通知を受け取るマシンの Growl 環境設定のネットワークタブで設定したものを、 hostname は通知を受け取るマシンのホストネームまたは IP アドレスを、 port は通知を受け取るマシンの Growl がリッスンしているポート番号を、それぞれ入力して下さい。
できた!
ね、簡単でしょ?