ホスト・サービス・ポートのステータス監視

4936 ワード

試してみる1:zabbixが持参したテンプレートnet.tcp.listen
モニタ項目を直接新規作成します.この方法では、/proc/net/tcpを直接読み取りますが、ポートステータスは取得されません.
具体的なソースコード(バージョン3.0.2):
# cd /home/zabbix/zabbix-3.0.2/src/libs/zbxsysinfo/linux
# cat net.c
 if (0 < (n = proc_read_tcp_listen("/proc/net/tcp", &buffer, &buffer_alloc)))
                {
                        ret = SYSINFO_RET_OK;

                        zbx_snprintf(pattern, sizeof(pattern), "%04X 00000000:0000 0A", (unsigned int)port);

                        if (NULL != strstr(buffer, pattern))
                        {
                                listen = 1;
                                goto out;
                        }
                }

ホスト側からポートを表示するのは正常listen
カーネルが頻繁に/proc/net/tcpというファイルを書くため、読み取りが正常ではありません.
 
試行2:ネイティブでスクリプトをカスタマイズする
#!/bin/sh
res=`/bin/netstat -an|grep $1|grep LISTEN|wc -l`
if [ "$res" -gt 0 ]
then
{  
  echo 1
}
else
{
  echo 0
}
fi

カスタムkey
UserParameter=jiankong,/etc/zabbix/scripts/netstat.sh 9170

agentを再起動したらproxy側でzabbix_get取得データは常に0
agentログには、スクリプトの実行権限がないことが常に求められます.
スクリプトは755に与えられ、zabbixユーザーの下で手動で実行された結果は正常に1ではなく、プロファイルでUnsafeUserParameters=1が定義されています.
 
試行3:proxy側でスクリプトをカスタマイズする
# cd /home/zabbix/zabbix-agent/etc/scripts
# cat check_port_status.sh
tcping -t 2  $1 $2 | awk '{print $4 }'|awk -F"." '{print $1}'

tcpingは非常に良いポートモニタリングツールですが、使用時に注意しなければなりません.必ず-tパラメータを持ってください.そうしないと、ポートが通じないと、ずっと待っている状態になります.また、-tの時間はzabbix_より小さくなければならないことに注意してください.get実行のタイムアウト時間(一般推奨設定<5 s)
カスタムkey値
# cd /home/zabbix/zabbix-agent/etc/zabbix_agentd.conf.d
# cat port_check.conf 
UserParameter=port.check[*],/home/zabbix/zabbix-agent/etc/scripts/check_port_status.sh $1 $2

マスター端のzabbix_を通過get実行取得結果正常
インタフェースにモニタリング項目を追加し、キー値を持ち込む
port.check[192.168.12.12,9170]

モニタ成功
この方法は、ネットワークが到達できる限り、任意のホストのポート情報をスクリプトで監視できます.