我們用 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" }')
留言