サービスの応答時間の計測について

お世話になります。

皆様のお力添えを頂戴したく、投稿させていただきます。

【相談事項】
・Zabbix標準機能でサービスの応答時間を計測することが可能か?可能な場合どのような設定が必要か?
・Zabbix標準機能でサービスの応答時間を計測できない場合、スクリプトなどを追加して実装することが可能か?

Zabbix2.2.11 でRHEL7xサーバのサービス疎通監視を実装したのですが、
上司より「サービスの応答時間をZabbixで計測してほしい」との要望を受けて
調査をしております。

サーバは複数あり、応答時間を計測したいサービスは smtp/pop/ldap/dns などです。

Zabbixを今年の2月に導入したのですが、導入前まではスクリプトを作成して
応答時間を計測していたとのことでした。

残念なことにスクリプトについてのドキュメントは無く、前任者も離職しているため
詳細がわからない状態です。。。

「net.tcp.service.perf[service,,]」であればサービスへのTCP接続にかかった時間を
取得できることはわかったのですが、あくまでサービスの応答時間を計測することが要件のため
マッチしておりませんでした。
その他いろいろと調べてみたのですが、解決に至っておりません。

お忙しいところ大変恐縮ですが、ご教示を賜りたく
お願いいたします。

コメント表示オプション

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

【相談事項】
・Zabbix標準機能でサービスの応答時間を計測することが可能か?可能な場合どのような設定が必要か?

サービスの応答時間の定義が不明確ですが、例えばSMTPならば、

 ・SMTPで接続して接続時の応答メッセージの取得まで
 ・さらにメールを送信し終わるまで

などとどこまでを求められているのかがわかりません。
POP3なら、

 ・POP3で接続して接続時の応答メッセージの取得まで
 ・さらにユーザ認証終了まで
 ・そして、さらにメールのリストを取得するまで

とかどこまででしょうか。

とはいえ、Zabbixの機能だけでは、各ポートへの簡単な接続しか試
行しませんので、SMTPやPOP3などの各プロトコルに合わせたより実
際の利用時のシーケンスに合わせた応答を行って応答時間を計測す
るような機能はありません。
Web監視の機能だけは、簡単なシーケンスを実行して監視できます。

・Zabbix標準機能でサービスの応答時間を計測できない場合、スクリプトなどを追加して実装することが可能か?

以前利用していたスクリプトが残っているのであれば、それを活用
して標準出力に応答時間の数値を出力するようにできれば、そのス
クリプトをZabbixから呼び出して、その数値を監視することができ
ます。

ユーザー FLAD の写真

TNK 様

コメントいただきましてありがとうございます。
また、ご連絡が遅れて申し訳ございません。

今既存のスクリプトの内容を確認しています。
応答時間の定義についてですが、以下となります。

SMTP:テストメールを送信完了まで
POP:POPサーバまでの認証完了まで
DNS:特定のドメインへの名前解決完了まで

1種類出来れば他も対応可能かと思い、ひとまずDNS確認用の既存スクリプトを流用して
応答時間が計測できるようzabbix管理画面上でアイテム作成を試行錯誤しているのですが、
応答時間の計測(responsetime.sh)とDNS確認用既存スクリプトを組み合わせた
アイテムの作成に苦慮しております。

お忙しいところ大変恐縮ですが、アイテムの作成につきまして
アドバイスいただけますでしょうか。

<現時点で出来ていること>----------------------------------

1) Zabbixサーバに既存のスクリプトを配置
  配置場所:/usr/lib/zabbix/externalscripts
→monitor_dns
→monitor_pop3
→monitor_smtp

2) 計測用のスクリプトを作成し、1)に配置
  スクリプト名:responsetime.sh
#!/bin/bash
(/usr/bin/time -f %e $1) 2>&1 1>/dev/null

3) 1)の場所で以下のコマンドを実行して時間が帰ってくることを確認
  $ ./responsetime.sh "/usr/lib/zabbix/externalscripts/monitor_dns <ドメイン名>"
  0.01
-----------------------------------------------------------

自分なりに調べて以下のキーを作成してみたのですが、「"DNS_SCRIPT_TEST": 間違った書式が"
{monitor_dns[,<ドメイン名>]}"付近に見つかりましたのアイテム"Responsetime_DNS"のキー
"responsetime.sh{monitor_dns[,<ドメイン名>]}"が正しくありません。」とエラーメッセージが出て
保存できませんでした。

responsetime.sh{monitor_dns[,<ドメイン名>]}

切り分けになるかと思い、キーを「monitor_dns[,<ドメイン名>]」に変更してみたところ
アイテムの保存ができ、「0(スクリプト内でOKと定義)」を取得することが出来ました。

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

ユーザー heya の写真

アイテムのキーの、パラメーターでない部分には { や} は使えません。
https://www.zabbix.com/documentation/2.2/jp/manual/config/items/item/key

これでどうでしょうか。
・responsetime.sh を /usr/lib/zabbix/externalscripts/ に置く
・アイテムのキーは responsetime.sh["monitor_dns ドメイン名"] とする

それでだめなら、さらに以下のどちらかをしてみたらどうでしょうか。
・monitor_dns の部分をフルパスで書く
・responsetime.sh の二行目に cd /usr/lib/zabbix/externalscripts/ という行を追加する

ユーザー FLAD の写真

heya 様

お世話になります。アドバイスいただきましてありがとうございます。
また、ご連絡が遅れ申し訳ございません。

1点修正事項がございました。
「monitor_dns <ドメイン名>」と記載しておりましたが、正しくは「monitor_dns <ドメイン名>」でした。
ここで言うIPアドレスは実行時に指定するDNSサーバのIPアドレスです。

ご教示いただきました内容を試してみたのですが、最新のデータの「情報」で×が出て値が取得できない状態でした。
×をクリックすると以下のメッセージが表示されており、念のため「/usr/bin/time」の存在を確認しましたが
timeはありました。

【エラーメッセージ】
Received value [/usr/bin/time: cannot run monitor_dns: No such file or directory0.00] is not suitable for value type [Numeric (f
※途中で切れておりました。

【/usr/binの確認】
# cd /usr/bin
# ls -al | grep time
-rwxr-xr-x. 1 root root 15920 Jan 28 2014 time

【/usr/lib/zabbix/externalscripts/の状態】
# cd /usr/lib/zabbix/externalscripts/
# ls -al
-rwxr-xr-x 1 root root 527 Dec 20 15:14 monitor_dns
-rwxr-xr-x 1 root root 55 May 18 15:36 responsetime.sh

ユーザー TNK の写真

エラーメッセージにmonitor_dnsというファイルがみつからないと
なっているので、フルパスになるように明示的にディレクトリを
指定してみてください。

例:responsetime.sh(改)

#!/bin/bash
(/usr/bin/time -f %e /usr/lib/zabbix/externalscripts/$1) 2>&1 1>/dev/null

ユーザー FLAD の写真

TNK 様 heya 様

お世話になります。
TNK様よりご指摘いただきましたresponsetime.shの修整を実施したところ
monitor_dnsの実行時間の値を取得することが出来ました。

他にもSMTPやPOPのチェックスクリプトの実行時間を計測する
設定を投入する必要がありますが、今回ご教示いただきました方法で
試していきたいと思います。

ありがとうございました。