サービスの応答時間の計測について
お世話になります。
皆様のお力添えを頂戴したく、投稿させていただきます。
【相談事項】
・Zabbix標準機能でサービスの応答時間を計測することが可能か?可能な場合どのような設定が必要か?
・Zabbix標準機能でサービスの応答時間を計測できない場合、スクリプトなどを追加して実装することが可能か?
Zabbix2.2.11 でRHEL7xサーバのサービス疎通監視を実装したのですが、
上司より「サービスの応答時間をZabbixで計測してほしい」との要望を受けて
調査をしております。
サーバは複数あり、応答時間を計測したいサービスは smtp/pop/ldap/dns などです。
Zabbixを今年の2月に導入したのですが、導入前まではスクリプトを作成して
応答時間を計測していたとのことでした。
残念なことにスクリプトについてのドキュメントは無く、前任者も離職しているため
詳細がわからない状態です。。。
「net.tcp.service.perf[service,,]」であればサービスへのTCP接続にかかった時間を
取得できることはわかったのですが、あくまでサービスの応答時間を計測することが要件のため
マッチしておりませんでした。
その他いろいろと調べてみたのですが、解決に至っておりません。
お忙しいところ大変恐縮ですが、ご教示を賜りたく
お願いいたします。
TNK - 投稿数: 4769
サービスの応答時間の定義が不明確ですが、例えばSMTPならば、
・SMTPで接続して接続時の応答メッセージの取得まで
・さらにメールを送信し終わるまで
などとどこまでを求められているのかがわかりません。
POP3なら、
・POP3で接続して接続時の応答メッセージの取得まで
・さらにユーザ認証終了まで
・そして、さらにメールのリストを取得するまで
とかどこまででしょうか。
とはいえ、Zabbixの機能だけでは、各ポートへの簡単な接続しか試
行しませんので、SMTPやPOP3などの各プロトコルに合わせたより実
際の利用時のシーケンスに合わせた応答を行って応答時間を計測す
るような機能はありません。
Web監視の機能だけは、簡単なシーケンスを実行して監視できます。
以前利用していたスクリプトが残っているのであれば、それを活用
して標準出力に応答時間の数値を出力するようにできれば、そのス
クリプトをZabbixから呼び出して、その数値を監視することができ
ます。
FLAD - 投稿数: 9
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 - 投稿数: 319
アイテムのキーの、パラメーターでない部分には { や} は使えません。
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 - 投稿数: 9
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 - 投稿数: 4769
エラーメッセージにmonitor_dnsというファイルがみつからないと
なっているので、フルパスになるように明示的にディレクトリを
指定してみてください。
例:responsetime.sh(改)
FLAD - 投稿数: 9
TNK 様 heya 様
お世話になります。
TNK様よりご指摘いただきましたresponsetime.shの修整を実施したところ
monitor_dnsの実行時間の値を取得することが出来ました。
他にもSMTPやPOPのチェックスクリプトの実行時間を計測する
設定を投入する必要がありますが、今回ご教示いただきました方法で
試していきたいと思います。
ありがとうございました。