やりたい事は、AWSとデーセンター間をVPN接続しているのですが、VPNの
コネクションが切れた場合に気が付かない事が多い、通信が切り替わるまでに
10分程度の時間を要する。万が一通信中だった場合にはメンテが必要なので
コネクションが切れた事を把握したい。
■前提条件
AWS CLIを実行できるWindowsもしくはLinuxをまず準備する必要があります。
今回は既存環境のWindows2008R2でCLIを実行できるのでWindowsで実行して
ログをZabbixに監視させて判定(トリガー)するようにしました。
参考ページ:Amazon VPCでVPNコネクションの状態をAPI監視する
http://dev.classmethod.jp/etc/amazon-vpc-vpn-connection-checker/
■AWS CLIのVPNコネクション状態確認コマンド
describe-vpn-connections
これのコマンドを使用しますが、単純に実行すると応答として長々とした
XMLが表示される。これからVPNコネクションだけをピックアップして監視
するには・・・・
XMLの出力から UPもしくはDOWNがステータスとして表示されるようなので
UPが2個(行)なら正常 1個なら警告 0個なら障害と判断できそうです。
[XMLの出力例]
cgw-XXX00XXX available ipsec.1 vpn-XXX87XXX vgw-XXX2eXXX
OPTIONS True
ROUTES 10.28.0.0/16 available
ROUTES 172.28.0.0/16 available
VGWTELEMETRY 2 2015-12-19T07:36:43.000Z XXX.XXX.XXX.29 UP None
VGWTELEMETRY 2 2015-12-19T08:24:03.000Z XXX.XXX.XXX.39 UP None
■AWS CLIとDOSコマンドを組み合わせて一行実行
aws ec2 describe-vpn-connections > 一時ファイル名 & find /C “UP” < 一時ファイル名 > 結果ファイル名
みたいなコマンドを実行すると結果ファイル名にはUPを含む行の行数がカウントされます
find /C “UP” のfindはとても便利な機能です この場合は /C “文字列”を含む行数を返してくれます
ちなみにfind /V /C “文字列”を指定すると”文字列”を含まない行数を返してくれます。
■Zabbixでのログ監視を設定する
今回、コマンドを実行するWindows2008R2はZabbixエージェントがインストールされていますので
タイプ:Zabbixエージェント(アクティブ)
キー:log[C:LOGAWS_VPN_CHECK.txt]
データ型:ログ
この内容でログ情報(数字)が取得できるか確認!! 問題なく取得できていればいいのですが
■Zabbixで異常判定(トリガー)を設定する
条件式はビルダーがあるので説明の必要はないかもしれませんが
{XXX.XXX.XXX.XXX:log[C:LOGAWS_VPN_CHECK.txt].last()}UPが2以下になった場合は警告(異常)としてメールなりの通知を行うように設定しました。
■こんな仕組みです
EC2(Windows)→”AWS-API”→AWS Find /C “UP” UPが含む行数を取得(正常時2行)
│
[Result]
│
ZabbixAgent(log[C:LOGAWS_VPN_CHECK.txt])
│
ZabbixManager(log[C:LOGAWS_VPN_CHECK.txt].last()} │
メール通知
■ちなみLinuxならこんなコマンドで
・a.txtから「検索文字列」が含まれる行を抽出し、b.txtに保存する
sed -n ‘/検索文字列/p’ a.txt > b.txt
・a.txtから「検索文字列」が含まれない行を抽出し、b.txtに保存する
sed ‘/検索文字列/d’ a.txt > b.txt