我們用 ocsp_command=submit_check_result_via_nsca 方式來作分散式監控時,效能會很差,因為是一筆 check 就送一筆 send_nsca 執行程序
用 /usr/local/icinga/bin/icingastats | grep -i late 查看 latency 時,發現 active checks 是破 100 sec 以上
這邊我們要讓 icinga 一產生 checks 後就把資料丟到 fifo 檔案,再固定幾秒一次把資料全送到 central 端,也就是使用到 service_perfdata_file 方式
Slaver
# 編輯 icinga.cfg
照舊我只處理 service 部份
vi /usr/localicinga/etc/icinga.cfg
obsess_over_hosts=0 obsess_over_services=0 process_performance_data=1 service_perfdata_file=/usr/local/icinga/var/rw/service-perfdata.fifo service_perfdata_file_template=$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATEID$\t$SERVICEOUTPUT$|$SERVICEPERFDATA$ service_perfdata_file_mode=p service_perfdata_file_processing_interval=0
# 建立 fifo 檔
mkfifo /usr/local/icinga/var/rw/service-perfdata.fifo chgrp icinga /usr/local/icinga/var/rw/service-perfdata.fifo chmod 660 /usr/local/icinga/var/rw/service-perfdata.fifo
# define service 都要有
process_perf_data 1
# 下載 OCP_daemon 檔案
git clone git://git.pld-linux.org/packages/nagios-ocpd.git or https://github.com/pld-linux/nagios-ocpd
# 複製檔案
cd nagios-ocpd cp -rp ocpd.pl /usr/local/icinga/bin/ocpd.pl
# 我不用它的 ocpd.init ,而是自建一個
vi /etc/init.d/ocpd
#!/bin/bash
# OCP_daemon : This starts and stops OCP_daemon
#
# chkconfig: 12345 12 88
# processname: OCP_daemon
# pidfile: /var/run/OCP_daemon.pid
# Source function library.
. /etc/rc.d/init.d/functions
pname="OCP_daemon"
bin="/usr/local/icinga/bin/ocpd.pl -f /usr/local/icinga/var/rw/service-perfdata.fifo -n /usr/local/nsca-slaver/bin/send_nsca-slaver -H 10.10.10.137 -c /usr/local/nsca-slaver/etc/send_nsca-slaver.cfg -r 1 -M >/dev/null &"
pidfile="/var/run/${pname}.pid"
lockfile="/var/lock/subsys/${pname}"
RETVAL=0
start() {
echo -n "Starting $pname : "
daemon ${bin}
RETVAL=$?
PID=$!
echo
[ $RETVAL -eq 0 ] && touch ${lockfile}
echo $PID > ${pidfile}
}
stop() {
echo -n "Shutting down $pname : "
killproc ${pname}
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
rm -f ${lockfile}
rm -f ${pidfile}
fi
}
restart() {
echo -n "Restarting $pname : "
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status ${pname}
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
;; esac
exit 0
# 測試
/usr/local/icinga/bin/ocpd.pl -f /usr/local/icinga/var/rw/service-perfdata.fifo -n /usr/local/nsca-slaver/bin/send_nsca-slaver -H 1.1.1.1 -c /usr/local/nsca-slaver/etc/send_nsca-slaver.cfg -r 1 -M
Q
掛掉 Died at /usr/local/icinga/bin/ocpd.pl line 189.
A
因為 ido2db 連不到 mysql 造成的
QA
我也用過 icinga 官網介紹的 OCP_daemon,不過會有 multiline 問題,slaver 丟到 central 資料會全都只成為一行的,central 端接收到的是要一個 service check 一行才行
也有人推建 OCSP Sweeper ,不過也是有 multiline 問題,可能是 nsca 版本的關系吧
從 /root/nagios-ocpd/ocpd.init 發現端儗的
local nsca_multiline=$(awk -vv=$nsca_version 'BEGIN { if (v >= 2.9) print "-M" }')
留言