標籤:oss 置配 理解 進程 串連 netstat命令 grid bottom page
Nagios
企業監控講解
一、關於Nagios
Nagioss 是經典老牌子監控,伴隨著一代營運工程師們路路成長,即便到了現在也廣泛在企業中使用。Nagios有三個特點決定了它屹立不倒的優勢:
第一: Nagios跟其他監控產品比起來是部署和配置最便便捷,沒有之一,且最容易易入門的開源監控產品. 企業的老總們最喜歡的就是省時快速的完成工作
第二:Nagios對於各種基礎服務層面的監控就是兩個字"完善"這得益於Nagios的很多對於監控項目的基本計算方式都十分的直接有效,且非常符合一般人們對於"監控"的實現理理念.
第三:新的監控產品雖然很多,但是這裡有一個奇怪現象:一般企業中面試營運工程師/架構師,到了監控這裡不問別的就愛問Nagios相關的問題。對於各個企業來說,已經是用來考核一個合格的營運工程師的基本素養的指標了了。
二、Nagios的兩種核心工作模式
1、nagios的第一種工作模式:遠程直連採集
遠程直連採集工作模式是什麼意思呢?Nagios的監控伺服器端需要採集被監控機器?的資料,而被監控機器?上的一些資料例如:
IP地址通不通
連接埠通不通
2、Nagios第二種工作模式:橋接間接採集
CPU負載,硬碟剩餘,進程存在等等,類似這樣的資料本身並不不是一個"服務"好比硬碟剩餘多少,這是一項用戶端Linux系統上的自身的狀態本身不像SSH服務一樣可以被外界直接存取到,如果nagios服務端想擷取用戶端硬碟狀況沒有辦法直接從網路連上去擷取,那怎麼辦呢?這就要提到 Nagios的一個擴充功能,NRPE組件。
三:開始安裝Nagios服務端和NRPE組件
首先做linux伺服器時間同步
時間伺服器可以從http://www.pool.ntp.org/zh/這裡查看
[[email protected] ~]# ntpdate 1.cn.pool.ntp.org
由於我們的yum源不包含nagios包,所以要先安裝一下epel-release。
[[email protected] ~]# yum -y install epel-release
nagios本身不不帶web server,但是需要以web的形式體現出來,所以需要先安裝httpd(apache)
1、安裝http
[[email protected] ~]# yum install httpd
安裝完成後啟動服務,檢查是否安裝成功。
[email protected] ~]# service httpd restart
[[email protected] ~]# netstat -anptu | grep 80
查看一下網站資訊
[[email protected] ~]# curl -I 192.168.1.65
2、安裝nagios*、nrpe
[[email protected] ~]# yum install nagios* nrpe
安裝完之後啟動
[[email protected] ~]# service nagios start
啟動之後我們來設定?下nagios的初始登入密碼:
這裡我們預設用nagiosadmin作為登入名稱,密碼為123456
(註:如果web管理理員不是使用預設的nagiosadmin, 需要修改cgi.cfg
# vim /usr/local/nagios/etc/cgi.cfg
//把所有的nagiosadmin改為自訂的使用者名稱)
[[email protected] ~]# htpasswd -c /etc/nagios/passwd nagiosadmin
接下來在我們的瀏覽器輸入:
http://192.168.1.65/nagios
四、Nagios如何設定設定檔(一):節點定義.
設定檔路徑
[[email protected] ~]# cd /etc/nagios/objects
如下便是我們要找到的配置路路徑可以看到已經有好多以cfg結尾的預設設定檔了,不過這些其實都是一些內建的模板我們當前用不上,我們先關注 localhost.cfg檔案。
1、 定義節點
[[email protected] 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
[[email protected] objects]# service nagios restart
接下來回到我們的瀏覽器http://192.168.1.65/nagios/
點擊左側的host按鈕,在我們的監控列表中會出現Centos_67主機。
五、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。
[[email protected] objects]# service nagios restart
開啟網頁介面:點擊左側的Host Groups按鈕。會顯示出我們剛才設定的ceshi組。
六、Nagios service(服務)的定義
定義服務,就是來定義我們需要監控的主機上面跑的服務。
我們來看如下這一段,取自localhost.cfg中這一段就是預設範本提供的 service定義方法用來監控機器?各類服務(軟體)
defineservice{use local-service ;Nameofservice templatetousehost_name localhostservice_description SSHcheck_command check_sshnotifications_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 usehost_name Centos_67service_description SSHcheck_command check_sshnotifications_enabled 0}
重啟nagios服務後再來看一下nagios的首頁.
選擇左側的services,發現已經有了Centos_67的ssh監控。
接下來,我們來監控一下http服務。在localhost.cfg後面添加如下配置:
defineservice{use local-service ;Nameofservice templatetousehost_name Centos_67service_description HTTPcheck_command check_httpnotifications_enabled 0}
用戶端要提前安裝好http服務並啟動,我們以apache為例:
[[email protected] ~]# yum -y install httpd
[[email protected] ~]# service httpd start
登入nagios網頁端查看:
那麼如果我們要監控的網站使用的不是預設80連接埠,而是指定的其他連接埠怎麼辦呢?我們如何來靈活的改動監控呢?
七、服務監控外掛程式的配置
上面這一段service配置中,紅色標記的部分,之所以能直接調用check_http並不是憑空出現的,而是有依據的。這個依據就是nagios的外掛程式(我們之前安裝的時候不是安裝了很多nagios-plugins這個就是外掛程式)。
nagios定義service中check_command其實就是通過調用外掛程式當中預先設定好的這些指令碼(check_http其實就是個指令碼)才能實現監控的。
我們來分析下這些指令碼和外掛程式的關聯:
(1)首先從rpm中先找到跟http相關的nagios外掛程式
[[email protected] objects]# rpm -qa | grep nagios-plugins | grep http
check_http這個指令碼其實就來自於這個外掛程式。
(2)接下來我們來查看這個外掛程式中都包含了什麼具體檔案(指令碼)
[[email protected] 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本地來試一下。
[[email protected] 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就監控不到了。
[[email protected] objects]# /usr/lib64/nagios/plugins/check_http -H 192.168.0.66
那麼怎麼辦呢?我們現在Linux本地試試check_http指令碼是 否支援連接埠改變。
[[email protected] 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 templatetousehost_name Centos_67service_description HTTPcheck_command check_http!-p8080 notifications_enabled 0}
注意紅色標記部分,這就是在service中調用監控指令碼時候,添加額外參數的方法 使用!分開,參數的使用方法跟本地命令列是一模一樣的。接下來看一下監控的Centos_67機器的HTTP服務就正常了。
八、通過NRPE建立橋接方式監控
剛才舉的幾個例子其實都是屬於之前說過的nagios第一種監控形式"直接連接監控",那如果想監控例如CPU硬碟記憶體怎麼辦呢?自然就是要使第二種形式"間接橋接擷取",通過NRPE這個外掛程式來實現。
接下來開始安裝間接監控NRPE:
(1)首先需要在Nagios的服務端和被監控用戶端都安裝NRPE和nagios-plugins兩個組件。
開始服務端安裝的時候yum install nrpe(nagios-plugins*之前已經安裝過了),所以現在不用安裝了。
用戶端安裝:
先安裝一下epel-release,來提供我們的安裝包。
[[email protected] ~]# yum -y install epel-release
接下來安裝外掛程式:
[[email protected] ~]# yum install -y nrpe nagios-plugins*
(2)
①接下來回到服務端Centos_65, 到localhost.cfg設定檔,末尾加入如下內容:定義check_nrpe:
define command{command_name check_nrpecommand_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在用戶端上關聯命令的設定:
[[email protected]~] # cat /etc/nrpe.d/lcgdm-common.cfg command[check_cpu]=/usr/lib64/nagios/plugins/lcgdm/check_cpucommand[check_network]=/usr/lib64/nagios/plugins/lcgdm/check_networkcommand[check_process]=/usr/lib64/nagios/plugins/lcgdm/check_process -p rfiod,globus-gridftp-servercommand[check_hostcert]=/usr/lib64/nagios/plugins/lcgdm/check_hostcert -C /etc/grid-security/hostcert.pem -s第2處是:/usr/lib64/nagios/plugins/lcgdm/check_cpu
[[email protected] ~]# ls /usr/lib64/nagios/plugins/lcgdm/check_cpu/usr/lib64/nagios/plugins/lcgdm/check_cpu
④服務端和用戶端都要啟動NRPE軟體,確認工作在5666連接埠。
[[email protected] objects]# service nrpe startStarting nrpe [確定][[email protected] objects]# netstat -antpu | grep 5666tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 53633/nrpetcp 0 0 :::5666 :::* LISTEN 53633/nrpe
[[email protected] ~]# service nrpe startStarting nrpe [確定][[email protected] ~]# netstat -antpu | grep 5666tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 53202/nrpetcp 0 0 :::5666 :::* LISTEN 53202/nrpe
⑤修改一下用戶端上的nrpe主設定檔,否則nagios服務端連不上。
[[email protected] ~]# vim /etc/nagios/nrpe.cfg
修改:allowed_hosts=192.168.1.65
192.168.1.65為nagios服務端IP。修改完之後重啟rnpe服務。
[[email protected] ~]# service nrpe restart
⑥在服務端做個本地測試
[[email protected] objects]# /usr/lib64/nagios/plugins/check_nrpe -H 192.168.1.67
出現nrpe版本號碼,表示成功。
最後到nagios首頁來看一下,已經監控到用戶端cpu的情況了。
九、自己編寫監控指令碼,並嵌入進nagios
之前我們在使用的監控項目都是nagios和nagios_plugins*外掛程式包提供的。其實Nagios外掛程式是完全支援自己動手編寫的,看被監控端如下這一段shell代碼:
[[email protected] ~] # 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_CRITICALfi
(指令碼實現的內容很簡單,就是通過netstat命令來擷取Linux系統中的等待連結數(waitting_connections) 如果大於1000就警示,小於1000就屬於正常)。
Nagios可以識別4種狀態返回資訊,
0(OK)表示狀態正常/綠色、
1(WARNING)表示出現警告/huangs色(系統自動和諧治好寫拼音)
2(CRITICAL)表示出現非常嚴重的錯誤/紅色
3(UNKNOWN)表示未知錯誤/深huangs色 Nagios根據外掛程式返回來的值,來判斷監控對象的狀態,並通過web顯示出來,以 供管理理員及時發現故障。
寫好指令碼後,被監控端找到nrpe的設定檔,添加一項新的命令(nrpe)
[[email protected] ~]# 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使用者有許可權執行監控指令碼然後來到服務端檢查:
[[email protected] 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就先總結到這裡,歡迎到家提問指正。
Nagios企業監控講解