Fortimail キュー件数監視

メーカー製品

はじめに

 先日、ファームのバグによってメール送信ができずキューに溜まって配送遅延してしまうという事象が発生した。死活やポート、さらにはサービス監視をしていたにも関わらずキューしていることに気づけなかった。また、Fortimailはヒストリログ(ポリシー動作を主に残す)を見がちで、リレーができてなかったなんてことはよくある見落としポイント。

環境

・Fortimailは3台冗長(configHAモード)
・Fortimailはメールゲートウェイで内部メールサーバが別にあり
・サービス監視はFortimail経由で内部メールサーバへ送信し、内部メールサーバから受信するという一連の動作を監視している
・メール送信時はMXで引けるIPとは別のIPを使って送信している(IPプール)

事象

・内部ドメイン宛ては問題無く配送されていた
・外部ドメイン宛てのみキューされる状態

理由はファームのバグで、サーバ再起動後IPプールのsmtpコネクションで不具合があるそう。
・解消方法1:configHAモードを解除(サポートからの案内)
・解消方法2:IPプール設定をやりかえる(サポートからの案内)
・解消方法3:約24時間で自然復旧(たまたまかもしれないが、自然復旧したので上記対応はしていない)

監視

 ここからが本題。まずイケてないのが、溜まっているキューの件数などをコマンドで確認することができないとのこと。GUIで監視はさすがにつらい。。。が、snmpだと件数は表示できる!!

Fortimailのキューについて(その他タイプもあるが代表的なもののみを抜粋)
・タイプ「デフォルト」:最初にキューイングされるとこのタイプになる
・タイプ「遅延」:3回以上リトライ送信に失敗するとこのタイプになる

つまり、「デフォルト」で溜まっているキュー件数+「遅延」で溜まっているキュー件数がトータルとなる。OIDは以下

タイプ「デフォルト
.1.3.6.1.4.1.12356.105.1.103.2.1.3.1

タイプ「遅延
.1.3.6.1.4.1.12356.105.1.103.2.1.3.2

※2023/5追記
loopback_interfaceを利用するようになってから、98%が「受信遅延」と「送信遅延」に溜まるように変わったため、追加。

タイプ「受信遅延
.1.3.6.1.4.1.12356.105.1.103.2.1.3.4

タイプ「送信遅延
.1.3.6.1.4.1.12356.105.1.103.2.1.3.6

件数を取得する簡易shellスクリプトは下記に備忘として残しておく。
あとは監視サーバ側で閾値を設けて、閾値を超えればアラートメールなどが飛ぶようにすればよい。

## setting
MAIL_SERVERS=(
  10.0.0.1
  10.0.0.2
  10.0.0.3
)

HOST_OID=.1.3.6.1.2.1.1.5
QUEUE_OID_DEFAULT=.1.3.6.1.4.1.12356.105.1.103.2.1.3.1
QUEUE_OID_DELAY=.1.3.6.1.4.1.12356.105.1.103.2.1.3.2
QUEUE_OID_RECV_DELAY=.1.3.6.1.4.1.12356.105.1.103.2.1.3.4
QUEUE_OID_SEND_DELAY=.1.3.6.1.4.1.12356.105.1.103.2.1.3.6

## queue check
for server in ${MAIL_SERVERS[@]}
do
    # hostnameの確認
    hostname=`snmpwalk -v1 -c public $server $HOST_OID | awk -F " " '{print $4}'`
    # defaultキューの数取得
    queue1=`snmpwalk -v1 -c public $server $QUEUE_OID_DEFAULT | awk -F " " '{print $4}'`
    # delayキューの数取得
    queue2=`snmpwalk -v1 -c public $server $QUEUE_OID_DELAY | awk -F " " '{print $4}'`
    # recv_delayキューの数取得
    queue3=`snmpwalk -v1 -c public $server $QUEUE_OID_RECV_DELAY | awk -F " " '{print $4}'`
    # send_delayキューの数取得
    queue4=`snmpwalk -v1 -c public $server $QUEUE_OID_SEND_DELAY | awk -F " " '{print $4}'`
    # totalキュー算出
    total_queue=$(($queue1 + $queue2 + $queue3 + $queue4))

    # 監視サービスへのtotalキュー連携(ご自身の環境に合わせてください)
    hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge
done

おわりに

 以上で、キュー監視の仕組みは終わり。サービス監視までしてるのに、気づけなかったのはホント辛かった。監視の仕組みは至ってシンプルだけど、fortimailの情報ってインターネット上に全然無いのでいつも困っているので、そんな自分と同じ境遇の人の役に立てば幸い。
 ちなみに、この話には続きがあってファームアップすると別のバグ(仕様変更)を踏むという。あーいやだいやだ。

コメント