新潟の空は今日も灰色

技術ネタ中心にいきたいけど、そんなにネタは持ってません。

Zabbix からチャットワークに投稿するためのスクリプト書いた

Zabbix からのアラートをチャットワークに投げつけるためのスクリプトを書きました。

npoi/zabbix2chatwork

ソースコードあんまり綺麗じゃないけど。README 書いてないけど。コミットメッセージ日本語だけど。

背景

今の会社はインフラが強固ではありません。インフラ担当の僕にスキルがあるというわけではないので、うまく立てないとセキュリティホールとなりがちなメールサーバは可能なら構築したくないという希望がありました。

でも、アグリノートのサービスになにかあったときのために Zabbix からアラート情報は飛ばしたい。外部にメールサーバ借りるというのも手なのですが、それよりも手っ取り早くスマホにプッシュ通知する方法がありました。そう、チャットワークです。

選んだ理由、社内のコミュニケーションツールがチャットワークだったというのが一番大きいんですけどね。ただ、これならば、複数人に同時にアラート飛ばすときにも使いやすいですしもってこいです。限定的ながらAPIも公開されて、プログラム側から使いやすくなりましたよね。

ついでに、どうせエンジニアなのだから、死ぬまでに1回くらいはなんか自分でもプログラム、もといスクリプトの一つでも書いて公開してみたいという欲求が湧いたので、久しぶりに Python を使ってスクリプトを書いてみた次第です。Python 選んだのは単に好きだからっていうのと、標準的な UNIX なら処理系乗っているはずだからです。

使い方

単体で使うとき(テストとか?)

Zabbix 使わなくても、コマンドラインから以下のコマンドで実行可能です。

./zabbix2chatwork.py [chatwork_api_token]:[チャットルームID or チャットルーム名] [表題] [メッセージ本文]

たとえば、あらかじめ "Zabbix" という部屋を用意して以下のコマンドで実行すると、

./zabbix2chatwork.py 7bb[中略]742:Zabbix hoge fuga

以下のようなこんな感じになります。

f:id:hagane:20140213001945p:plain

これだけではとくに使い道はないですね。

Zabbix から投稿するとき

まず、Zabbix の、AlertScripts ディレクトリにスクリプトをダウンロードして、実行権限を与えます。ディレクトリの場所は公式の CentOS 用のパッケージだと、/usr/lib/zabbix/alertscripts になってますね。/etc/zabbix/zabbix_server.conf 内に設定が書いて有るはずなので確認してください。

ファイルを設置したら、Zabbix にログインします。メニューの[管理]→[メディアタイプ]へ遷移して、[メディアタイプの作成]ボタンを押します。

f:id:hagane:20140213003143p:plain

f:id:hagane:20140213003739p:plain

[タイプ]を スクリプト に変更し、[スクリプト名]には zabbix2chatwork.py を指定します。[名前]は適当で良いと思います。[有効]のチェックボックスも忘れずにチェックします。

次に、ユーザー設定に移ります。

f:id:hagane:20140213004350p:plain

ユーザーリスト という表示のドロップダウンボックスを ユーザー に切り替え。

f:id:hagane:20140213004447p:plain

任意のユーザー名をクリックし、[メディア]タブを選択。[追加]リンクを押すと以下のダイアログが出るので、先ほど設定したメディアタイプを指定します。[送信先]には [chatwork_api_token]:[チャットルームID or チャットルーム名] を入力してください(例:7bb[中略]742:Zabbix)。[時間帯]等はお好みで。

f:id:hagane:20140213011157p:plain

あとは、トリガーとアクションの設定次第でメールの代わりにチャットワークにメッセージが飛んでいくはずです。実際に飛ばしてみた時の画像がこちら。

f:id:hagane:20140213010220p:plain

エ、エモーティコン…。(2/13 9:18変更…)

課題

プッシュ通知届くのを目的としているくせに、マイチャットあたりになげないと、スマホさんは通知してくれません。ちゃんと To つけて送れるようにしないと。

あと、複数の部屋名が重複しているとうまく使えないはずです。そういうときは、room_id で指定してあげてください。

最後に

久々だったせいもあって、プログラム書くの楽しかったです。これだけ短くて、クラスもなにもあったものではないですけど素直に楽しめました。なんか次はなに作ってやろうかっていうやる気出ますね。久々に物作りの感動を思い出した気がしました。うん、もっと、こいつも改善していきたいですけどね。改善ってなんだかわからないけど。

とはいえ、仕事でそろそろコード書かないといけない雰囲気が漂っていますけどね…。

これだけ短いスクリプトだけど、コーディング上まずい部分が有りそうな気がします。見つけられたら、直接指摘したり、Pull request いただけると幸いです。よろしくお願いします。

余談

なお、話は変わりますが、ウォーターセル株式会社では Ruby(on Rails)、PHPAndroid アプリ開発に関しての人材を募集中です。

職場は新潟というグンマーのさらに奥地ですが、農業ITというフィールドはそれなりに攻略しがいのあるエリアだと思います。今年あたりは一気に市場規模の拡大がありそうです(それだけ競争激化して辛い戦いも増えそうですが…)。

もし、ご興味があれば、人材募集に関わる内容じゃなくても、企業間のコラボなどでもご連絡いただけるとうれしいです。よろしくお願いします!

追記(2015/01/19)

ChatWork で code タグというものが出来たらしいです。

ついに「codeタグ機能」をリリース!ソースコード表示もより見やすくなりました! | ChatWorkブログ

今までのスクリプトだと、強制的にエモーティコン表示させられてたんですが、この対応によってエモーティコン排除できるようになりました。 早速コードに反映してあります。