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
自分も癒しが欲しくなって書きました。
しかし、まだ肯く機能しか作ってないです('-'*)

syonago bot

湘南ゴールド言葉狩りbot
湘南ゴールド情報を垂れ流します。

まとめ

IRC、普通に運用ツールとして便利なので楽しいですね!
つかikachan大活躍。やばい。
まだまだやりたいことあるので暇な時にちょいちょいいじりたいと思います。
また「他にもこんな使い方あるよ!」っていうことがあれば教えてください><