AWS CLIとZabbixでAWS-VPCのVPN接続を常時監視する方法(簡略版)備忘録

やりたい事は、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

タイトルとURLをコピーしました