Monitoring

Nagios 基本配置(用於快速添加新機器)

  • March 2, 2015

我最近開始使用 Nagios 來監控大約 25 台伺服器(主要是虛擬的,還有一些是獨立的)。他們的大多數伺服器(包括 Nagios 主機本身)都執行 Ubuntu 14.04 LTS,少數執行 12.04 LTS。因此,我認為我可以使用 NRPE 並完成它。

事實證明,配置 NRPE 對我來說相當複雜。例如,對於一個簡單的 check_disk 命令,我必須通過排除所有其他分區/文件系統來手動指定要檢查的分區,如下所示:

command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 57% -x /dev -x /run -x /run/lock -x /run/shm -x /run/user -x /sys/fs/cgroup

否則我的警告和嚴重門檻值會立即被 sysfs、proc 或其他分區設置。

然後我查看了 Nagios 主機對自身執行的基本服務監視器。它在 /usr/local/nagios/etc/localhost.cfg 中列出,並包含以下內容(對不起!我不明白為什麼它不能正確格式化!)

define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             PING
check_command           check_ping!100.0,20%!500.0,60%
   }



define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             Root Partition
check_command           check_local_disk!20%!10%!/
   }




define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             Current Users
check_command           check_local_users!20!50
   }


define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             Total Processes
check_command           check_local_procs!250!400!RSZDT
   }



define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             Current Load
check_command           check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
   }


define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             Swap Usage
check_command           check_local_swap!20!10
   }


define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             SSH
check_command           check_ssh
notifications_enabled       0
   }



define service{
   use                             local-service         ; Name of service template to use
   host_name                       localhost
   service_description             HTTP
check_command           check_http
notifications_enabled       0
   }

這在儀表板上導致:

驚人的

這對我來說是完美的。這正是我希望我添加的每個主機都顯示的內容。我應該如何通過 NRPE conf 文件將其“複製”到每個主機,以便我看到我添加的每個主機的所有這些特定服務,而不是搞亂自定義命令?很明顯,這已經在這裡並且已經在本地主機上執行了。我正在努力思考實現這一目標所需的組織。

感謝您的任何建議。

不久前,我寫了一個非常好的 NRPE 自動安裝程序腳本,我相信如果您編輯它以滿足您的需要,它可以為您提供幫助。該腳本包括許多內置檢查,這些檢查被添加到每個主機的nrpe.cfg文件中。這意味著,您可以配置與您相關的檢查,並確保執行腳本的每個主機也將擁有它們,這與客戶端有關。

腳本的連結:這裡

關於伺服器端(Nagios),您可以安裝 Nagios 配置管理器,例如 NagioSQL,這將幫助您通過 GUI 以更方便的方式管理您的主機和服務。

不僅如此,為了確保您的所有主機都有您顯示的這些檢查,只需創建一個服務組,其中包含您要監視的所有這些服務(檢查),然後將此服務組附加到您監視的每個主機。

讓我告訴你我在公司做了什麼,我想確保每台伺服器都受到check_load檢查的監控,但由於我們公司沒有硬體基線,這意味著每台伺服器都有不同的規格,並且check_load是按核心/cpu 計算的在機器中,我在 Puppet 伺服器中添加了“Nagios_client”模組,該模組custom_fact辨識機器中存在多少處理器並check_load相應地配置 Nagios。

例如,假設 server1 有 4 個 cpu,這意味著 2.8 負載是理想的(每個 cpu 0.7)。Puppet throughfacter辨識 cpu 的數量,然後nrpe.cfg像這樣編輯伺服器:

command[check_load]=/usr/local/nagios/libexec/check_load -w 2.9,3.0,3.1 -c 4.0,5.0,6.0

然後,例如在 NagioSQL 中,您可以使用“導入功能”,它允許您導入*.cfg將作為主機和服務載入到 Nagios 的文件。因此,您可以創建一個host.cfg文件並通過腳本將其複製到您要監控的每個主機上,並且只需更改每台機器的主機名/IP,這將使您邁向更自動化的配置。

以我為例,Puppet 能夠理解它是第一次在機器上執行,然後還在host.cfgNagios 中創建了相關文件。

我相信使用 Puppet + NagioSQL,您的 Nagios 管理任務會輕鬆得多。

關於您在配置任何檢查方面的困難…您始終可以編寫自己的腳本並配置 Nagios 為您執行它。例如,讓我們以您的check_disk命令為例,它是一個非常豐富的命令,可讓您顯示對您來說不必要的各種數據。

所以我遇到了同樣的問題check_procs,另一個非常豐富的命令,它給你各種數據……我不需要,所以我寫了一個簡單的檢查腳本,它完全符合我的需要並在 Nagios 中配置它。例子:

#!/bin/bash
# This script checks for running processes for mt.js and adb-server.js
# Script by Itai Ganot 2015 .
process="$1"
appname=$(basename $0)
if [ -z "$1" ]; then
   echo "Please specify a process to check"
   exit 1
fi
ps -ef | grep "$process" | egrep -v "grep|$appname" &>/dev/null
if [ "$?" -eq "0" ] ; then
   stat="OK"
   exitcode="0"
   msg="Process $process is running"
else
   stat="Critical"
   exitcode="2"
   msg="There are currently no running processes of $process"
fi
pid=$(ps -ef | grep "$process" | egrep -v "grep|$appname" | awk '{print $2}')
echo "$stat: $msg Process PID: $pid"
exit $exitcode

它給我的資訊比真實的少,check_procs但給我的只是我需要的資訊。

所以簡而言之,如果你的check_disk命令讓你很難配置它,那麼只需創建你自己的腳本,這就是 Nagios 的美妙之處。

我希望我對你有所幫助。

引用自:https://serverfault.com/questions/672024