読者です 読者をやめる 読者になる 読者になる

Zabbixが顔文字連発でslack通知

ウチのZabbiちゃんの面倒なところ・・・

メール通知が多すぎる!!!!

いや、実際に通知が飛んでいる数として1システムあたりで数えると1日に2~8通程度なんです。
しかし、うちのチームでは全システムの通知を受け取るようにしているので全部合わせると・・・100通ぐらい。。。
ひどいと200通いくかも。。。 そうなってくると大事な通知が埋もれたとかはよくある話で。。

でもすこしでも早く気付けるようにとメールのラベル付けを頑張ってみるものの、システムが増えたり、監視対象が増えたりするとその度にラベル付けを追加していくと・・・
ある日から面倒になってしまって放置してしまいます。。。

そしてまたたくさんメールが溜まってふりだしに戻る・・・という悪循環。
そして何かのはずみでZabbiちゃんが暴走した時には・・・
メールの嵐でメールサーバが遅延して業務メール受信にも支障が・・・。。。。

嗚呼、無情。。

そこで最近知ったslackさん。
チャットツールだけど、Zabbixの通知を受けられるよ!
通知時にチャネルを指定してあげればチャットルームを分けて通知を投稿するよ!!

これやあああああああああ!!!!!!!!!!!!

ということでちょっとやってみた

まず、参考にしたのはここ。
ここからshell scriptをいただいてきて・・・

https://github.com/ericoc/zabbix-slack-alertscript/blob/master/slack.sh

せっかくだから勉強がてらrubyで書きなおしちゃおう♪
スクリプトのソースのコメントを参考に変数を設定。

第1引数がユーザ名かチャネル、第2引数がタイトル、第3引数が通知本文ね・・・
Zabbixのメディアでslack用メディアを作成して通知を飛ばすときにZabbix側でチャネルを指定する方式です。
※readme見てね

第1引数をチャネルにして、システム毎にチャネル設定をしたらラベル付地獄から解放される!!
そして、絵文字も指定して投稿できる!

PROBLEMだとf:id:naotinn74:20150809214601j:plain
RECOVERYだとf:id:naotinn74:20150809214629j:plain
どっちでもない場合はf:id:naotinn74:20150809214649j:plain
わー、かわいいーーーこれなら通知内容もわかりやすくていいじゃなーい!!!

・・・これ、全部おばけになるやんかっΣ(ノ≧ڡ≦)

えーと、メール通知時にタイトルだけでもある程度見分けやすいようにタイトルは以下の様にしています。

[障害LvX] <システム名> <ホスト名> - <エラー内容>発生or復旧

<エラー内容>部分には「CPU使用率閾値超過」とか「ネットワーク接続障害」、「サービス障害」、「障害ログ」などといった言葉が入ります。
なので書き換え。 そして、「発生」が全部同じ顔だと結局メールの時と変わらなさそうなので障害レベルごとに顔も変更。 条件分岐がたくさんになるからcase文で書き換えて・・・

レベル毎にこんな絵文字になります。わかりやすいでしょー♪
f:id:naotinn74:20150809215916j:plain

ここまでできたら後はテストー♪
飛ぶかな飛ぶかなー♪

飛んでくるのと飛んでこないのとがある・・・

何・・・故。。。。orz

そしてとりあえずrubyで書くのは諦めた

動かすほうが先じゃー!と気を取り直してshell scriptで書き直し・・・
そしてshell scriptでもやっぱり飛ばない。。。

はじめは本文の長さか・・・?と試行錯誤したのですが長くても飛んでくるものもあり、よくわからん。。。となり。。
スクリプト内でログを吐くようにしてみると・・・飛んでこないメッセージがあった時のログにこんな内容が。。

 Payload was not valid JSON

ちゃんと飛んでくるメッセージもあるので、スクリプトの表記ではなく本文中の文字列の問題ぽい。
とりあえずsedで怪しい文字をエスケープしまくる。。。
が、それでも飛ばない。。。

大体の本文内容はこんなかんじで飛ばしてます。

サーバ情報
ホスト名   : web01.aaa.com
IPアドレス : 172.xxx.xxx.xxx
深刻度     : High

Zabbix情報
トリガー   : ICMP ping is unreachable
現在の値   : Down (0)

監視サーバからの疎通確認が行えませんでした。
意図的なサーバ再起動などではない場合、ホストへの接続確認を行ってください。

通知内容によっては確認手順を書いていたりもします。
ここを削るのはせっかく頑張って設定したのにちょっとユーザビリティが落ちる。。
なので、ここは譲れない。。。

絶対日本語で飛ばしてやる・・・

本文の「:」・・・こやつか??
いや、エスケープしたはず・・・
コロンか?コロンなのか???
かわいい名前をしてるくせにっ!!
お菓子だとおいしいくせにっ!!

なんかこんなのみつけた。

Remember The Time: [JSON] コロンのエスケープ

とりあえずおまじないで入れる。

まだ飛ばないorz

※いや、飛ぶメッセージは飛ぶんです。。。。飛ばないのがいるのが問題で。。。
このへんから頭のなかで「あーぶくだったー煮え立ったー」の歌が頭のなかをグルグルしだします。
これか??とやって、飛ばしてみて・・・
「まだ飛ばない」(「まだ煮えない」の音階で)

最終的にオトシマエをつける

最終的に本文の変数に入った文字を吐き出してcat -Aで見るとなんかキモチワルイ感じ。
空白部分になんかいろいろ入ってて改行コードが色々混じってる・・・??
というわけで、一旦tmpファイルに変数内容を吐き出して、awkで処理。
大体の行が<種別><コロン><中身>なので3つめまでをメッセージ用変数に入れなおす。

飛んだ!!!!!!!!!!!!!

クララが飛んだ!クララが飛んだよー!!!!!!!!!

というわけで、できましたー!
ソースはなんか恥ずかしいので。。。///
リクエストがあったら・・・。。
でも↑に書いてる内容でだいたいの改修ポイントわかりますよねー