Nagios 基本配置(用於快速添加新機器)
我最近開始使用 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 through
facter
辨識 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.cfg
Nagios 中創建了相關文件。我相信使用 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 的美妙之處。我希望我對你有所幫助。