net.tcp.portとnet.tcp.serviceの違いについて

Zabbixでの監視について検証を行っています。
タイトルの件についてですが、Zabbixにおけるサービス監視(net.tcp.service)とポート監視(net.tcp.port)の違いを教えてください。

私の個人的な認識は下記のイメージを持っていました。
・サービス監視(net.tcp.service):監視対象のプロトコルを用いた通信の結果となるステータスコードを判定
   例:http監視の場合、Zabbix→監視対象 ステータスコード:200 かどうかを判断

・ポート監視(net.tcp.port):監視対象に対するTCPのListen状態を判定(TCP 3ハンドシェークができるかどうか)
   例:80番ポート監視の場合、Zabbix→監視対象 3ハンドシェークが成立するかどうかを判断

下記環境において、監視対象となるサーバAのパケットキャプチャの結果、差異がない状態でした。

Zabbixサーバ:バージョン2.0
監視対象サーバA:IPをa.a.a.aと仮定

・サービス監視設定の検証
ホスト:監視対象サーバA
タイプ:シンプルチェック
キーnet.tcp.service[http,,80]

・ポート監視設定の検証
ホスト:Zabbix Server
タイプ:Zabbixエージェント
キー:net.tcp.port[a.a.a.a,80]

 ※監視対象サーバに対するZabbixエージェントはインストールしない前提のため、
  Zabbixサーバにあるエージェント経由での監視を想定しています。

なお、サービス監視とポート監視の違いとしては、Listen状態だがサーバ高負荷な状態に陥った際に
サービス監視により検知することを目的としています。

このため、サービス監視とポート監視の違いを教えていただけると助かります。
また、私の認識であるステータスコードの結果を判定する監視設定はどのようなものがありますか?
 (httpはWebのシナリオを使うということがわかっていますが、SMTPやFTPといった他プロトコルでは
  監視方法がわかりません。)

よろしくお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。

広瀬です

net.tcp.portは「指定されたポート番号に対するTCP接続の可否」
net.tcp.serviceは「サービスが稼働中でTCP接続を受け入れるかどうかのチェック」

なかなか玉虫色な表現ですが、前者の場合の致命的な問題はプロセスがハングしているかどうかまでは
判別は出来ない所にあったハズです。逆に後者はハング時にはエラーを返し場合もあるはずです。

 ※ちょっとこの辺は定かでは無いですが・・・

少なくとも、Zabbixエージェントタイプのnet.tcp.serviceで25番ポートを叩くと、相手がPostfixだった場合
ですが、maillogにアクセスが残ります。
先に記載した通り、「TCP接続の可否」か「TCP接続を受け入れ」のいずれかを0/1判定するだけなの
で、それより上位のステータスコード(HTTPなら200とか、SMTPなら250とか)は、完全に応答を含んだ
結果の中身(要するにアプリケーション通信ヘッダー情報)なので、それらを取得する為には使えません。

※注意点
  Ver2.0からnet.tcp.serviceはシンプルチェック、及びZabbixエージェントタイプの双方でアイテムキーが
  存在します。それぞれで処理、判定基準が違うと思われます。但し、ステータスコード云々はどちらも対
  応はしなかったと思います(逆にnet.tcp.portはエージェントタイプ)。

HTTPの場合はWebシナリオではなく、web.page.get/web.page.regexpを使えば、指定したファイルの
中身を取得返すので、200を待たなくても良いはずです(どちらかと言えば、指定ページの文字列返す判定なら
regexpの方がベターか?)。
これ以外でSTMP/FTPなどのステータスを取得する方法は、UserParameterか、Sender利用でないと、
実現は不可能だと思います(MySQLならデータベースモニタで代用も可)。

ユーザー donky の写真

広瀬様

リプライをありがとうございます。
net.tcp.serviceの「TCP接続を受け入れ」の具合がまだ理解できていない状況ですが、
なんとなく感触をつかみました。

最初に触ったZabbixが2.0のため、エージェントタイプのnet.tcp.serviceがあることを見落としていました。
再度動作検証を行ってみたいと思います。