Nagios的監控原理
之前對nagios的監控原理不是很清楚,經過幾次搭建之後,又參考了許多書籍和部分優秀的文章,將大家講的好的部分結合在一起,又添了些自己的內容形成這這篇文章,以便一些新手的理解
一、nagios的簡介
Nagios是一款開源的免費網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警,第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。
Nagios是一個監視系統運行狀態和網絡信息的監視系統。Nagios能監視所指定的本地或遠程主機以及服務,同時提供異常通知功能等。
Nagios可運行在Linux/Unix平臺之上,同時提供一個可選的基於瀏覽器的WEB界面以方便系統管理人員查看網絡狀態,各種系統問題,以及日誌等等。
Nagios可運行在Linux/Unix平臺之上,同時提供一個可選的基於瀏覽器的WEB界面以方便系統管理人員查看網絡狀態,各種系統問題,以及日誌等等。
Nagios可以識別4種狀態返回信息,即 0(OK)表示狀態正常/綠色、1(WARNING)表示出現警告/黃色、2(CRITICAL)表示出現非常嚴重的錯誤/紅色、3(UNKNOWN)表示未知錯誤/深黃色。Nagios根據插件返回來的值,來判斷監控對象的狀態,並通過web顯示出來,以供管理員及時發現故障。
二、nagios的監控對象有哪些
1.本機的運行狀態
2.本機的服務的運行狀態
3.遠程主機【可以是linuc/unix主機也可以是windows主機】
4.遠程主機上的服務
5.監控網絡服務(SMTP、POP3、HTTP、PING等);
6.監控主機資源(處理器負荷、磁盤利用率等);
三、nagios監控一個服務或主機的方式
1.【被動監控】
nagios通過nsca進行被動監控。那麼什麼是被動監控呢?被動監測:就是指由被監測的服務器主動上傳數據到nagios監控系統中。這種監測方式提高了實時性(出現問題的時候,被監測的服務器可以及時上傳數據通知nagios,從而使管理員可以儘快作出處理,而不用像主動監測中一樣,非要等到下一個監測週期才能獲知被監測服務器的狀態)。NSCA就是可以實現Nagios被動監測的一個程序。目前所知道的,只能通過nsca插件對linux/unix服務器進行被動監控。對於windows服務器暫時沒發現可用的插件。
2.【主動監控】
nagios通過nrpe插件和snmp協議進行主動監控。至於什麼是主動監控可以參考上面所述。簡單理解決就是nagios按照檢測週期主動的獲取遠程主機的數據。這樣一來實時性就要差一些了。nagios通過nrpe插件和snmp協議實現了對linux/unix服務器進行監控,同時通過snmp協議實現了對windows服務器、交換機、打印機等的監控。另外,nagios通過NSClient++客戶端也可以對windows進行監控
四、nagios監控一個服務或主機的途徑
nagios本身並沒有監控的功能,所有的監控是由插件完成的,插件將監控的結果返回給nagios,nagios分析這些結果以web的方式展現給我們,同時提供相應的報警功能(這個報警的功能也是由相應的插件完成的)。
根據上圖可以看出有這麼幾大類,這些都是nagios所要調用的插件類型
1.snmp類
【可以監控本地/遠程linux/unix主機和遠程windows服務器、交換機、打印機】
2.nrpe類
【主要監控本地主機和遠程主機的服務的狀態,切記是針對於服務】
3.nsca類
【nsca主要是實現被動監控的】
4.nagios-plugins類
【nagios-plugins是nagios官方提供的一套插件程序,nagios監控主機的功能其實都是通過執行插件程序來實現的。】
所有的這些插件是一些實現特定功能的可執行程序,默認安裝的路徑是/usr/local/nagios/libexec,可以自己查看。
五、詳細介紹nagios調用插件來監控主機/服務的過程
1.NPRE的工作原理
NRPE總共由兩部分組成:
- check_nrpe 插件,位於在監控主機上
– NRPE daemon,運行在遠程的linux主機上(通常就是被監控機)
當nagios需要監控某個遠程linux主機的服務或者資源情況,一般過程:
1.nagios會運行check_nrpe這個插件,告訴它要檢查什麼;
2.check_nrpe插件會連接到遠程的NRPE daemon,所用的方式是SSL;
3.NRPE daemon會運行相應的nagios插件來執行檢查;
4.NRPE daemon將檢查的結果返回給check_nrpe插件,插件將其遞交給nagios做處理。
注意:NRPE daemon需要nagios插件安裝在遠程的linux主機上,否則,daemon不能做任何的監控.
通過NRPE的檢測分爲兩種:
1).直接檢測:檢測的對象是運行NRPE的那臺linux主機的本地資源,原理如下圖
被監控機上安裝有nrpe,並且還有插件,最終的監控是由這些插件來進行的.當監控主機將監控請求發給nrpe後,nrpe調用插件來完成監控.
2).間接檢測:當運行nagios的監控主機無法訪問到某臺被監控機,但是運行NRPE的機器可以訪問到時,NRPE就可以充當一個代理,將監控請求發送到被監控機(必須要說明的是,通常被監控機與監控機在同一網絡內,所以這樣的情況很少)
2.snmp的工作原理
NMS(網絡管理平臺)它會給管理員提供一個命令行接口,可以發送SNMP的操作指令到任何一個被監控主機,被監控端怎麼才能接受監控端所發來的指令,而且能夠理解它的指令呢?在被監控主機上要安裝一個服務器進程,這個服務器進程只是用來接收來自於監控端的查詢請求,並且能夠解析對方的查詢請求,並把對方請求的數據返回給對方。這個服務進程叫做Agent,一個遠端代理,這個代理只是爲了接收我們的查詢指令或者其它的管理指令的而存在的,NMS向對方的Agent發送指令以後。Agent通過在本地執行一些操作來獲取數據,並且將獲取的結果返回給監控端。例如:磁盤空間,當前服務流量等。
但是任何一個人都向我們被監控端發送指令請求獲取我們的數據,那麼我們的隱密性九沒了,所以爲了避免這種情況,引入了一種簡單的認證機制(comminuty)社區的名字就是雙方通信的密碼。NMS端向被監控主機發送我就是cominuty:XXX,被監控端如果認可:XXX,就把數據返回過去。
SNMP v1版本中有3種comminuty模式: read-only,read-write,trap
read-only:管理端只能向被管理端發起獲取信息的請求,也就是隻能從被管理端讀信息的
read-write:管理端可以向被管理端發送控制指令,也就是管理端有權限去操作被管理端。例如:讓其shutdown
trap:被監控端能主動的去聯繫監控端的,告訴其這裏有問題。
SNMP是基於UDP協議的Agent(被監控端被動打開udp:161端口),NMS(監控端被動打開udp:162端口)
SNMP基於udp協議主要是速度快,tcp協議可靠,但是需要三次握手,如果被監控端報警急需要處理,三次握手之後被監控端已經down機了。
Linux上關於sbmp的軟件包有兩個
net-snmp 【snmp的Agent被監控端所用】
net-snmp-util 【監控端所要用的命令集合】
注意:對於被監控端而言,只需要這一個包net-snmp。對於監控端而言,正常情況下如果只是爲了獲取信息,無論是get/set,使用這一個包就行了net-snmp-utils,但是如果說我們要接收被監控端通過trap發過來的通知信息的話,那麼我們的監控端就必須要裝上net-snmp這個包,並啓用/etc/rc.d/init.d/snmptrapd 這個服務
六、舉例說明
Nagios 通過 NRPE 來遠端管理服務
1.Nagios 執行安裝在它裏面的 check_nrpe 插件,並告訴 check_nrpe 去檢測哪些服務。
2.通過 SSL,check_nrpe 連接遠端機子上的 NRPE daemon
3.NRPE 運行本地的各種插件去檢測本地的服務和狀態(check_disk,..etc)
4.最後,NRPE 把檢測的結果傳給主機端的 check_nrpe,check_nrpe 再把結果送到 Nagios狀態隊列中。
5.Nagios 依次讀取隊列中的信息,再把結果顯示出來。
下面通過一個監控遠端服務器 CPU 負載情況的實例,研究如何實現通過 NRPE 來管理遠端服務器。假設有一臺遠端服務器的 IP 是 10.20.0.110,Nagios 服務主機 IP 是:10.20.10.1。它們都已經安裝上了 nagios 系統,主機通過 NRPE 檢查運行中的服務器 CPU 的負載量,當負載量超過80%是發出警告(WARNING)報告,超過95%時發出緊急(CRITICAL)報告。在Nagios 的插件中存在 check_load -w $ARG1$ -c $ARG2$插件,通過查看其幫助,當 Nagios 調用它時,就會去檢查對象主機的CPU負載,達到$ARG1$指定的數值時就會發出警告(WARNING),達到$ARG2$時發出緊急報告(CRITICAL)。
首先是在遠端服務器上的修改:
1.讓 Nagios 用戶擁有對如下文件的所用權:
chown nagios.nagios /usr/local/nagios chown –R nagios.nagios /usr/local/nagios/libexec 然後如果沒有安裝 xinetd,則先安裝 xinetd。
2.按照 Nagios 文檔安裝好 nrpe 插件。
3.修改文件/etc/xinetd.d/nrpe:
only_from = 127.0.0.1 10.20.10.1(這個是 Nagios 主機的 IP)
nrpe 允許以上 IP 的機器通過 nrpe 查詢服務
4.在/etc/service 文件裏添加:
nrpe 5666/tcp #nrpe 然後 service xinetd restart
5.執行:netstat –at | grep nrpe
如果出現:tcp 0 0 *:nrpe *:* LISTEN 說明NRPE監聽已經成功啓動了
6.執行 /usr/local/nagios/libexec/check_nrpe –H localhost
出現 NRPE v 2.8.1 則安裝成功。
7.確認本地防火牆允許遠端服務器訪問 NRPE daemon:
iptables -IRH-Firewall-1-INPUT -p tcp -m tcp –dport 5666 -j ACCEPT service iptables save 8.打開/usr/local/nagios/etc/commands.cfg,找到 check_load 服務,修改如下:
define command { command_name check_server_load command_line $USER1$/check_load -w 80% -c 95% } 9.打開 /usr/local/nagios/etc/nrpe.cfg 可以看到裏面已經默認定義了一些檢測服務,如:
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users /usr/local/nagios /libexec/check_nrpe -H localhost -c check_load /usr /local/nagios/libexec/check_nrpe -H localhost -c check_hda1 註釋掉除 check_load 外的其它服務定義。
最後是 Nagios 主機上的修改:
1在 Nagios 主機上安裝 nrpe 插件。
2打開/usr/local/nagios/etc/command.cfg添加如下行:
define command{ command_name check_nrpe command_line $USER1$/check_nrpe –H 10.20.0.110 -c $ARG1$ 3再在對象定義的配置文件裏(host.cfg 文件),修改 host 爲要檢測的主機的 IP 地址,然後在服務中添加要檢測的命令:
define service { use linux-service service_description remote_CPU_Load check_command check_nrpe!check_load } 4在 nagios.cfg 主配置文件中,cfg_file 值爲 host.cfg,運行
/usr/local/nagios/bin/nagios –v /usr/local/nagios/etc/nagios.cfg 如果沒有錯就啓動 nagios:
service nagios start(restart,stop) 5打開瀏覽器:http://主機 IP/nagios
可以看到所監控的遠端機器的這個信息了(check_server_load的返回結果),參看圖2.正常狀態用綠色表示,一旦遠端服務器負載超過 80%,狀態信息就會變成紅色警告管理員。
(二)、
nagios監控應用分兩塊,一塊爲服務器端,一塊爲客戶端。服務端配置文件在/usr/local/nagios/etc/objects,即可以監控linux,又可以監控windows,同時也可以監控打印機,和交換機。同時也可以發郵件。
服務端監控linux服務器的文件爲/usr/local/ngios/etc/localhost.cfg,最主要分爲三塊。
define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.
host_name
alias
address
}
這個爲主機塊,需要告訴nagios,計算機名,別名,地址,使用的是 linux
define hostgroup{
hostgroup_name ; The name of the hostgroup
alias ; Long name of the group
members ; Comma separated list of hosts that belong to this group
}
這塊爲主機組名,別名,成員。
define service{
use local-service ; Name of service template to use
hostgroup_name
service_description checksapce_root
check_command check_local_disk!20%!10%!/root
}
這塊就是可以監控的本地的服務名。
define service{
use local-service ; Name of service template to use
hostgroup_name
service_description HTTP
check_command check_http
notifications_enabled 1
}
這塊跟上面一樣,最主要的是本地服務。
nagios即可以監控進程,也可以監控端口。/usr/local/nagios/libexec,這個目錄最主要放nagios監控插件,只要check_*** -h,就可以跟據顯示來增加參數。也可以自己寫腳本。
/usr/local/nagios/etc/cotacts.cfg,這份文件主要有兩塊,一塊是要發送的郵件,一塊是用戶名。
/usr/local/nagios/etc/commands.cfg,最主要添加命令參數。
/usr/local/nagios/etc/printer.cfg,是監控打印機參數。
/usr/local/nagios/etc/switch.cfg,是監控網絡設備,要開起snmp協議。
/usr/local/ngios/etc/templates.cfg,是監控服務器的一些網絡信息,比如能否通,是否宕機。
/usr/local/nagios/etc/timeperods.cfg,是時間上的監控,你可以哪段時間進行監控,哪段時間不監控。
/usr/local/nagios/etc/windows.cfg,是監控windows服務器的
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 這句話是可以檢查你的配置文件那條有錯。
在/usr/local/nagios/etc/resource.cfg文件裏面你可以增加用戶,比如oracle
在客戶端裏面最主要改的是/usr/local/nagios/etc/nrpe.cfg 這份文件,根據服務端的設置來增加參數
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda2]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
#command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
command[check_swap]=/usr/local/nagios/libexec/check_swap -a -w 50 -c 30
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda2
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda5
command[check_tcp]=/usr/local/nagios/libexec/check_tcp -H host145 -p 1521 -c 2 -w 1
command[check_oracle]=/usr/local/nagios/libexec/check_oracle --db olbak
command[check_oracle1]=/usr/local/nagios/libexec/check_oracle --db ORAUP02
command[check_oracle2]=/usr/local/nagios/libexec/check_oracle --db smssite
command[check_oracle3]=/usr/local/nagios/libexec/check_oracle --db jt2
command[check_oracle4]=/usr/local/nagios/libexec/check_oracle --db jt3
command[check_mem]=/usr/local/nagios/libexec/mem.sh -w 10 -c 5
最後需要做的是啓動客戶端,/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
這樣就能和服務端很好的配合進行監控。nagios的監控端口是5666,tcp的,記得一定要開。
參考文章:
http://fifiole.blog.163.com/blog/static/169459225201231131317469/
http://blog.chinaunix.net/uid-20527159-id-3484263.html
http://www.linuxidc.com/Linux/2013-11/92788.htm
http://www.cnblogs.com/zhuhongbao/p/4174868.html