コマンドラインでのnet.tcp.service[tcp,,**]動作が不自然
広瀬(若)です
アクション設定を済ませ、メール通知出来るかどうかのテストを
していましたら、net.tcp.service[tcp,,**]の動作が微妙におか
しい状況にぶち当たりました。
1、Postfix停止前の状態。
# zabbix_agent -t 'net.tcp.service[tcp,,smtp]'
net.tcp.service[tcp,,smtp] [u|1]
# zabbix_agent -t 'net.tcp.service[tcp,,25]'
net.tcp.service[tcp,,25] [u|1]
・・・通常通りに正常です。直にPort番号でもニーモニックでもOK。
2、Postfix停止させます
[root@www ~]# /etc/init.d/postfix stop
postfix を停止中: [ OK ]
3、再度コマンドラインで確認すると・・・
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,25]'
net.tcp.service[tcp,,25] [u|0]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,smtp]'
net.tcp.service[tcp,,smtp] [u|1]
・・・上記の通りにPort番号指定とニーモニック指定で違いが出る
状況。tcp,,smtp以外の書式ではmaillogにエラー吐くため、ニー
モニック指定を優先させていました。
※tcp,,22のSSHでも同様で、単に[ssh]だけか、[tcp,,22]の場合、
/var/log/secureにエラーが吐かれるの為、デフォルトは[tcp,,ssh]を設定
さらに、[tcp,,http]を設定してあり、/etc/init.d/http stopを
実行させました。結果が以下の通り。
1,httpd停止前の状態。
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,http]'
net.tcp.service[tcp,,http] [u|1]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,ssh]'
net.tcp.service[tcp,,ssh] [u|1]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,smtp]'
net.tcp.service[tcp,,smtp] [u|1]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,22]'
net.tcp.service[tcp,,22] [u|1]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,25]'
net.tcp.service[tcp,,25] [u|1]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,80]'
net.tcp.service[tcp,,80] [u|1]
[root@www ~]#
[root@www ~]#
2、httpサービス停止
[root@www ~]# /etc/init.d/httpd stop
httpd を停止中: [ OK ]
[root@www ~]#
[root@www ~]#
3、コマンドラインで再度状況確認すると・・・
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,80]'
net.tcp.service[tcp,,80] [u|0]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,25]'
net.tcp.service[tcp,,25] [u|1]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,22]'
net.tcp.service[tcp,,22] [u|1]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,21]'
net.tcp.service[tcp,,21] [u|1]
[root@www ~]#
Port番号指定は、当然の状況ですが・・・
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,ftp]'
net.tcp.service[tcp,,ftp] [u|0]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,http]'
net.tcp.service[tcp,,http] [u|0]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,smtp]'
net.tcp.service[tcp,,smtp] [u|0]
[root@www ~]# zabbix_agent -t 'net.tcp.service[tcp,,ssh]'
net.tcp.service[tcp,,ssh] [u|0]
[root@www ~]#
ニーモニック指定の場合だと・・・!?
[root@www ~]# /etc/init.d/httpd start
httpd を起動中: [ OK ]
説明が悪く申し訳無いのですが、Webのフロントエンド上で、
net.tcp.service[tcp,,http]
net.tcp.service[tcp,,ssh]
net.tcp.service[tcp,,ftp]
net.tcp.service[tcp,,smtp]
4つの設定を仕掛け、トリガー/アクション設定を済ませた上で、
監視対象であるサーバのhttpdプロセスを落としたところ、落ちる
はずの無い、ssh、ftpがダウンしたという通知が出てきたので調
べてみたところ、上記のような結果になった訳です。
バグ・・・なのか微妙なラインですが、上記の件に関して何か情報があればご提供いただければ幸いです。
[root@www etc]# more /etc/redhat-release
CentOS release 5.4 (Final)
[root@www etc]# rpm -qa | grep zabbix
zabbix-agent-1.8.1-1.el5.JP
zabbix-1.8.1-1.el5.JP
以上です。よろしくお願いいたします。
TNK - 投稿数: 4730
ソースを見て確認しましたが、'net.tcp.service[tcp,,smtp]'という指定は誤りだと思います。
net.tcp.service[tcp,,smtp]は、net.tcp.service[tcp,,0]と同じことになってしまうと思います。
# ポート番号として atoi("smtp") の値を利用。
つまり、'net.tcp.service[tcp,,smtp]'では、smtpのチェックになっていません。
smtpのチェックを行いたいのであれば、
<code>
net.tcp.service[tcp,,25]
</code>
か
<code>
net.tcp.service[smtp]
</code>
のどちらかになると思います。
ただし、どちらの方法もmaillogにメッセージが出力されます。
ソース上は、お行儀よくSMTPサーバに接続後QUITコマンドを送るようにしようと考えられてはいるようですが、現時点では、まだその機能はきちんと実装されていません。
該当ソース:
src/libs/zbxsysinfo/simple/simple.c
関数: CHECK_SERVICE()
src/libs/zbxsysinfo/common/net.c
関数: tcp_expect()
関数tcp_expect()内で、「request」が空であっても「sendtoclose」が指定されていれば、サーバ側に「sendtoclose」で指定された文字列を送出するようにすることで、「lost connection after CONNECT」というログは出なくなると思います。