我們用 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" }')
最後修改日期: 2014 年 07 月 20 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。