最近バタバタしていて、ゆっくりブログを書くこともできてなかったさんぺいです。どうもこんにちは。
まだ忙しいのは続いてるんですが、困ってそうな人がいそうなネタだったので急いで書いてます。誤字あったらごぬんなさい。
ZabbixのアラームをSLACKで受け取る
作業手順はまた別途記事にしたいとおもってますが、取り急ぎ書きたいのは「ZabbixアラームをSlackに表示させるときのアイコン設定はSlack側でやるんだよ」という点。
僕はこれで数日悩みました。
ざびっくす?すらっく?なんだそれお前何言ってんの?という風にお思いの方もいらっしゃるやも知れませんのでザックリと書いておきますと
●ZABBIX(ざびっくす) ネットワーク機器の状態監視用アプリケーション。フリー。
●SLACK(すらっく) ビジネスユーザー向けチャットアプリ。フリー。
です。前者は入金ありましたよー、とか来月の引き落としは5日ですよー、とか通知してくれるサービスのネットワーク機器版。後者はビジネスで使うLINEみたいなものです。
で、本題・ZABBIXアラームのアイコンの変え方です
いきなり本題に入りますが、昨年あたりから、ZABBIXで出たアラーム詳細をSLACKで受け取ることができるようになっていました。
そもそも数年前からできる状態にはあったのですが、準備が面倒だったようで、あまり積極的には連携運用されていなかったようです。
それが昨年のZabbix4.4のリリース時にあらためてドキュメント化されて、設定個所も少なく、手軽に連携ができるようになったようです。
■公式の説明ページ(英語)
■あぱーブログさんの丁寧解説記事
上記ページの説明で十分連携はできるのですが、通知内容はこういうものでした
上記はテスト実行で表示されたもの。{ALERT~}の箇所に実際に出たアラームの内容がでるようになるんですが、気になったのは左端のアイコン。
これって未指定時のものなんですが、いまいちですよね(これはSLACK側のユーザ追加APPのDefaultのアイコンのようです)
どうせならオリジナリティを出したいですよね、ということで自分で設定したアイコンを表示させようと、いろいろ試していました。
試したこと:通知用スクリプトに絵文字を指定→失敗
もともと連携させるためには、通知元のZABBIXに通知用スクリプトをいれなくてはいけませんでした。
var req = new CurlHttpRequest();
req.AddHeader('Content-Type: application/x-www-form-urlencoded');
Zabbix.Log(4, 'webhook request value='+value);
req.Post(
'https://hooks.slack.com/services/****',
'payload='+value
);
Zabbix.Log(4, 'response code: '+req.Status());
return JSON.stringify({
'tags': {
'endpoint': 'slack'
}
});
↑これをZABBIX側に登録して、アラームをトリガーとしてSLACKの特定のチャンネルに通知を出す、というものでした。
で、たぶんWEBで上辺だけ見てよく調べなかったからなのでしょう、このスクリプト内でアイコンを指定しないとだめだと思い込んでいたんです。
具体的に言えば中間ほどにある
'payload='+value
の箇所。ZabbixからSlackへデータを送る(Postする)部分なので、追記するならここだろう、と思い込んでいたんです。
いくらやってもできない
思い込みっていうのは危険ですよね。こうだと思ったら他の可能性をはじいちゃいますからね。
いろいろやりました。英文がダメなんじゃないか、括弧が良くないんじゃないか、足す位置が悪いんじゃないか、と。
ダメな状態での症状としては、2つありました。
①ZABBIX側からエラーが返る
これはまぁ文法の間違いとかで出るので理解はできる
②ZABBIX側からは正常送信したとの表示だが、SLACK側では受信なし。
これには悩まされた。ZABBIXは問題ないよと言っているし、何より「レスポンス」欄を見ても正常な反応をSLACK側が返しているわけだから。なのに表示されない。
今日やってだめなら仕方ない諦めるか、と思いつつあらためてドキュメントをみていたところ、この文が目に付く。
●出典元:
●先生による和訳:
Incoming Webhooksを使用してメッセージを投稿する場合、デフォルトのチャネル(アプリをインストールしたユーザーが選択)、ユーザー名、またはアイコンをオーバーライドすることはできません。代わりに、これらの値は常に関連するSlackアプリの構成から継承されます。
ま、まさか・・・
ここにアイコン設定箇所がありました
設定ページへの行き方
①SLACK-APIのページを開く https://api.slack.com/apps
②ログインし、連携用に作ったAPIのページを開く
(連携設定には必ず設定するので1つはあるはず)
③ページの下までスクロールさせると設定箇所が出てくる。
500~2000pxの正方形でないと怒られるので注意して。
で、設定した状態がこれ
そしてZabbixからテストを実行して出た結果がこれ。
●Before
●After
※不思議なことに当日分は古いアイコンのままなのに過去の分は新しいアイコンになっている。まぁいいけど。
まとめ
ZABBIX-SLACK連携のアイコン変更は、ZABBIX側とみせかけて、受け取るSlack側でのAPI設定によるものだった。
WEB上の過去のドキュメントだとZabbix側でできそうなことが書いてるかもしれないが、2020年現在はSLACK-API側での設定になります。
たぶんSlack側での変更によるものでしょう。
以上、最後までお付き合いいただきありがとうございました。何かの役に立てれば幸いです。
追伸、ちょっとアイコンを変えました
あまりにサイトのアイコンと似ていたので作り変えました。
はい。Zabbixらしく赤地に白文字でZを置いてみました。公式で出してそうな雰囲気すら漂ってますがオリジナルです。
ちなみに作り方は
①EXCELを開く
②縦横を同じ長さにする(最近のEXCELは幅を広げようと長押しするとピクセル数を表示してくれる)
③図形から楕円を選択し、罫線をガイドにしながら配置する
④図形が固まったら中に文字を入れる。必要に応じて「図形の書式設定」→「文字のオプション」→「テキストボックス」で「テキストから図形をはみ出して表示する」を指定
⑤色を指定して出来上がり。あとはウィンドウごと画像にして画像処理系のソフトでトリミングするだけ。なお僕は「PAINT.NET」を使ってます。
こんな感じ↓
アイコンはいろんな作り方があるでしょうから、方法の1つとして流してください。