奇妙な問題があります...
私のスクリプト:
#!/bin/bash
SECONDS=0
lock_file=/tmp/$0.lock
[ -e $lock_file ] && exit
touch $lock_file
echo "<<<db2_hadr_check>>>"
instances=( db2inst1 db2inst2 )
plog() {
lfile=/tmp/$0.log
echo "[`date +%T`] $1" >> $lfile
}
for instance in "${instances[@]}"; do
plog "get dbname for instance $instance"
name=$(su - $instance -c 'echo $dbname')
plog "get hadr info for instance $instance"
arr=($(su - $instance -c 'db2pd -db $dbname -hadr | egrep -i "HADR_CONNECT_STATUS |HADR_LOG_GAP" | cut -d "=" -f 2'))
plog "check result for instance $instance"
s=${arr[0]}
lg=${arr[1]}
[ -z $s ] && s="DISCONNECTED"
[ -z $lg ] && lg=0
plog "return result for instance $instance"
#dbname hadr_conn_status log_gap
echo "$name $s $lg"
done
plog "Execution time: $SECONDS"
plog "############################################################"
rm $lock_file
テストサーバー(Fedoraバージョン21)でこのスクリプトを手動で実行しています...
手動実行履歴:
[11:46:36] get dbname for instance db2inst1
[11:46:37] get hadr info for instance db2inst1
[11:46:37] check result for instance db2inst1
[11:46:37] return result for instance db2inst1
[11:46:37] get dbname for instance db2inst2
[11:46:38] get hadr info for instance db2inst2
[11:46:39] check result for instance db2inst2
[11:46:39] return result for instance db2inst2
[11:46:39] Execution time: 3
[11:46:39] ############################################################
その後、監視サーバー(nagios + check_mk)にこのチェックを追加しました。 check_mk_agent(私のスクリプト呼び出し)を実行すると、次の実行時間が発生します。
real 0m2.923s
user 0m0.755s
sys 0m1.982s
いいですね。
これは私の問題です...
check_mk サーバーを使用してロギングを実行します。
[11:48:38] get dbname for instance db2inst1
[11:49:04] get hadr info for instance db2inst1
[11:49:30] check result for instance db2inst1
[11:49:30] return result for instance db2inst1
[11:49:30] get dbname for instance db2inst2
[11:49:55] get hadr info for instance db2inst2
[11:50:21] check result for instance db2inst2
[11:50:21] return result for instance db2inst2
[11:50:21] Execution time: 103
[11:50:21] ############################################################
このスクリプトが check_mk(nagios) から呼び出されると実行されます。103秒!
誰かがこれを説明できますか?
追加情報#1:
check_mk サーバーは xinetd を使用してホスト上で check_mk_agent を実行します。
設定ファイル(/etc/xinetd.d/check_mk):
service check_mk
{
type = UNLISTED
port = 6556
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/check_mk_agent
log_on_success =
disable = no
}
/etc/pam.d/su:
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
追加情報#2:
@Lambertのコメントの後、私は次のようにしました。
/etc/hostsのnagiosサーバーからdb2サーバーIPを追加しました。 db2 サーバー /etc/hosts に nagios サーバー IP を追加しました。
私はさらに2つを試しました。
存在するナギオス仕える人:
注文する:
time ssh root@db2server /usr/bin/check_mk_agent
結果:
...
real 0m5.917s
user 0m0.025s
sys 0m0.028s
注文する:
time telnet db2server 6556
結果:
...
real 0m51.859s
user 0m0.005s
sys 0m0.014s
何度も返しましたが、同じ結果です...
db2serverから/var/log/メッセージ私はこれを見つけました:
Oct 30 14:48:55 db2server su: (to db2inst1) root on pts/0 <- 1. command
Oct 30 14:50:59 db2server su: (to db2inst1) root on none <- 2. command
追加情報#3:
注文する:
time ssh root@db2server telnet localhost 6556
結果:
real 0m7.510s
user 0m0.029s
sys 0m0.034s
どんなアイデアがありますか?