Nagios企業監控講解linux
1、關於Nagiosios
Nagioss 是經典老牌子監控,伴隨着一代運維工程師們路路成長,即使到了如今也普遍在企業中使用。Nagios有三個特色決定了它屹立不倒的優點:nginx
第一: Nagios跟其餘監控產品比起來是部署和配置最便便捷,沒有之一,且最容易易入門的開源監控產品. 企業的老總們最喜歡的就是省時快速的完成工做git
第二:Nagios對於各類基礎服務層面的監控就是兩個字"完善"這得益於Nagios的不少對於監控項目的基本計算方式都十分的直接有效,且很是符合通常人們對於"監控"的實現理理念.web
第三:新的監控產品雖然不少,可是這裏有一個奇怪現象:通常企業中面試運維工程師/架構師,到了監控這里不問別的就愛問Nagios相關的問題。對於各個企業來講,已是用來考覈一個合格的運維工程師的基本素養的指標了了。面試
2、Nagios的兩種核心工做模式shell
一、nagios的第一種工做模式:遠程直連採集apache
遠程直連採集工做模式是什麼意思呢?Nagios的監控服務器端須要採集被監控機器器的數據,而被監控機器器上的一些數據例如:vim
IP地址通不通centos
端口通不通
二、Nagios第二種工做模式:橋接間接採集
CPU負載,硬盤剩餘,進程存在等等,相似這樣的數據自己並不不是一個"服務"比如硬盤剩餘多少,這是一項客戶端Linux系統上的自身的狀態自己不像SSH服務同樣能夠被外界直接訪問到,若是nagios服務端想獲取客戶端硬盤情況沒有辦法直接從網絡連上去獲取,那怎麼辦呢?這就要提到 Nagios的一個擴展功能,NRPE組件。
三:開始安裝Nagios服務端和NRPE組件
首先作linux服務器時間同步
時間服務器能夠從http://www.pool.ntp.org/zh/這裏查看
[root@elk ~]# ntpdate 1.cn.pool.ntp.org
因爲咱們的yum源不包含nagios包,因此要先安裝一下epel-release。
[root@Cent65 ~]# yum -y install epel-release
nagios自己不不帶web server,可是須要以web的形式體現出來,因此須要先安裝httpd(apache)
1、安裝http
[root@Cent65 ~]# yum install httpd
安裝完成後啓動服務,檢查是否安裝成功。
root@Cent65 ~]# service httpd restart
[root@Cent65 ~]# netstat -anptu | grep 80
查看一下網站信息
[root@Cent65 ~]# curl -I 192.168.1.65
2、安裝nagios*、nrpe
[root@Cent65 ~]# yum install nagios* nrpe
安裝完以後啓動
[root@Cent65 ~]# service nagios start
啓動以後咱們來設置⼀下nagios的初始登陸密碼:
這裏咱們默認用nagiosadmin做爲登陸名,密碼爲123456
(注:若是web管理理員不是使用默認的nagiosadmin, 須要修改cgi.cfg
# vim /usr/local/nagios/etc/cgi.cfg
//把全部的nagiosadmin改成自定義的用戶名)
[root@Cent65 ~]# htpasswd -c /etc/nagios/passwd nagiosadmin
接下來在咱們的瀏覽器輸入:
4、Nagios如何設置配置文件(一):節點定義.
配置文件路徑
[root@Cent65 ~]# cd /etc/nagios/objects
以下即是咱們要找到的配置路路徑能夠看到已經有好多以cfg結尾的默認配置文件了,不過這些其實都是一些自帶的模板咱們當前用不上,咱們先關注 localhost.cfg文件。
一、 定義節點
[root@Cent65 objects]# vim 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 Centos_67 alias localhost address 192.168.1.67 }
咱們能夠經過複製這段文件把要被監控的機器加進來。
須要修改的地方:
host_name:Centos_67(注:Centos_67這是本身取的名字是惟一標識符號,不能夠重複,後面會被反覆的調用,名字能夠隨便取,建議FQDN)。
alias:別名,任意取名。
address:被監控節點的 IP地址。
添加完節點以後重啓nginx
[root@Cent65 objects]# service nagios restart
接下來回到咱們的瀏覽器http://192.168.1.65/nagios/
點擊左側的host按鈕,在咱們的監控列表中會出現Centos_67主機。
5、Nagios如何設置配置文件(二):組定義和Service定義
在Nagios中各個節點的定義畢竟是分散的,咱們能夠將屬於一類的'節點' 統一成一個'組'。接下來咱們來看下配置文件的定義:
define hostgroup{ hostgroup_name ceshi ; The name of the hostgroup alias Linux Servers ; Long name of the group members localhost,Centos_67 ; Comma separated list of hosts that belong to this group }
如上這一段添加到localhost.cfg,就是把以前的節點(包括本機)都加入到一個host_group組當中。
hostgourp_name定義組名稱很好理理解
alias 是起一個組別名
members後面接上各個節點的host_name,注意這裏的host_name 就是節點當中的 host_name,必須一致,名稱用逗號公開,且不可使用別名。
而後繼續重啓nagios。
[root@Cent65 objects]# service nagios restart
打開網頁界面:點擊左側的Host Groups按鈕。會顯示出咱們剛纔設置的ceshi組。
6、Nagios service(服務)的定義
定義服務,就是來定義咱們須要監控的主機上面跑的服務。
咱們來看以下這一段,取自localhost.cfg中這一段就是默認模板提供的 service定義方法用來監控機器器各種服務(軟件)
defineservice{ use local-service ;Nameofservice templatetouse host_name localhost service_description SSH check_command check_ssh notifications_enabled 0 }
Use:字段咱們保留不更改。
host_name:
這裏寫上在define_host當中定義的節點名字注意必須跟以前的host_name一致否則Nagios找不到,這裏也再次證實了,定義節點是多麼的關鍵,後續會大量的二次引用。
service_description
這裏僅僅是這一項服務監控的註解,能夠隨意寫成你要的名字。
check_command這是最關鍵的一項了,定義這項服務監控具體要監控什麼內容調什麼監控腳本去執(後我會講到腳本自定義)。
notifications_enabled:
是否開啓提醒功能。1爲開啓,0爲禁用。也就是是否啓報警。也就是是否開啓報警針對這一項服務的監控(我後面會講到報警 Pagerduty)。
接下來咱們來作一個Centos_67上的SSH服務監控,繼續在localhost.cfg文件中添加定義如下內容:
define service{ use local-service ; Name of service template to use host_name Centos_67 service_description SSH check_command check_ssh notifications_enabled 0 }
重啓nagios服務後再來看一下nagios的主頁.
選擇左側的services,發現已經有了Centos_67的ssh監控。
接下來,咱們來監控一下http服務。在localhost.cfg後面添加以下配置:
defineservice{ use local-service ;Nameofservice templatetouse host_name Centos_67 service_description HTTP check_command check_http notifications_enabled 0 }
客戶端要提早安裝好http服務並啓動,咱們以apache爲例:
[root@cent67 ~]# yum -y install httpd
[root@cent67 ~]# service httpd start
登陸nagios網頁端查看:
那麼若是咱們要監控的網站使用的不是默認80端口,而是指定的其餘端口怎麼辦呢?咱們如何來靈活的改動監控呢?
7、服務監控插件的配置
上面這一段service配置中,紅色標記的部分,之因此能直接調用check_http並非憑空出現的,而是有依據的。這個依據就是nagios的插件(咱們以前安裝的時候不是安裝了不少nagios-plugins這個就是插件)。
nagios定義service中check_command其實就是經過調用插件當中預先設置好的這些腳本(check_http其實就是個腳本)才能實現監控的。
咱們來分析下這些腳本和插件的關聯:
(1)首先從rpm中先找到跟http相關的nagios插件
[root@centos65 objects]# rpm -qa | grep nagios-plugins | grep http
check_http這個腳本其實就來自於這個插件。
(2)接下來咱們來查看這個插件中都包含了什麼具體文件(腳本)
[root@centos65 objects]# rpm -ql nagios-plugins-http-2.2.1-4git.el6.x86_64
/usr/lib64/nagios/plugins/check_http
如上就能夠看到,其實check_http是放在了一個默認的nagios插件路徑當中了,做爲腳本被 nagios調用。
(3)check_http這個腳本找到後,咱們在Linux本地來試一下。
[root@centos65 objects]# /usr/lib64/nagios/plugins/check_http -H 192.168.1.67
HTTP OK: HTTP/1.1 200 OK - 253 bytes in 0.001 second response time |time=0.000980s;;;0.000000 size=253B;;;0
發現原來這個腳本不光能夠被nagios的check_command直接調用 它自身還能夠直接被我們執行並能返回結果。
(4)咱們把Centos_67的 httpd端口改到8080
改好以後本來的nagios配置的check_http就監控不到了。
[root@centos65 objects]# /usr/lib64/nagios/plugins/check_http -H 192.168.0.66
那麼怎麼辦呢?咱們如今Linux本地試試check_http腳本是 否支持端口改變。
[root@centos65 objects]# /usr/lib64/nagios/plugins/check_http -H 192.168.0.66 -p8080
手動本地運行測試,咱們能夠靈活改動,如今咱們須要創建和nagios的關聯)接下來我們就來看看怎麼創建這樣的關聯。首先咱們先找到這個配置文件:
/etc/nagios/objects/commands.cfg
此文件中這一段配置,
實際上是把check_http定義出來名稱以及使用方法參數如何調用都是在這裏設置的。因此說,在define_service中的check_http,其實 先要在command.cfg中定義出來。來看一下這一行:
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
$USER1$:/usr/lib64/nagios/plugins/check_xxxx
$ARG1$:這個參數的值是須要在service中自行定義添加進去的 (define_service,ARG1傳參數)。
接下來一段defineservice的定義:
defineservice{ use local-service ;Nameofservice templatetouse host_name Centos_67 service_description HTTP check_command check_http!-p8080 notifications_enabled 0 }
注意紅色標記部分,這就是在service中調用監控腳本時候,添加額外參數的方法 使用!分開,參數的使用方法跟本地命令行是如出一轍的。接下來看一下監控的Centos_67機器的HTTP服務就正常了。
8、經過NRPE創建橋接方式監控
剛纔舉的幾個例子其實都是屬於以前說過的nagios第一種監控形式"直接鏈接監控",那若是想監控例如CPU硬盤內存怎麼辦呢?天然就是要使第二種形式"間接橋接獲取",經過NRPE這個插件來實現。
接下來開始安裝間接監控NRPE:
(1)首先須要在Nagios的服務端和被監控客戶端都安裝NRPE和nagios-plugins兩個組件。
開始服務端安裝的時候yum install nrpe(nagios-plugins*以前已經安裝過了),因此如今不用安裝了。
客戶端安裝:
先安裝一下epel-release,來提供咱們的安裝包。
[root@centos66 ~]# yum -y install epel-release
接下來安裝插件:
[root@Cent67 ~]# yum install -y nrpe nagios-plugins*
(2)
①接下來回到服務端Centos_65, 到localhost.cfg配置文件,末尾加入以下內容:定義check_nrpe:
define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
②再在nagios服務端localhost.cfg配置文件末尾再添加以下的一項service,用來監控Centos_67上面的CPU的負載情況:
define service{ use local-service ;Name of service template to use host_name Centos_67 service_description UPTIME check_command check_nrpe!check_cpu notifications_enabled 0 }
③接下來配置客戶端
check_cpu這個腳本屬於間接獲取數據使用,因此check_cpu只能是在客戶端上被調用而後採集客戶端上的CPU負載數據, 以前設置在服務端上的check_nrpe其實只能調用到客戶端的check_nrpe,並不能調用到客戶端上的check_cpu腳本.因此,只能是客戶端的nrpe調用本地的check_cpu腳本,那麼接下來就須要把客戶端nrpe和check_cpu腳本關聯起來。
check_cpu在客戶端上必須2個地方都有。
第1處是NRPE在客戶端上關聯命令的設置:
[root@centos67~] # cat /etc/nrpe.d/lcgdm-common.cfg command[check_cpu]=/usr/lib64/nagios/plugins/lcgdm/check_cpu command[check_network]=/usr/lib64/nagios/plugins/lcgdm/check_network command[check_process]=/usr/lib64/nagios/plugins/lcgdm/check_process -p rfiod,globus-gridftp-server command[check_hostcert]=/usr/lib64/nagios/plugins/lcgdm/check_hostcert -C /etc/grid-security/hostcert.pem -s 第2處是:/usr/lib64/nagios/plugins/lcgdm/check_cpu
[root@centos66 ~]# ls /usr/lib64/nagios/plugins/lcgdm/check_cpu /usr/lib64/nagios/plugins/lcgdm/check_cpu
④服務端和客戶端都要啓動NRPE軟件,確認工做在5666端口。
[root@centos65 objects]# service nrpe start Starting nrpe [肯定] [root@centos65 objects]# netstat -antpu | grep 5666 tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 53633/nrpe tcp 0 0 :::5666 :::* LISTEN 53633/nrpe
[root@centos67 ~]# service nrpe start Starting nrpe [肯定] [root@centos66 ~]# netstat -antpu | grep 5666 tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 53202/nrpe tcp 0 0 :::5666 :::* LISTEN 53202/nrpe
⑤修改一下客戶端上的nrpe主配置文件,不然nagios服務端連不上。
[root@centos67 ~]# vim /etc/nagios/nrpe.cfg
修改:allowed_hosts=192.168.1.65
192.168.1.65爲nagios服務端IP。修改完以後重啓rnpe服務。
[root@centos67 ~]# service nrpe restart
⑥在服務端作個本地測試
[root@centos65 objects]# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.1.67
出現nrpe版本號,表示成功。
最後到nagios主頁來看一下,已經監控到客戶端cpu的狀況了。
9、本身編寫監控腳本,並嵌入進nagios
以前咱們在使用的監控項目都是nagios和nagios_plugins*插件包提供的。其實Nagios插件是徹底支持本身動手編寫的,看被監控端以下這一段shell代碼:
[root@cent67 ~] # vim /usr/lib64/nagios/plugins/check_waiting_connect
(以check_waiting_connect做爲咱們的腳本名稱。全部自行編寫的腳本都放在vim /usr/lib64/nagios/plugins/這個路徑下)
#!/bin/bash STATE_OK=0 STATE_CRITICAL=2 W=`netstat -an | grep -i wait | wc -l` if [ $W -le 1000 ]; then echo "OK,waiting_connections<1000 low" exit $STATE_OK; else echo "WARING, waiting_connections>1000high" exit $STATE_CRITICAL fi
(腳本實現的內容很簡單,就是經過netstat命令來獲取Linux系統中的等待連接數(waitting_connections) 若是大於1000就報警,小於1000就屬於正常)。
Nagios能夠識別4種狀態返回信息,
0(OK)表示狀態正常/綠色、
1(WARNING)表示出現警告/huangs色(系統自動和諧治好寫拼音)
2(CRITICAL)表示出現很是嚴重的錯誤/紅色
3(UNKNOWN)表示未知錯誤/深huangs色 Nagios根據插件返回來的值,來判斷監控對象的狀態,並經過web顯示出來,以 供管理理員及時發現故障。
寫好腳本後,被監控端找到nrpe的配置文件,添加一項新的命令(nrpe)
[root@cent67 ~]# vim /etc/nrpe.d/lcgdm-common.cfg
command[check_waiting_connect]=/usr/lib64/nagios/plugins/check_waiting_connect
回到服務端nagios服務端Centos_65添加defineservice
define service{ use local-service ;Nameofservice templatetouse host_name Centos_67 service_description WAITING_CONNECTS check_command check_nrpe!check_waiting_connect notifications_enabled 0 }
接下來保證客戶端nagios用戶有權限執行監控腳本而後來到服務端檢查:
[root@Cent65 objects]# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.1.67 -c check_waiting_connect
執行成功,接下來重啓服務端nagios、nrpe服務。
service nagios restart
service nrpe restart
查看nagios主頁顯示:
這裏已經能夠顯示出來了。
好了,關於nagios就先總結到這裏,歡迎到家提問指正。