IRCサーバを立てて色々連携してみたメモ
やっとこさ今の現場に znc / irc / ikachan という環境を構築し、
テンションが上がって勢いで作業したことをメモってみます。
正月休みにのんびりコーディングしてました。
やったこと一覧
- fluentdでnginxのエラーログを監視してikachanに投げる
- nagiosからikachanに投げる
- gitリポジトリのpushを監視してikachanに投げる
- beproud_botの真似っ子bot
- unazu_kun bot
- syonago bot
fluentdでnginxのエラーログを監視してikachanに投げる
いまはnginxエラーログだけ監視してます。
<match nginx.error.**> type copy <store> type ikachan host xxxxxxxxxxxxxxxxxxxxx port 5979 channel nginx-notification out_keys message message nginx error log [%s] </store> <store> type file compress gzip path /var/log/fluent/nginx.error </store> </match>
先日ベンチマーク中にサーバ落ちて
growl通知が大変なことになってしまったので間引きしたいなーと思いました。
こちらを使わせていただきたく。
同じメッセージを間引く fluent-plugin-suppress を書いた
http://d.hatena.ne.jp/sfujiwara/20121122/1353571085
ただ、今のエラーログパースだと
「[error] 25647#0: *???????? <-これが毎度変わる! "error message"」
のように同一メッセージにはならないため、パース処理を変える必要ありますね。近日変える予定。
ちなみに最終的にはこちらに近いことしたいです。
fluentd でアクセスログからメトリクス生成/リアルタイム監視するための設定例
http://d.hatena.ne.jp/tagomoris/20121029/1351491111
nagiosからikachanに投げる
超簡単に設定できた。
こんなコマンド設定しておいて…
define command { command_name notify-host-by-ikachan command_line curl -F channel=\#nagios -F message="***** Nagios ***** Notification Type: $NOTIFICATIONTYPE$ Service: $SERVICEDESC$ Host: $HOSTALIAS$ Address: $HOSTADDRESS$ State: $SERVICESTATE$ Date/Time: $SHORTDATETIME$ - Additional Info: $SERVICEOUTPUT$" http://localhost:4979/notice } define command { command_name notify-service-by-ikachan command_line curl -F channel=\#nagios -F message="***** Nagios ***** Notification Type: $NOTIFICATIONTYPE$ Service: $SERVICEDESC$ Host: $HOSTALIAS$ Address: $HOSTADDRESS$ State: $SERVICESTATE$ Date/Time: $SHORTDATETIME$ - Additional Info: $SERVICEOUTPUT$" http://localhost:4979/notice }
contactでnotification設定するだけ。
define contact{ contact_name hoge-contact use generic-contact alias hogehoge-contact email toritori0318@example.com service_notification_commands notify-service-by-ikachan host_notification_commands notify-host-by-ikachan }
gitリポジトリのpushを監視してikachanに投げる
gitの共有リポジトリの「hooks」ディレクトリにpost-updateスクリプトとikashan.shを置くだけ。
post-updateスクリプト
#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". echo "/path/to/repo/hooks/ikachan.sh $1 $2 $3" | at now
ikachan.shスクリプト
#!/bin/sh # repository name REPO_NAME="reponame.git" # IRC channnel CHANNEL="#git-push-notification" # ikachan server IKACHAN="http://localhost:4979" curl -s -F channel=$CHANNEL -F message="$REPO_NAME#$1 updated:" $IKACHAN/notice 1> /dev/null & git rev-list $3 ^$2 --reverse | while read COMMITID do MSG=`git --no-pager log -1 --format='%an: %s' $COMMITID` curl \ -s -F channel=$CHANNEL -F message="$MSG" $IKACHAN/notice 1> /dev/null & done
ただ、これ「pushしたよ」っていう通知しかされないので今一つ…。
その内gitからじゃなくてJenkins先生から投げるようにしたいですね。
※参考
http://d.hatena.ne.jp/anatoo/20120126/1327512373
beproud botの劣化bot
beproud_botについてはこちらを参照。
http://www.slideshare.net/bpstudy/bpstudy36-beproudbot-5319457
いまは「
いろいろ機能増やしたい。
unazu_kun botの劣化bot
unazu_kunについてはこちらを参照。
http://d.hatena.ne.jp/kenjiskywalker/20121010/1349878137
自分も癒しが欲しくなって書きました。
しかし、まだ肯く機能しか作ってないです('-'*)
まとめ
IRC、普通に運用ツールとして便利なので楽しいですね!
つかikachan大活躍。やばい。
まだまだやりたいことあるので暇な時にちょいちょいいじりたいと思います。
また「他にもこんな使い方あるよ!」っていうことがあれば教えてください><