tweepyを使って、Zabbixのトリガーをtweetする(その1)

Zabbix 使って、 Web ページの更新をチェックしているところがいくつかあって、更新されたらメールが飛ぶようにはしているのだけど、それを tweet させられないか、ということで調べてみると、やはり先人は居るものですね。

A continuación, vamos a explicar cómo configurar de forma sencilla las alertas en Zabbix para enviarlas a Twitter.

[From Zabbix: Alertas a Twitter ~ El mundo en bits]

今回は、このスペイン語で書かれたサイトの情報を元に、やってみたというわけです。

tweepy をインストールする

まずは、 tweepy をインストール。

ここで軽くひとハマり。
上記で引用しているサイトに書かれた手順どおり、 tweepy を github から取得してセットアップしようしたら、以下の様なメッセージが出てセットアップが中断される。

root@vps2:~/tweepy# python setup.py install
Traceback (most recent call last):
File "setup.py", line 5, in <module>
from pip.req import parse_requirements
ImportError: No module named pip.req

あんまり時間かけたくなかったのと、原因調べるの面倒だったので、配布物に含まれる README.md を参照してみたところ、 pip というコマンドを使う方法も記述されていたので、そちらを試してみることに。
まず、 pip 自体をインストールする必要があるわけですが、これは Debian sid 向けに python-pip というパッケージがあるので、こいつをインストール。

root@vps2:~# aptitude install python-pip
以下の新規パッケージがインストールされます:
python-cffi-backend{a} python-colorama{a} python-cryptography{a} python-distlib{a} python-enum34{a}
python-html5lib{a} python-dina{a} python-ipaddress{a} python-ndg-httpsclient{a} python-openssl{a}
python-pip python-pyasn1{a} python-requests{a} python-urllib3{a} python-wheel{a}
更新: 0 個、新規インストール: 15 個、削除: 0 個、保留: 202 個。
1,030 k バイトのアーカイブを取得する必要があります。展開後に 5,550 k バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?]

Debian の常で、インストールしたいパッケージを指定して上げれば、依存関係は自動的に解決されて関連パッケージも一纏めにインストール完了。

続く pip のインストールも、コマンド一発で関連するモジュール群まで、無事インストール完了。

root@vps2:~# pip install tweepy
Downloading/unpacking tweepy
Downloading tweepy-3.5.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): requests>=2.4.3 in /usr/lib/python2.7/dist-packages (from tweepy)
Requirement already satisfied (use --upgrade to upgrade): six>=1.7.3 in /usr/lib/python2.7/dist-packages (from tweepy)
Downloading/unpacking requests-oauthlib>=0.4.1 (from tweepy)
Downloading requests_oauthlib-0.5.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): urllib3==1.12 in /usr/lib/python2.7/dist-packages (from requests>=2.4.3->tweepy)
Downloading/unpacking oauthlib>=0.6.2 (from requests-oauthlib>=0.4.1->tweepy)
Downloading oauthlib-1.0.3.tar.gz (109kB): 109kB downloaded
Running setup.py (path:/tmp/pip-build-ViGwji/oauthlib/setup.py) egg_info for package oauthlib

Installing collected packages: tweepy, requests-oauthlib, oauthlib
Running setup.py install for oauthlib

Successfully installed tweepy requests-oauthlib oauthlib
Cleaning up...

で、ここまでで準備の第一弾が完了。
あとから気づいたのだけど、最初に tweepy のインストールに失敗したメッセージに "ImportError: No module named pip.req" とあるので、 python-pip も必要だった模様。


tweepy を使って tweet する準備とテスト

tweepy は、Python で Twitter API を操作するためのツール群なので、コレを使ってスクリプトなりを用意するわけですが、その前に Twitter API を使うために Twitter のデベロッパとしての登録とアプリケーションの登録をします。
アプリ登録をすると、 Consumer Key や Access Key が発行されますが、これらを後述するスクリプト中に埋め込むことで、 API 経由で tweet が出来るようになる、というわけです。

アプリケーションを登録登録したアプリのためのアクセストークンを確認

肝心のスクリプトは、下のような非常にシンプル。
"hogehogefugafuga" となっている部分は、登録したアプリごとに発行されるものに書き換えて、Zabbix が実行できる外部スクリプトを格納するディレクトリ(ここでは /usr/lib/zabbix/alertscripts )に任意の名前で保存しておきます。

root@vps2:~/tweepy# more /usr/lib/zabbix/alertscripts/zbx2tw.py
#!/usr/bin/python

import sys
import tweepy

CONSUMER_KEY = 'hogehogefugafuga'
CONSUMER_SECRET = 'hogehogefugafuga'
ACCESS_KEY = 'hogehogefugafuga'
ACCESS_SECRET = 'hogehogefugafuga'

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)

api = tweepy.API(auth)
api.update_status(sys.argv[2])

スクリプト実行時の第二引数を tweet するというものなので、コマンドラインから、

root@vps2:~# /usr/lib/zabbix/alertscripts/zbx2tw.py "@Soukaku" 直スクリプトなら、問題ないのだけどな…。

のように実行すると

という形でタイムラインに反映される、と。
スクリプト単体での動作に問題が無いのを確認できたら、このスクリプトに対してトリガーの内容を渡すための設定を Zabbix 側にしていきます。自分の趣味的なもんで Zabbix はまだアルファ版の 3.0 系使ってますが、2.x 系でもほぼ同じように設定できるはずですので、そのあたりは適宜読み替えてください。

zbx2tw.pyをメディアタイプに登録

まず、管理メニューのメディアタイプで、このスクリプトを登録。


zbx2tw.pyを使いたいユーザのメディアを設定
設定したメディアの詳細

続いて、登録したメディア(zabbix2twitter)を、使いたいユーザもメディアとして設定。これで、メール送信などと同じように zbx2tw.py を扱うことが出来るようになりました。


アクションの設定(1)
アクションの設定(2)

次に、トリガーを検知した時のアクションを設定。
ここで重要なのは、処理内容の設定になるので、そこで誰に送るのか、送る手段は何か、という部分なのでそこ以外は特にいじりません。

tweet される内容は Default Subject に書かれている通りに、優先度とトリガー名となります。内容を変えたければこの部分を変更すれば良いのわけですが、実際には変更しなくても良いでしょう。
変更するとすれば、tweet された内容がわかりやくすなるようトリガー名を修正したほうが良いでしょう。


と、ここまでで準備が完了したわけですが、ちょっと長くなったので、続きは次のエントリーにて。

トラックバック(2)

で、前のエントリーの続き。 tweet しようとしてハマる… さて、Zabbix... 続きを読む

Zabbix 使って、 Web ページの更新をチェックしているところがいくつかあって、更新されたらメールが飛ぶようには... 続きを読む

コメントする