家の環境ではZabbixからslackへ通知送れたけど、学校の環境では通知を送れなかったのを解決できたのでメモ
症状
- slack通知が送れる環境と同様に実装したはずだが、通知を送れない
環境
- CentOS7 [user: root, centos]
- Zabbix3.0.5
- 学校環境ではProxy経由でWANに繋がっている
ゴール
- Zabbixからslackへアラートを送信する
本題
学校の環境にZabbixを入れてslackへ通知しよう!と思い通知スクリプトを実装
しかし、slack側には何も送られず、Zabbix側では「通知スクリプト実行したよ!」という表記だけ出てしまう
最初はSELinuxかなぁ?パーミッションかなぁ?とか思っていたけど、そもそもその場合はZabbix側でエラーがでる・・・
ということは、実行後にネットワーク部分でエラーがでているのでは?と考えてみた
とりあえず、どこでエラーがでているのか確認も含めて、スクリプト自体を実行することにした
【ユーザー: centos】
【ユーザー: (sudo -s) root】
centos側では問題なく実行出来ているものの、sudo -sしたrootではタイムアウトのエラーが出てしまっている
この状態でコネクションが張れてるか気になったので、今度はhttps://slack.com/に対してcurlをやってみた
【ユーザー: centos】
【ユーザー: (sudo -s) root】
すると、sudo -sしたroot側ではproxyに向けて通信を行っていなかった
centos側にはネットワーク設定にproxyを入れていたものの、/etc/profile.d/配下にproxy.shを作成してない為
sudo -sしたrootではproxyを経由せず通信していたのだ。
これを直せばZabbixから通知を送れるようになるんじゃねえか?!とか思い、/etc/profile.d/配下にproxy.shを作成
以下のような設定で内容を記述した
PROXY="ProxyIPアドレス:ポート番号" export http_proxy="http://$PROXY" export https_proxy="http://$PROXY" export ftp_proxy="http://$PROXY"
変更後、sudo -sし直してcurlをしたところ、ちゃんとProxyを経由して通信する事が出来た。
しかし、これではまだZabbixから通知を送信することは出来なかった。
そこで、Wiresharkを用いてパケットトレースをすることにした。(最初からやれ)
【直接スクリプトを叩いた場合】
【zabbixから実行した場合】
結果、直接スクリプトを叩いた場合はProxyを経由しているが、Zabbixから実行した場合はProxyを経由してない事がわかった。
ということは、通知スクリプト自体にproxy.shを読み込めば経由してくれるのではないか?!と思い、通知スクリプトの最初に以下を追記した。
source "/etc/profile.d/proxy.sh"
その結果、うまくslackへ通知する事ができた。