Nagios是插件式的結構,它本身沒有任何監控功能,所有的監控都是通過插件進行的,因此其是高度模塊化和富于彈性的。Nagios監控的對象可分為兩類:主機和服務。主機通常指的是物理主機,如服務器、路由器、工作站和打印機等,這里的主機也可以是虛擬設備,如xen虛擬出的linux系統;而服務通常指某個特定的功能,如提供http服務的httpd進程等。而為了管理上的方便,主機和服務還可以分別被規劃為主機組和服務組等。
Nagios不監控任何具體數值指標(如操作系統上的進程個數),它僅用四種抽象屬性對被監控對象的狀態進行描述:OK、WARNING, CRITICAL和UNKNOWN。于是,管理員只需要對某種被監控對象的WARNING和CRITICAL狀態的閾值進行關注和定義即可。Nagios通過將WARTING和CRTICAL的閾值傳遞給插件,并由插件負責某具體對象的監控及結果分析,其輸出信息為狀態信息(OK,WARNING,CRITICAL或UNKOWN)以及一些附加的詳細說明信息。
2 特性由上述說明可以,Nagios是極富彈性的,其監控功能完全可以按照管理員的期望進行。此外,它外提供了對問題的自動響應能力和一個功能強大的通知系統。所有這些功能的實現是基于一個結構明晰的對象定義系統和少數幾個對象類型實現的。
1)命令(Commands)
“命令”用于定義Nagios如何執行某特定的監控工作。它是基于某特定的Nagios插件定義出的一個抽象層,通常包含一組要執行的操作。
2)時段(Time periods)
“時段”用于定義某“操作”可以執行或不能執行的日期和時間跨度,如工作日內的每天8:00-18:00等;
3)聯系人和聯系人組(Contacts and contact groups)
“聯系人”用于定義某監控事件的通知對象、要通知的信息以及這些接收通知者何時及如何接收通知;一個或多個聯系人可以定義為聯系人組,而一個聯系人也可以屬于多個組;
4)主機和主機組(host and host groups)
“主機”通常指某物理主機,其包括此主機相關的通知信息的接收者(即聯系人)、如何及何時進行監控的定義。主機也可以分組,即主機組(host groups),一個主機可同時屬于多個組;
5)服務(Services)
“服務”通常指某主機上可被監控的特定的功能或資源,其包括此服務相關的通知信息的接收者、如何及何時進行監控等。服務也可以分組,即服務組(Service groups),一個服務可同時屬于多個服務組;
3 相關概念3.1 依賴關系Nagios的強大功能還表現在其成熟的依賴關系系統上。比如,某路由設備故障必然會導致關聯在其上的其它主機無法被正常訪問,如果不能定義這些設備間的依賴關系,那么監控系統上必然會出現大量的設備故障信息。而Nagios則通過依賴關系來描述網絡設備的拓撲結構,并能夠實現在某設備故障時不再對依賴于此設備的其它設備進行檢測,從而避免了無謂的故障信息,方便管理員及時定位并排除故障。此外,Nagios的依賴關系還可以在服務級別上實現,如果某服務依賴于其它服務時,也能實現類似主機依賴關系的功能。
3.2 宏Nagios還能夠使用宏,并且宏的定義在整個Nagios系統中具有一致性。宏是能夠用于對象定義中的變量,其值通常依賴于上下文。在“命令”中定義的宏,相對于主機、服務或其它許多參數來說,其值會隨之不同。比如,某命令可以根據向其傳遞的ip地址的不同來監控不同的主機。
3.3 計劃中宕機Nagios還提供了調度性計劃中的宕機機制,管理員可以周期性的設定某主機或服務為計劃中的不可用狀態。這種功能可以阻止Nagios在調度宕機時段通知任何信息。當然,這也可以讓Nagios自動通知管理員該進行主機或服務維護了。
3.4 軟狀態和硬狀態(Soft and Hard States)如上所述,Nagios的主要工作是檢測主機或服務的狀態,并將其存儲下來。某一時刻,主機或服務狀態僅可以是四種可用狀態之一,因此,其狀態能夠正確反映主機或服務的實際狀況就顯得特別關鍵。為了避免某偶然的臨時性或隨機性問題,Nagios引入了軟狀態和硬狀態。在實際的檢測中,Nagios一旦發現某主機或服務的狀態為UNKOWN或不同于上一次檢測時的狀態,其將會對此主機或服務進行多次測試以確保此狀態的變動是非偶然性的。具體共要做出幾次測試是可以配置的,在這個指定次數的測試時段內,Nagios假設此變化后的狀態為軟件狀態。一旦測試完成后狀態仍然為新變的狀態時,此狀態就成了硬狀態。
4 安裝篇見詳細安裝文檔5 相關配置及參數詳解5.1 Nagios的主配置文件Nagios的主配置文件為nagios.cfg,其語法非常簡潔,通常#開頭的行為注釋行,而參數的設置格式為<parameter>=<value>;其中,有些參數是可以重復出現的。其中常用的參數說明如下:
log_file: 設定Nagios的日志文件;
cfg_file: Nagios對象定義的相關文件,此參數可重復使用多次以指定多個文件;
cfg_dir: 設定Nagios對象定義的相關文件所在的目錄,此目錄中的所有文件都會被作為對象定義的文件;此參數可重復使用多次以指定多個目錄;
resource_file: 設定Nagios附加的宏定義的相關文件;
status_file: 設定Nagios存儲所有主機和服務當前狀態信息的文件;
status_update_interval: 設定status_file指定的文件中狀態信息的更新頻率;
service_check_timeout: 設定服務檢測的超時時間,默認為60秒;
host_check_timeout: 設定主機檢測的超時時間,默認為30秒;
notification_timeout: 設定通知信息發送嘗試的超時時間,默認為30秒;
5.2 resource_file和宏定義在主配置文件中,參數resource_file用于定義所有用戶變量(即“宏”)的存儲文件,它用于存儲對象定義中的可以訪問的額外信息,如訪問某服務的密碼等;因此,這些信息通常都是些敏感數據,一般不允許通過Web接口來訪問。此文件中可以定義的宏可多達32個,它們分別為$USER1$,$USER2$...$USER32,這些宏一般在check命令中引用。通常情況下$USER1$用于引用Nagios插件所在目錄這個路徑信息,因此,一般不建議修改其值。
Nagios事先定義了許多宏,它們的值通常依賴于其上下文。
如下:
HOSTNAME: 用于引用host_name指定所定義的主機的主機名;每個主機的主機名都是唯一的;
HOSTADDRESS: 用于引用host對象中的address指令的值,它通常可以為IP地址或主機名;
HOSTDISPLAYNAME: 用于引用host對象中alias指令的值,用以描述當前主機,即主機的顯示名稱;
HOSTSTATE:某主機的當前狀態,為UP,DOWN,UNREACHABLE三者之一;
HOSTGROUPNAMES: 用于引用某主機所屬的所有主機組的簡名,主機組名稱之間以逗號分隔;
LASTHOSTCHECK:用于引用某主機上次檢測的時間和日期,Unix時間戳格式;
LISTHOSTSTATE:用于引用某主機前一次檢測時的狀態,為UP,DOWN或UNREACHABLE三者之一;
SERVICEDESC: 用于引用對應service對象中的desccription指令的值;
SERVICESTATE: 用于引用某服務的當前狀態,為OK,WARNING,UNKOWN或CRITICAL四者之一;
SERVICEGROUPNAMES: 用于引用某服務所屬的所有服務組的簡名,服務組名稱之間以逗號分隔;
CONTACTNAME: 用于引用某contact對象中contact_name指令的值;
CONTACTALIAS: 用于引用某contact對象中alias指令的值;
CONTACTEMAIL: 用于引用某contact對象中email指令的值;
CONTACTGROUPNAMES: 用于引用某contact所屬的所有contact組的簡名,contact組名稱之間以逗號分隔;
注:
Nagios 3還支持自定義宏,只是它的定義和使用方式比較獨特。管理員可以在某類型對象的定義中使用額外的指令,并能夠在命令中使用特別格式的宏來引用此指令的值。其引用方式根據對象類型的不同也有所不同,具體如下:
$_HOST<variable>$ – 引用在主機對象中定義的指令的值;
$_SERVICE<variable>$ – 引用在服務對象中定義的指令的值;
$_CONTACT<variable>$ – 引用在聯系人對象中定義的指令的值;
5.3 定義主機中notification_options選項參數含義其中的notification_options用于指定當主機處于什么狀態時應該發送通知。其各狀態及其表示符如下:
d —— DOWN
u —— UNREACHABLE
r —— UP(host recovery)
f —— flapping
s —— 調試宕機時間開始或結束
5.4 定義服務中notification_options選項參數含義其中的notification_options用于指定當服務處于什么狀態時應該發送通知。其各狀態及其表示符如下:
w —— WARNING
u —— UNKNOWN
c —— CRITICAL
r —— OK(recovery)
f —— flapping
s —— 調試宕機時間開始或結束
5.5 定義服務組define servicegroup
{
servicegroup_name webservices
alias All services related to web
members webserver1,www,webserver2,www
}
5.6 定義主機組define hostgroup
{
hostgroup_name webservers
alias Linux web servers
members webserver1
}
5.7 定義聯系人組define contactgroup
{
contactgroup_name linux-admins
alias Linux Administrators
members magedu, mageedu
}
5.8 定義模板Nagios通過功能強大的繼承引擎來實現基于模板的對象繼承。這就意味著可以定義將某類型的對象的通用屬性組織起來定義為對象模板,并在定義其類型中的對象時直接從此模板繼承其相關屬性的定義。定義對象模板的方法很簡單,通常只需要在定義某類型對象時使用register指令并將其值設定為0即可。對象模板的名稱通常使用name指令定義,這與某特定類型對象使用的指令也有所不同。而定義此種類型的對象時,只需要使用use指令并將其值設定為對應模板的名稱即可。
check_interval 5 #每5分鐘檢測一次
retry_check_interval 1 #出現問題時每1分鐘重檢測一次
max_check_attempts 3 #檢測失敗后最大重試次數
notification_interval 10 #10分鐘發送一次警報
notification_period 24x7 #發送警報的時間段
notification_options w,u,c,r #什么情況發送警報
5.9 配置cgi.cfg文件1、配置nagios頁面刷新時間
2、配置不同用戶為只讀權限
1)創建nagios用戶
root@wang:/usr/local/nagios/etc# /usr/bin/htpasswd /usr/local/nagios/etc/htpasswd.users wang
New passWord:
Re-type new password:
Adding password for user wang
root@wang:/usr/local/nagios/etc# cat /usr/local/nagios/etc/htpasswd.users
nagiosadmin:GFyDMApK3t6ys
wang:vkH7qZYVLEXSo
2)配置cgi.cfg,用戶為只讀
root@wang:/usr/local/nagios/etc# vim cgi.cfg
查看報警信息有四種方式,基于nagios頁面本身報警;基于網頁插件報警;基于Nagstamon工具報警;基于第三方郵件發送報警。
1)修改配置文件/usr/local/nagios/etc/cgi.cfg
root@wang:~# vim /usr/local/nagios/etc/cgi.cfg ; 將以下幾行注釋去掉
host_unreachable_sound=YinPing.wav ; 音頻文件名
host_down_sound=YinPing.wav
service_critical_sound=YinPing.wav
service_warning_sound=YinPing.wav
service_unknown_sound=YinPing.wav
#normal_sound=noPRoblem.wav
注:要修改音頻的文件名
2)將WAV音頻文件上傳至/usr/local/nagios/shara/media/目錄下
root@wang:~# ls /usr/local/nagios/share/media/
YinPing.wav
3)重啟nagios
root@wang:~# /etc/init.d/nagios restart
4)將服務Down掉,查看是否有報警聲
此時發現報警聲只響一聲,原音在于nagios每檢測到服務出故障時默認只報警一聲。如要連續多聲報警,可從更必源碼包nagios/cgi/status.c配置文件參數,再重新編譯nagios即可。
if(sound != NULL) {
printf("<object type=/"audio/x-wav/" data=/"%s%s/" height=/"0/" widt
h=/"0/">", url_media_path, sound);
printf("<param name=/"filename/" value=/"%s%s/">", url_media_path, s
ound);
printf("<param name=/"autostart/" value=/"true/">");
printf("<param name=/"playcount/" value=/"100/">");
printf("</object>");
}
將標紅處改成想要報警聲次數
1) 下載火狐瀏覽器
2) 到工具欄點擊附加組件管理器添加nagios checker插件安裝
2)安裝后點擊選項(新增)
3)依次按如下圖自行設置
注:其他配置可自行通過相關選項定義
4)現在服務Down,只要開著火狐瀏覽器,就可聽到服務報警聲音。
3、基于Nagstamon小工具報警
1)下載安裝:https://nagstamon.ifw-dresden.de/download工具進行如下圖配置即可
4、基于SendEmail郵件報警
此步驟可參數naigos詳細安裝文檔操作。
7 Nagios監控windows1.NSClient原理圖:
2. NSClient與nrpe最大的區別就是:
--被監控機上安裝有nrpe,并且還有插件,最終的監控是由這些插件來進行的.當監控主機將監控請求發給nrpe后,nrpe調用插件來完成監控.
--NSClient則不同,被監控機上只安裝NSClient,沒有任何的插件.當監控主機將監控請求發給NSClient后,NSClient直接完成監控,所有的監控是由NSClient完成的.
這也說明了NSClient的一個很大的問題,不靈活,沒有可擴展性.它只能完成自己本身包含的監控操作,不能由一些插件來擴展.好在NSClient已經做的不錯了,基本上可以完全滿足我們的監控需要.
7.1 NSClient++ 安裝及配置NSClient++下載地址:http://sourceforge.net/projects/nscplus/files/nscplus/
1)輸入nagios服務器地址
2)修改配置文件NSC.ini
1)監控windows主機的Explorer.exe進程運作狀況,如程序終止,則會發Critical
defineservice{
host_namewinxp226
service_description Explorer
use generic-service
check_command check_nt!PROCSTATE!-dSHOWALL-lexplorer.exe
register1
}
7.3 監控服務1)監控windows主機的W3SVC設置的動作狀況
defineservice{
host_namewinxp226
use generic-service
service_descriptionW3SVC
check_commandcheck_nt!SERVICESTATE!-dSHOWALL-lW3SVC
}
2)監控Windows主機的MySQL服務運行情況,如服務終止,則會發出CRITICAL
defineservice{
host_name winxp226
service_description MySQL55
usegeneric-service
check_command check_nt!SERVICESTATE!-dSHOWALL-lMySQL55
register 1
}
3)監控windows主機的SNMP服務的運作狀況,如服務終止,則會發CRITICAL
defineservice{
usegeneric-service
host_namewinxp226
service_description SNMP
check_command check_nt!SERVICESTATE!-dSHOWALL-l"SNMPService"
}
注意:此服務名稱應與Windows服務名稱相同,如服務中間有空格時請將其放入雙引號內,否則將會報無效的參數。如下圖
作用:
檢測指定主機上的http服務,可以是http或者https,可以重定向,查找字符串,正則表達式,檢測鏈接次數,證書過期時間。
用法:
check_http -H| -I[-u] [-p]
[-w] [-c] [-t] [-L] [-a auth]
[-b proxy_auth] [-f]
[-e] [-s string] [-l] [-r| -R]
[-P string] [-m:] [-4|-6] [-N] [-M]
[-A string] [-k string] [-S] [--sni] [-C] [-T]
[-j method]
選項:
1)-H 和-I 必須指定一個或者兩個都寫
H, --hostname=ADDRESS
主機名,支持虛擬主機,也可以添加端口。
-I, --IP-address=ADDRESS
使用IP地址或者名字(直接使用數字的IP可以不適用dns解析)
2)-p, --port=INTEGER
Port number (default: 80)
檢測端口,默認是80
3)-4, --use-ipv4 -6, --use-ipv6
使用ipv4或者ipv6連接
4)-S, --ssl
通過ssl鏈接
5)--sni
啟用SSL/TLS支持主機名擴展
6)-C, --certificate=INTEGER
證書有效地時間
7)-e, --expect=STRING
用“,”分割的字符串列表,預期至少有一個出現在服務響應的第一列。
服務器響應的第一行:是狀態行,由協議版本,數字狀態碼,和相關的原因文本短語組成。
8)-s, --string=STRING
在返回的頁面中出現的字符串
9)-u, --url=/'#/'" /span>
訪問資源的路徑,默認是/
10)--invert-regex
如果搜索到就返回critical,如果沒有就返回OK,和-r/-R結合。不可以和-s結合使用。
11)-a, --authorization=AUTH_PAIR
用戶名密碼 基于網站的基本認證
12)-b, --proxy-authorization=AUTH_PAIR
代理服務器的用戶名密碼
13)-m, --pagesize=INTEGER<:INTEGER>
頁面大小需要 最?。鹤畲?單位:bytes)
14)-w, --warning=DOUBLE
告警響應時間
15)-c, --critical=DOUBLE
發送危險警告的響應時間
16)-t, --timeout=INTEGER
連接超時時間
實例:
1)-u測試頁面 是否可以到開 可以用相對路徑和絕對路徑
-H -I 有一個就可以
相對路徑
#./check_http -H www.****.com -u /url1/url2/index.html
絕對路徑
#./check_http -H www.****.com -u http://www.****.com/url1/url2/index.html
端口,默認就是80
#./check_http -H www.****.com -p 80 -u http://www.****.com/url1/url2/index.html
使用數字IP
#./check_http -I xxx.xxx.xxx -u /url1/url2/index.html
2)加密傳輸 -S
# ./check_http -H "log.gw.com.cn" -S
Connection refused
HTTP CRITICAL - Unab
le toopenTCP socket
3)測試服務器的http版本協議或者狀態返回碼 -e
# ./check_http -I 114.80.136.138 -k "HOST:log.gw.com.cn" -e "HTTP/1.1"
HTTP OK: Statuslineoutput matched "HTTP/1.1" - 3088 bytes in 0.206 second response time |time=0.205964s;;;0.000000 size=3088B;;;0
# ./check_http -I 114.80.136.138 -k "HOST:log.gw.com.cn" -e "HTTP/1.0"
HTTP CRITICAL - Invalid HTTP response received from host: HTTP/1.1 200 OK
4)搜索返回的頁面中的內容 -s
# ./check_http -I 114.80.136.138 -k "HOST:log.gw.com.cn" -s "Piwik"
HTTP OK: HTTP/1.1 200 OK - 3088 bytes in 0.196 second response time |time=0.196134s;;;0.000000 size=3088B;;;0
$ curl 114.80.136.138 -H "host:log.gw.com.cn" 顯示的頁面中出現的“Piwik”
5)以用戶名密碼訪問一個需認證的頁面 -a;
# ./check_http -I 10.15.62.38 -u /nagios/
HTTP WARNING: HTTP/1.1 401 Authorization Required - 726 bytes in 0.019 second response time |time=0.019393s;;;0.000000 size=726B;;;0
# ./check_http -I 10.15.62.38 -u /nagios/ -a nagiosadmin:nagios
HTTP OK: HTTP/1.1 200 OK - 917 bytes in 0.066 second response time |time=0.066009s;;;0.000000 size=917B;;;0
6、連接超時的時間 -t;
# ./check_http -I 10.15.62.38 -t 1
HTTP OK: HTTP/1.1 200 OK - 38056 bytes in 0.017 second response time |time=0.017460s;;;0.000000 size=38056B;;;0
7、定義warning和critical的告警閥值:-w和-c;
8、檢測返回的頁面大小 -m ;
# ./check_http -H "log.gw.com.cn" -I 114.80.136.151 -m 10:400
HTTP WARNING: HTTP/1.1 200 OK - page size 3128 too large - 3128 bytes in 0.223 second response time |time=0.223207s;;;0.000000 size=3128B;10;0;0
返回的頁面是3128 bytes,超過了最大限制400,發出了報警。
9、檢測證書是否過期 -C
#check_http -H www.verisign.com -C 14
證書過期時間大于14天 返回OK狀態;證書還有0-14天過期,返回警告信息;證書已經過期,返回緊急狀態。
10、設置返回的http的頭部信息 -A
# ./check_http -H "log.gw.com.cn" -v
GET / HTTP/1.1
User-Agent: check_http/v1.4.16 (nagios-plugins 1.4.16)
Connection: close
Host: log.gw.com.cn
# ./check_http -H "log.gw.com.cn" -v -A "check_http"
GET / HTTP/1.1
User-Agent: check_http
Connection: close
Host: log.gw.com.cn
11、只顯示頭部信息,不顯示頁面信息。 -N
# ./check_http -H "log.gw.com.cn" -I 114.80.136.151 -N
HTTP OK: HTTP/1.1 200 OK - 1460 bytes in 0.219 second response time |time=0.218590s;;;0.000000 size=1460B;;;0
# ./check_http -H "log.gw.com.cn" -I 114.80.136.151
HTTP OK: HTTP/1.1 200 OK - 3128 bytes in 0.220 second response time |time=0.220288s;;;0.000000 size=3128B;;;0
7.5 自定義開發監控腳本1. 定義 nagios返回的狀態變量(非常重要,nagios就是根據狀態定義才決定是否報警)STATE_OK=0STATE_WARNING=1STATE_CRITICAL=2STATE_UNKNOWN=3
2. 案例
root@wang:/usr/local/nagios/libexec# vim 123.sh
a=2
STATE_WARNING=1
if [ $a -eq 2 ]
then
echo "CRITICAL - two is Warning!!"
exit $STATE_WARNING
fi
3. 效果:
新聞熱點
疑難解答