centos-Nagios 監控搭建
Nagios 監控
閱讀目錄
1. 介紹
Nagios是一款開源軟體,能有效監控 Windows 、Linux、VMware 和 Unix 主機狀態,交換機、路由器等網路設定等。當監控出異常時提醒系統管理員,當異常恢復時也會通知。Nagios提供一個基於瀏覽器的web介面,方便管理人員檢視系統的執行狀態,網路狀態、服務狀態、日誌資訊,以及其他異常現象。
朋友們如果覺得麻煩,可以試試OneAlert一鍵整合nagios,輕鬆實現微信、電話、郵件、簡訊、APP的告警通知。![img](file:///C:/Users/wzh94434/AppData/Local/Temp/%
2. 安裝
說明:安裝機器為CentOS系統
2.1安裝依賴包
由於Nagios提供了Web介面,因此需要安裝Apache;由於配置Web介面需要PHP模組支援,所以需要安裝PHP,還需要其他外掛。
sudo yum install httpd php php-cli gcc glibc glibc-common gd gd-devel net-snmp
2.2建立使用者和分組
sudo useradd -m nagios #新建使用者 sudo passwd nagios #修改密碼 sudo groupadd nagcmd #新建分組 sudo usermod -a -G nagcmd nagios #新增使用者到分組
2.3安裝Nagios
下載
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz
安裝
tar xzf nagios-4.0.8.tar.gz #解壓 cd nagios-4.0.8 sudo ./configure --with-command-group=nagcmd sudo make all sudo make install sudo make install-init sudo make install-config sudo make install-commandmode 安裝 Web介面 sudo make install-webconf
為web介面建立登入賬號
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
其中nagiosadmin為賬號名可更改,同時會提示新增密碼。
重啟Apache服務
sudo service httpd restart
目錄名稱 | 作用 |
---|---|
bin | Nagios 可執行程式所在目錄 |
etc | Nagios 配置檔案目錄 |
sbin | Nagios cgi 檔案所在目錄, 也就是執行外部 命令所需要檔案所在的目錄 |
share | Nagios 網頁存放路徑 |
libexec | Nagios 外部外掛存放目錄 |
var | Nagios 日誌檔案、Lock 等檔案所在的目錄 |
var/archives | agios 日誌自動歸檔目錄 |
var/rw | 用來存放外部命令檔案的目錄 |
2.4安裝plugins
下載
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
安裝
tar xzf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3.tar.gz
sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios
sudo make
sudo make install
預設安裝目錄:/usr/lib64/nagios/plugins/
安裝完畢,web介面
3. 基本配置
3.1 配置檔案列表配置檔案作用
配置檔案 | 說明 |
---|---|
cgi.cfg | 控制CGI訪問的配置檔案 |
nagios.cfg | Nagios的主配置檔案 |
resource.cfg | 變數定義檔案,在此定義的變數,用於其它配置檔案中使用,如USER1USER1 |
objects | objects為目錄,內部含有大量的配置檔案 |
objects/command.cfg | 命令定義配置檔案 |
objects/contacts.cfg | 聯絡人和聯絡人分組配置檔案 |
objects/localhost.cfg | 定義監控本機的配置檔案 |
objects/printer.cfg | 監控印表機的配置檔案,預設不啟用此檔案 |
objects/switch.cfg | 監控路由器的配置檔案,預設不啟用此檔案 |
objects/templates.cfg | 定義主機和服務的配置檔案 |
---|---|
objects/timeperiods.cfg | 定義監控時間段的配置檔案 |
objects/windows.cfg | 監控Windows機器的配置檔案,預設沒有啟動此檔案 |
備註: | Nagios 在配置方面非常靈活,預設的配置檔案並不是必需的。可以使用這些預設的配置檔案,也可以建立自己的配置檔案,然後在主配置檔案 nagios.cfg 中引用即可。 |
注:在以後修改配置檔案後,可以利用以下命令列檢測配置檔案是否正確,可以根據錯誤提示修改
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
修改完配置檔案後web介面不會立馬修改,需要重新載入、啟動nagios服務。
sudo service nagios reload
sudo service nagios restart
3.2 命令配置檔案
檔名稱:commands.cfg
檔案定義格式:
define command{
command_name *******
command_line *******
例如,檢視本地負載的命令
# 'check_local_load' command definition
define command{
command_name check_local_load
command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
}
其中,變數USER1USER1在resource.cfg中定義
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec
USER1USER1中自帶很多可執行的檔案,可在命令列使用-v,檢視具體的用法,這裡ARG1是發出警告(w)的條件,ARG1是發出警告(w)的條件,ARG2是發出嚴重警告©的條件。可以用命令執行,命令執行,如
[[email protected]]$ /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0
OK - load average: 0.00, 0.01, 0.05|load1=0.000;5.000;10.000;0; load5=0.010;4.000;6.000;0; load15=0.050;3.000;4.000;0;
3.3 監控本地主機
確認nagios.cfg中有對localhoast.cfg檔案的引用
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
localhost.cfg自帶了對HTTP、ROOTPartition、SSH等服務的定義。
在localhost.cfg定義主機
define host{
use linux-server
host_name localhost
alias localhost
address 127.0.0.1
}
其中host_name是對被監控機器的名稱,alias是被監控機器名稱的別稱,address是被監控機器的ip(127.0.0.1表示本地機器),use指明的是被監控機器繼承的模板(定義模板的位置在templates.cfg,具體含義參考報警部分)。
然後在localhost.cfg裡完成對服務(service)的定義
define service{
use local-service
host_name localhost
service_description 磁碟空間
check_command check_local_disk!20%!10%!/
}
其中,use指被監控機器整合的服務模板(定義模板的位置在templates.cfg,具體含義參考報警部分),host_name指主機名,與上面定義的host_name所指含義相同,service_description指要顯示在web介面的內容,check_command指明要執行的命令名稱(命令定義的位置是commands.cfg),示例中的引數20%表示,磁碟剩餘空間少於20%(ARG1)時開始報警,10ARG1)時開始報警,10ARG2$)表示,磁碟剩餘空間少於10)時開始報警。
對本機其他的監控的配置一樣。配置完成後可以在瀏覽器上瀏覽效果(地址:部署nagios所在機器的ip/nagios)
監控主機頁面
監控服務頁面
3.4 監控遠端Linux/UNIX主機
原理
監控遠端的Linux/UNIX由兩部分組成:執行在監控主機上的check_nrpe,執行在被監控主機上的NRPE守護程序。其中check_nrpe不是nagios自帶的可執行檔案,是安裝plugins時帶的可執行檔案(位置在: /usr/lib64/nagios/plugins/)。
當監控遠端的Linux/UNIX時,工作流程如下:
- nagios執行check_nrpe這個外掛,並告訴它要執行什麼命令
- check_nrpe連線到被監控端的NRPE守護程序,告訴它命令
- 被監控端的NRPE守護程序執行具體的操作
- 被監控端的NRPE守護程序把執行的結果返回給Nagios做後處理
被監控端的外掛安裝與配置
CentOS系統
yum install epel-release
yum install nrpe nagios-plugins-all openssl
Debian/Ubuntu系統
apt-get install epel-release
sudo apt-get install nagios-nrpe-server nagios-plugins
安裝完後進行配置
開啟/etc/nagios/nrpe.cfg檔案,在allowed_hosts後面新增上監控機器的ip
## Find the following line and add the Nagios server IP ##
allowed_hosts=127.0.0.1 192.168.1.150
開啟NRPE服務
CentOS系統
systemctl start nrpe
chkconfig nrpe on
Debian/Ubuntu系統
sudo /etc/init.d/nagios-nrpe-server restart
回到監控主機,新建目錄servers
sudo mkdir /usr/local/nagios/etc/servers
建立監控遠端Linux/UNIX主機的指令碼
sudo touch /usr/local/nagios/etc/servers/clients.cfg
在nagios.cfg中新增上目錄servers,這樣目錄中的檔案都會被引入到監控中來。
cfg_dir=/usr/local/nagios/etc/servers
舉例
以“監控遠端Linux/UNIX主機的CPU負載”為例
被監控端
進入目錄cd /etc/nagios/nrpe.cfg
新增命令列:
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
修改後重啟服務
service nagios-nrpe-server restart
監控端
開啟servers/clients.cfg檔案
定義主機
define host{
use linux-server
host_name 10.61.88.23
alias 10.61.88.23
address 10.61.88.23
}
定義服務
define service {
use generic-service,srv-pnp
host_name 10.61.88.23
service_description CPU負載
check_command check_nrpe!check_load
notifications_enabled 1
}
其中check_command中check_nrpe!後面的命令check_load對應被監控端的command[check_load]對應的命令。
監控遠端windows
說明
nagios對windows進行監控需要在被監控端安裝NSClient,NSClient++來監控windows主機有三種方式:check_nt、check_nrpe、nsca。check_nt自帶很多功能,可以完成很多基本的需求,但是擴充套件性差;check_nrpe可以通過執行自己定義的指令碼做到很好地擴充套件。為了滿足自己的需求,可以以上幾種方式結合使用。
在objects目錄下建立檔案windows.cfg,新增主機和服務。
check_nt
新增主機和服務
define host{
use windows-server
host_name ruanxi
alias My Windows Server
address 192.168.0.5
}
#監控 windows 主機的開機運作時間
define service{
use generic-service
host_name ruanxi
service_description Uptime
check_command check_nt!UPTIME
}
#監控 windows 主機的記憶體使用狀況
define service{
use generic-service
host_name ruanxi
service_description Memory Usage
check_command check_nt!MEMUSE!-w 80 -c 90 #記憶體使用到達80%則warn,到達90%則Critical
}
check_nrpe
原理
使用check_nrpe監控windows的原理與監控linux主機的原理一致,這樣可以根據特定的需求自己寫指令碼。
以監控某個程序是否執行為例
編輯NSClient配置檔案NSC.ini,去掉以下幾行前面的“;”號(去掉註釋,使其生效)
NRPEListener.dll
script_dir=scripts\
CheckExternalScripts.dll
在NSClient安裝目錄下的scripts資料夾下,新建一個check_run.bat批處理檔案,如下
@echo off
tasklist |find "%1" >NUL
IF ERRORLEVEL 1 GOTO err
IF ERRORLEVEL 0 GOTO ok
:err
echo CRITICAL: Process does not exist
exit /B 1
:ok
echo OK: The process of normal
exit /B 0
說明:指令碼的退出值與nagios的報警提示對應關係為:0–正常,1–警告,2–嚴重警告
在NSC.ini檔案中[External Scripts]下面新增如下行:
check_run=scripts\check_run.bat chrome.exe
重啟NSClinet
可以在被監控端check_nrpe所在的目錄(CentOs預設的安裝目錄為:/usr/lib64/nagios/plugins/)
./check_nrpe -H hostip -c check_run
注:-H後寫剛才指令碼所在的機器,-c後寫命令,這裡對應配置檔案中的check_run
如果結果與預期的一致,那麼就可以繼續配置監控端了
配置監控端
修改commands.cfg,增加命令
define command{
command_name check_run
command_line /usr/lib64/nagios/plugins/check_nrpe -H yourip -c check_run
}
修改windows.cfg,增加服務
define service{
use generic-service-urgent,srv-pnp
host_name youip ;要展示資訊的機器的ip
service_description check_fileexistspan
check_command check_run
}
4. 報警
4.1 報警配置檔案
修改聯絡人
配置檔案是contacts.cfg.
聯絡人定義方式為:
define contact{
contact_name nagiosadmin ; 使用者名稱稱
use generic-contact ;
alias Nagios Admin ; 使用者別稱
email ****@**** ;修改為需要通知的郵箱
}
該contact繼承了templates.cfg中的genetic-contact,如下
define contact{
name generic-contact ; The name of this contact template
service_notification_period 24x7 ; service notifications can be sent anytime
host_notification_period 24x7 ; host notifications can be sent anytime
service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events
host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events
service_notification_commands notify-service-by-email ; send service notifications via email
host_notification_commands notify-host-by-email ; send host notifications via email
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}
,host_notification_commands指定的方式為notify-host-by-email,如果是微信或簡訊等其他方式,用逗號隔開寫在後面即可。其中命令notify-host-by-email的定義在commands.cfg中預設已定義,如下
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
聯絡人分組定義方式為:
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin ;這裡填寫剛才定義的contact_name
}
4.2 修改報警時間週期
define host{
use linux-server
host_name server_10.61.91.37
alias server_10.61.91.37
address 127.0.0.1
contact_groups admins ;這裡新增報警組名稱(上面剛定義的)
}
要使主機或服務能夠發郵件,必須在定義主機或服務時新增說明,以服務為例。修改localhost.cfg中本機的修改。
這樣主機出現異常時會發送異常到報警組,報警組把異常分配給組裡的成員,然後成員按著自己預先設定的報警方式進行報警。主機繼承了linux-server模板,模板的定義在templates.cfg檔案,檔案中存在著主機和服務的繼承關係,可以根據需要自己定製引數,以linux-server模板為例:
define host{
name linux-server ; 主機模板名稱
use generic-host ; 繼承通用模板
check_period 24x7 ; 監控的時間段為一週七天,每天24小時,具體定義詳見timeperiods.cfg
check_interval 5 ; 對主機每5分鐘檢測一次(注:這裡的數值單位預設為分鐘)
retry_interval 1 ; 重試檢測時間為1分鐘
max_check_attempts 1 ; nagios對主機的最大檢查次數,即nagios在檢查發現某主機異常時,並不馬上下定論
check_command check-host-alive ;指定檢查主機狀態的命令,其中“check-host-alive”在commands.cfg檔案中定義
notification_period workhours ; 主機故障時,傳送通知的時間範圍,其中“workhours”在timeperiods.cfg中進行了定義;
notification_interval 30 ; 故障出現,沒有修復,每30分鐘再發一次告警
notification_options d,u,r ; 定義主機在什麼狀態下可以傳送通知給使用者,d即down,表示宕機狀態;
register 0 ;指明這非真正主機,這只是模板而已
}
注:這裡的時間是時間片的含義,定義在nagios.cfg中command_check_interval=60,預設單位是s 。30即30*60s
4.3 郵件報警
上面是以郵件報警為例說明的,但是前提是系統可以往外發郵件,配置如下(以CentOs為例)
開啟/etc/mail.rc檔案
新增
其中
set from=[傳送人郵箱地址]
set smtp=[smtp伺服器地址]
set smtp-auth-user=[郵箱使用者名稱]
set smtp-auth-password=[郵箱密碼]
set smtp-auth=login
測試:
mail -s [郵件主題][郵件地址] 回車,然後輸入郵件內容,最後按“Ctrl + D”。如果傳送成功表名配置成功。
4.4 微信、簡訊報警
參考
110雲監控 Nagios告警整合 連結
利用Nagios呼叫Python程式控制微信公眾平臺釋出報警信 連結
5. 分組
完成了以上的配置,已經完成了nagios的基本配置,但是當有多個機器時,所有的機器顯示在一起會顯得很亂,並且和自己無關的主機也會對自己報警。為了作區分可以對主機和服務進行分組,這樣管理人員就可以只關注自己管理的主機和服務。
5.1 主機分組
定義分組的位置放哪都行,只要引入到nagios.cfg中即可,為了方便找,這裡把分組放到localhost.cfg和windows.cfg裡。
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members server_10.61.91.37,172.16.41.211,10.61.88.23 ; 主機名
}
點選web介面左邊導航條中主機組的表格,分組示例
5.2 服務分組
define servicegroup{
servicegroup_name dbservices
alias Database Services
members 程序CPU與記憶體,10.61.88.23,監控埠狀態 ;這裡寫service中的service_description
}
點選web介面左邊導航條中服務組的表格,分組示例
6. 介面美化
6.1 漢化
可以根據自己的需求對web介面的顯示選項進行定製和修改。
對左邊導航條的修改檔案是/usr/local/nagios/share/side.php
修改後,需要重新載入、啟動nagios。簡易修改效果如下:
6.2 pnp4nagios外掛
nagios自帶圖表分析功能,但是不美觀,可以利用外掛pnp4nagios,它對進行檢測的主機和服務進行統計,管理人員可以根據統計報表進行分析、改善。
官網安裝文件
效果圖
7. 參考
Install And Configure Nagios 4 On Ubuntu 14.10/14.04
Nagios 監控系統架設全攻略
8. 維護備忘
郵箱發件人設定:/etc/mail.rc
配置檔案檢查:sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
重新載入:sudo service nagios reload sudo service nagios restart
監控遠端Linux
新建使用者
sudo useradd -m nagios
sudo passwd nagios
安裝nagios-plungins: sudo apt-get install nagios-nrpe-server nagios-plugins
配置檔案地址:/etc/nagios/nrpe.cfg
外掛所在地址:/usr/lib/nagios/plugins (或 /usr/lib64/nagios/plugins/)
新增可以監控的機器:
sudo vim /etc/nagios/nrpe.cfg
增加:allowed_hosts=127.0.0.1 10.61.73.49 (server的ip)
增加具體命令:command[check_cpu_proc]=
修改後重新啟動:sudo service nagios-nrpe-server restart
監控遠端Windows
cd /usr/local/nagios/libexec/
檢視是否正常工作:
./check_nt -H 172.16.41.84 -p 12489 -v UPTIME (12489為預設埠)