
サーバー上の開いている/確立された TCP/IP 接続の数を Monit で監視して、開いている接続が「多すぎる」場合にアラートを送信する方法がわかりません。これをどのように設定すればよいかご存知ですか?
答え1
ここに別の解決策があります
次の構成モニターを定義します:
check program OpenSocket with path "/bin/checkn_socket.sh"
if status > 0 then alert
group admin
スクリプト: checkn_socket.sh
#!/bin/bash
Threshold=4 # Set Threshold
TotalEstSocket=$(netstat -t | awk '{/ESTABLISHED/ && n++} END{ print n }')
if (( TotalEstSocket >= Threshold ))
then
echo >&2 "Too Many OpenSocket"
exit $TotalEstSocket
else
exit 0
fi
ログを監視する
[IST Sep 12 22:32:14] error : 'OpenSocket' status failed (4) for /bin/checkn_socket.sh. Error: Too Many OpenSocket
..
[IST Sep 12 22:32:17] info : 'OpenSocket' status succeeded
[IST Sep 12 22:32:26] error : 'OpenSocket' status failed (4) for /bin/checkn_socket.sh. Error: Too Many OpenSocket
..
[IST Sep 12 22:32:29] error : 'OpenSocket' status failed (4) for /bin/checkn_socket.sh. Error: Too Many OpenSocket
..
[IST Sep 12 22:32:32] error : 'OpenSocket' status failed (4) for /bin/checkn_socket.sh. Error: Too Many OpenSocket
..
[IST Sep 12 22:32:35] info : 'OpenSocket' status succeeded
答え2
直接サポートされているようには思えませんが、ハックを思いつきました。
毎分確立された接続の数を判定し、同数のゼロ バイトを含むファイルを書き込みます。
次に、このゼロ ファイルのファイル サイズをチェックするように Monit を設定します。サイズが「大きすぎる」場合は警告が表示されます。
あるユーザーの crontab では:
* * * * * /bin/sh -c '/bin/dd if=/dev/zero of=/tmp/tcp_connections.monit count=$(/bin/netstat -t | /bin/grep ESTABLISHED | /usr/bin/wc -l) bs=1 >/dev/null 2>&1'
Monit 構成の場合:
check file tcp_connections with path /tmp/tcp_connections.monit
if size > 16KB then alert