先日よりSmokePingを使って社内のネットワークとホストの状況を記録しています。そんな中、ホストが止まったときなどの警告メールの設定について調べましたのでメモしておきます。アラートの設定については先人の方々が解説してくれていますので詳しくは述べません。うちでは
+loss type = loss pattern = ==0%,>10%,>0%
と、lossがまずは0%の通常の状態から10%を超えるロスが発生し、さらに0%を超えたらアラートを発生するよう計画しました。
まずは*** Alerts ***セクションの設定ですがこちらのマニュアルを参考。
いろいろと試して気づいたのですがグローバルのto指定は必須となります。下記のように個々のアラートパターンの設定内にtoを設定でき、それぞれのアラートパターンでメールの送信先を変更できるのですが、アラートが発生したときグローバルのtoと個々のto両方にメールが送信されます。例えば、
*** Alerts *** to = root@localhost +loss1 to = mail1@localhost +loss2 to = mail2@localhost
と設定していて、loss2が発生するとroot@localhostとmail2@localhostの両方にメールが送信されるという具合です。
グローバルのtoを設定していないと、SmokePing起動時に
ERROR: /etc/smokeping/config (Alerts): mandatory variable 'to' not defined
とエラーでSmokePingが実行できませんので注意が必要です。
個々のアラートパターンで設定したtoにそれぞれメールが届くようにして、アラート全部でメールが届くグローバルのメールアドレスは不要という運用は、上記のグローバルでのto設定が必須となっているので一見不可なのですがtoにパイプとコマンドを記述しメールではなくコマンドの実行も可能なことを利用して、
*** Alerts *** to = |/usr/bin/true
とすることで、グローバルのメール送信を設定しないことが可能でした。注意点としてtoに設定するコマンド文字列内に空白は不可のようです。パイプの後ろにスペースを入れた
to = | /usr/bin/true
はコマンド実行時にエラーとなります。恐らくtoを切り出すときに空白が区切り文字として扱われるからでしょう。
あとtoはカンマで複数のメールアドレスの指定も可能で、コマンド実行の併用もできます。以下のような感じですかね。
to = |/etc/smokeping/smtest.pl, root@localhost
マニュアルにもありますが、コマンド実行時に引数としてname-of-alert、target、loss-pattern、rtt-pattern、hostnameが渡されます。実際に/usr/share/smokeping/Smokepng.pmのだいたい1892行目あたりにある
exec $cmd,$_,$line,$loss,$rtt,$tree->{host};
が該当しています。
name-of-alertは上記conifgで設定した+loss2などの名前。targetはSmokePingのconfigで設定したグループとピリオドとホストで表記される名前。loss-pattern、rtt-patternはそれぞれ設定した検出パターンで具体的には
loss: 0%, 100%, 100%
rtt: 0ms, U, U
のような内容です。hostnameはconfigのhostに該当します。