Previous Article Next Article 監控系統 icinga (nagios 的分支) 分散式監控(Distributed Monitoring)篇
Posted in Linux

監控系統 icinga (nagios 的分支) 分散式監控(Distributed Monitoring)篇

監控系統 icinga (nagios 的分支) 分散式監控(Distributed Monitoring)篇 Posted on 2014 年 07 月 24 日Leave a comment

這邊的分散式監控是當主要的那台 (central) 負載太高,就可以把部份監控放在另一台上面 (slaver),slaver 會把 check 後的結果傳回 central,我們仍可以在 central 查看最終的結果
比方說 central 負責監控所有 host 及 service,而 service 又分 http 、 smtp 、 cpu 、 mem 等等,我把 cpu 、mem 放在 slaver 處理,http、smtp 仍留在 central,但是 central 還是會看到 cpu、mem,只是把真正執行 check 的任務交給 slaver 再回傳結果,這個動作就是 passive,所以它是搭配 nsca 處理的

central

# 編譯 nsca
有特別設定 xxx-central,用於識別

yum install libmcrypt libmcrypt-devel 
wget https://downloads.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz?r=&ts=1384410873&use_mirror=nchc
tar zxvf nsca-2.9.1.tar.gz
cd nsca-2.9.1
make clean; ./configure --with-nsca-user=icinga --with-nsca-grp=icinga --prefix=/usr/local/nsca-central
make all

# 複製設定 nsca

mkdir -p /usr/local/nsca-central/etc /usr/local/nsca-central/bin /usr/local/nsca-central/var
yes|cp -rp ./init-script /etc/init.d/nsca-central
yes|cp -rp ./src/nsca /usr/local/nsca-central/bin/nsca-central
yes|cp -rp ./sample-config/nsca.cfg /usr/local/nsca-central/etc/nsca-central.cfg
chmod +x /etc/init.d/nsca-central
chmod g+r /usr/local/nsca-central/etc/nsca-central.cfg
chown -R icinga.icinga /usr/local/nsca-central

# 在 icinga.cfg 加入設定
vi /usr/local/icinga/etc/icinga.cfg

check_external_commands=1
command_check_interval=-1
enable_notifications=1
accept_passive_service_checks=1
accept_passive_host_checks=1
log_passive_checks=1        # 用於測試,會有一堆 EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT 記錄

# nsca 設定檔改一下
vi /usr/local/nsca-central/etc/nsca-central.cfg

pid_file=/var/run/nsca-central.pid
command_file=/usr/local/icinga/var/rw/icinga.cmd                # 改一下檔案名稱、路徑
alternate_dump_file=/usr/local/icinga/var/rw/nsca-central.dump  # 沒有 fifo 檔,此 dump 檔會自動產生附加寫入資料
password=icinga_nsca_sent                                       # 驗證碼,這邊設了 slaver 也要一樣

# nsca 啟動檔,改一下名稱、路徑
vi /etc/init.d/nsca-central

NscaBin=/usr/local/nsca-central/bin/nsca-central
NscaCfg=/usr/local/nsca-central/etc/nsca-central.cfg
LockFile=/var/lock/subsys/nsca-central
 
# See how we were called.
case "$1" in
  start)
        # Start daemons.
        echo -n "Starting nsca-central: "
        daemon $NscaBin -s -c $NscaCfg
        RETVAL=$?
        echo
        touch $LockFile
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down nsca-central: "
        killproc nsca-central
        echo
        rm -f $LockFile
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  status)
        status nsca-central
        ;;
  *)
        echo "Usage: nsca-central {start|stop|restart|status}"
        exit 1
esac
 
exit 0

再來讓 icinga define service 裡設定 active_checks_enabled 為 0 ,passive_checks_enabled 為 1
意思就是 central 不再對 cpu、mem 作執行 check 動作,只接受 slaver 過來的資料
vi cpu.cfg

active_checks_enabled           0
passive_checks_enabled          1

這樣子就可以

service icinga reload
service nsca-central start

再來

slaver

# 編譯 nsca
xxx-slaver

yum install libmcrypt libmcrypt-devel 
wget https://downloads.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz?r=&ts=1384410873&use_mirror=nchc
tar zxvf nsca-2.9.1.tar.gz
cd nsca-2.9.1
make clean; ./configure --with-nsca-user=icinga --with-nsca-grp=icinga --prefix=/usr/local/nsca-slaver
make all

# 複製 nsca

mkdir -p /usr/local/nsca-slaver/etc /usr/local/nsca-slaver/bin /usr/local/nsca-slaver/var
yes|cp -rp ./src/send_nsca               "/usr/local/nsca-slaver/bin/send_nsca-slaver"
yes|cp -rp ./sample-config/send_nsca.cfg "/usr/local/nsca-slaver/etc/send_nsca-slaver.cfg"
chown -R icinga.icinga "/usr/local/nsca-slaver"

# 設定驗證碼
vi “/usr/local/nsca-slaver/etc/send_nsca-slaver.cfg”

password=icinga_nsca_sent # 驗證碼,與 central 相同

# 設定 icinga 要 send nsca command
vi /usr/local/icinga/etc/commands.d/submit_check_result_via_nsca.cfg

define command {
        command_name submit_check_result_via_nsca
        command_line /usr/local/icinga/libexec/eventhandlers/distributed-monitoring/submit_check_result_via_nsca $HOSTNAME$ '$SERVICEDESC$' $SERVICESTATEID$ '$SERVICEOUTPUT$|$SERVICEPERFDATA$'
}

# icinga 本身自帶的檔案
vi /usr/local/icinga/libexec/eventhandlers/distributed-monitoring/submit_check_result_via_nsca

# 修改 send_nsca 路徑
NscaBin="/usr/local/nsca-slaver/bin/send_nsca-slaver"
NscaCfg="/usr/local/nsca-slaver/etc/send_nsca-slaver.cfg"
# 修改 IcingaHost,就是 central 的 IP
IcingaHost="1.1.1.1"

再來讓 icinga define service 裡設定 active_checks_enabled 為 1 ,passive_checks_enabled 為 0
這是與 central 顛倒
vi cpu.cfg

active_checks_enabled           1
passive_checks_enabled          0  # 特別設 0 ,因為 slaver 也不需要

# 再修改 icinga.cfg
vi /usr/local/icinga/etc/icinga.cfg

enable_notifications=0                      # 讓 icinga 全部不作 notification
obsess_over_services=1                      # 我只要 service 作 send nsca
ocsp_command=submit_check_result_via_nsca   # 指令名稱,就是上面的 define command

# reload icinga

service icinga reload

# 在 slaver 測試丟資料到 central

/bin/echo -e "localhost\tdummy\t0\ttestesttest.\n" | /usr/local/nsca-slaver/bin/send_nsca-slaver -H 1.1.1.1 -c /usr/local/nsca-slaver/etc/send_nsca-slaver.cfg

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *