デフォルトでは対応していない
監視対象のホストからpingを送りたい
背景:
LinuxベースのVPNルーター strongSwan構築したのですが、ipsecでルーター間VPNを張った際に遠隔のルーター側でNATをかけた際のアドレス宛に疎通監視の為に、strongSwanからping監視をしたい。
シンプルチェック icmpping
シンプルチェックと有る通り、zabbix-agentが関わらない監視です。
pingの送信元がZABBIXサーバーになり、pingを送信します。
アイテム設定の際にキーとしてicmppingとだけ設定すると、アイテムを設定したホスト宛の監視になります。
icmpping[1.1.1.1]の様に設定するとZABBIXサーバーから1.1.1.1宛ping監視になり、結果がアイテムを設定したホストの最新データに表示されます。
それで当然VPNの疎通先はZABBIXサーバーからは見えないので、直接pingは打てません。
UserParameterを使う
pingの挙動確認
cオプションで1を指定すると1回だけping送信します。
-wオプションでタイムアウトを1秒に設定します。
標準出力やエラーを/dev/nullにリダイレクトして捨てます。(何も出力されない)
セミコロンで次のコマンドに繋いで、echo $?でpingの戻り値を出力しています。ping応答有りで0, 応答なしで2を返します。
UserParameterに設定する
ping送信元にしたいホストのzabbix_agentd.confに設定してからagentを再起動します。
zabbix-getで確認する
ホストにアイテムを追加する
名前:ping test from remote
タイプ:Zabbixエージェント
キー:remote.ping[8.8.8.8]
データ型:数値(整数)
監視間隔:1m (任意)
※テストで8.8.8.8宛にping設定しています。
tcpdumpで確認する
確かに監視対象のホストから8.8.8.8にpingが飛んでいる事が分かります。
値のマッピングの設定をする
ping応答有りの場合0, 無しで2なので分かりにくいので値のマッピングの設定をホストで行います。
=0の場合 OK, >=1 (1以上の場合) Downとします。
アイテムで値のマッピングを選択します。
データ確認
OK (0) としてデータが取れています。
トリガーを設定する
名前:ping down: test from host
深刻度:(任意)
条件式:last(/<host>/remote.ping[8.8.8.8])>=1
1以上の値が返ってきたら障害とします。
トリガーの動作テスト
監視対象を一時的に8.8.8.8から1.2.3.4に変更するとping不通で障害になります。
8.8.8.8に戻すと解決します。
レスポンスタイムを測定するUserParameter
UserParameter=remote.ping.time[*],/usr/bin/ping -c 1 -w 1 $1 | grep from | awk ‘{ print $$7 }’ | cut -c 6-
awkの部分の$が2個必要な点に注意して下さい。
データ型:整数(浮動少数)
単位:ms
zabbix-getでデータ取得を確認
デフォルトでも実装してほしい機能
監視対象から更に別の対象へのping監視は、需要は有ると思うのですが。
なぜデフォルトで実装されていないのか不思議です。
でもUserParameterを使うと簡単に実装できます。
今回は実際はstrongSwanをLLD(ローレベルディスカバリ)で監視して、ipsec疎通先を自動でping監視に加える設定を行いました。
ルーター間VPNの接続先が増えても自動でping監視に加えてくれます。
監視を充実させましょう。