ZABBIXに手の届かない所は無い expectで...
渡邉 隼人
改めまして
池田さん
ご出版おめでとうございます!
(拍手)
Zabbix統合監視徹底活用
複雑化・大規模化する
インフラの一元管理
大容量で
¥ 3,780
大好評発売中!
なんと! 池田先生の第1号サイン頂きました!
度々 池田さんの所有物に勘違いされます
改まして
ZABBIXに手の届かない所は無い expectで...
●
渡邉 隼人 (わたなべ はやと)
●
TwitterID: @_BSmile_
●
2児の父
●
アクアリウム(水槽いじり)やってます
●
株式会社 アーベルソフト
設立:1984年8月20日
本社:埼玉県坂戸市芦山町22-13
従業員:約40名
従業員は道産子が多いです
かく言う私も道産子です
本題。
ZABBIX運用環境をお話します
とあるお客様環境で
プライベートクラウド構築を行っており
SaaS・IaaSサーバ監視
Switch/UTM/Storage等等
約220台のホスト監視を行っています。
突然ですが
運用監視を行っていて、次の事案が発生しました。
(専用線で接続しているオフショア、中国の問題)
Private Cloud 社内ネットワーク担当部門
プロバイダオフショアネットワーク
中国から
専用線接続で
日本の
開発サーバを使用し
日々業務をこなしている
プロジェクトがあります
ここに接続
この人が
Private Cloud 社内ネットワーク担当部門
プロバイダオフショアネットワーク
中国から
専用線接続で
日本の
開発サーバを使用し
日々業務をこなしている
プロジェクトがあります
ここに接続
この人が
どこかでネットワークが切れた!
プロバイダからの連絡は無い!
社内ネットワーク担当者は
打ち合わせで居ない!
オフショアの開発者は
試験環境への接続を失った!
途方に暮れるオフショアユーザ!
オチから言うと
ビル停電によりオフショアルータの設定が
ロストした
↓
Ciscoルータのstartup-configに
設定入れて無かった
頼みますよプロバイダさん(涙)
こうなったら
各担当者から連絡が来る前に
こちらから報知してやろう
と思いたち
オフショアルータのGWへPingを飛ばしたかった
が
FW(Fortigate) からしかPingが飛ばない環境
そこで expect ですよ
スクリプト作成時、対話形式で実行が可能なコマンド
例) Y/Nの問いが多いパッケージソフトの設定を自
動で実行させる
[expect]とは...
#!/usr/bin/expect -f
spawn $INSTALLER --platform-override
expect "Do you agree with the terms of the software license agreement?"
send "yn"
expect "Install zimbra-ldap"
send "n"
expect "Install zimbra-logger"
send "n"
※zimbraメールサーバ自動インストールの冒頭
Private Cloud 社内ネットワーク担当部門
プロバイダオフショアネットワーク
オフショアネットワーク
監視が可能な
FW(Fortigate)から
Pingで監視を行い
パケロス発生時の
ログをzabbixが拾う
expect
設定はたった7項目!
ちゃちゃっと10秒で説明!
●
/etc/zabbix/externalscripts/lan_ping.sh
(1/7)ZABBIX外部スクリプトへの仕込み
#! /bin/bash
LOG_TEMP=$2
PJ_NAME=$3
PACKET_LIMIT=$4
if [ -e $LOG_TEMP ]; then
rm -rf $LOG_TEMP
fi
/etc/zabbix/externalscripts/forti_ping.sh $1 $LOG_TEMP
PACKETLOSS_STR=`grep "received, " $LOG_TEMP | awk -F 'received, ' '{print $NF}' | cut -d "%" -f1`
PACKETLOSS=$(( PACKETLOSS_STR + 0))
if [ $(( PACKETLOSS )) -gt 30 ]; then
echo "[`date +"%Y/%m/%d %H:%M:%S"`] Caution: Location [$PJ_NAME] $1 `grep " packet loss"
$LOG_TEMP`" >> /var/log/zabbix/forti_ping.log
fi
if [ -e $LOG_TEMP ]; then
rm -rf $LOG_TEMP
fi
●
/etc/zabbix/externalscripts/forti_ping.sh
(2/7)ZABBIX外部スクリプトへの仕込み
#!/usr/bin/expect -f
set host [lindex $argv 0]
set path [lindex $argv 1]
log_file "$path"
spawn ssh -l pinger XXX.XXX.XXX.1 ## 相手先GW
expect "password:"
send "fortipasswordn"
expect "fortiHostName $"
send "execute ping-options repeat-count 5n"
send "execute ping $hostn"
send "exitn"
expect "VPEXFW001 $"
interact
(3/7)ホスト設定(ロケーション設定側)
Gateway
IPアドレス
監視する
ロケーション名
テンポラリ
ログファイル名
(4/7)アイテム設定(ロケーション設定側)
[ キー設定 ]
lan_ping.sh[“{HOST.CONN}”,”/etc/zabbix/log_tmp/{HOST.DNS}.log”,”{HOST.NAME}”]
(5/7)アイテム設定(ZABBIX-Server側)
[ タイプ ]
Zabbixエージェント(アクティブ)
[ キー ]
Log[/var/log/zabbix/forti_ping.log,Caution]
(6/7)トリガー設定(ZABBIX-Server側)
[ 条件式 ]
{Zabbixホスト:log[/var/log/zabbix/forti_ping.log,Caution].str(Caution)}=1
(7/7)アクション設定
[ アクションの実行条件 ]
トリガー名 含まれる ”Loation packet loss Check Failed”
飛んでくるメール
件名:【重要】【ZABBIX】ロケーション:Location Packet loss Check Failed
本文:
深刻度: PROBLEM
発生日時:2014.04.07 23:23:44
--
[2014/04/07 23:22:49] Caution: Location [PJ105L1_
【中国】マインスイーパー開発プロジェクト] 10.1.2.22 5 packets transmitted,
2 packets received, 60% packet loss
簡単ですね。
ZABBIXに実施させる事でのメリット
1 . 監視する方法が散在しない
2 . 拾った情報をメール送信する手間が少ない
3 . 一度流れを組んでしまえば、オフショアロケーションが
  複数発生した場合でも追加が容易
  (ホストの複製をし、監視するロケーションを編集する
  だけで良い)
特に3番が重要で
設定を簡易化した事によるオペレータへの
引き継ぎが非常に楽
こんな事やってたら
約70台のSaaSサーバのindex.htmlを
ZABBIX使って一括改修してくれという
依頼が来ました(汗)
まぁやりましたけどね。
ZABBIXに手の届かない所は無い expectで...
ZABBIXはできる子。
ご清聴ありがとうございました。
次回... ご要望ありましたらRasPi+ZABBIXで水槽管理

Zabbixに手の届かない所は無い expect