Nagios企業監控講解

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/這裏查看

[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

接下來在我們的瀏覽器輸入:

http://192.168.1.65/nagios

四、Nagios如何設置配置文件(一):節點定義.

配置文件路徑

[root@Cent65 ~]# cd /etc/nagios/objects

如下便是我們要找到的配置路路徑可以看到已經有好多以cfg結尾的默認配置文件了,不過這些其實都是一些自帶的模板我們當前用不上,我們先關注 localhost.cfg文件。

1、 定義節點

[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_nameCentos_67(注:Centos_67這是自己取的名字是唯一標識符號,不可以重複,後面會被反覆的調用,名字可以隨便取,建議FQDN)。

alias別名,任意取名。

address被監控節點的 IP地址。

添加完節點之後重啓nginx

[root@Cent65 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。

[root@Cent65 objects]# service nagios restart

打開網頁界面:點擊左側的Host Groups按鈕。會顯示出我們剛纔設置的ceshi組。

六、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端口,而是指定的其他端口怎麼辦呢?我們如何來靈活的改動監控呢?

七、服務監控插件的配置

上面這一段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服務就正常了。

八、通過NRPE建立橋接方式監控

剛纔舉的幾個例子其實都是屬於之前說過的nagios第一種監控形式"直接連接監控",那如果想監控例如CPU硬盤內存怎麼辦呢?自然就是要使第二種形式"間接橋接獲取",通過NRPE這個插件來實現。

接下來開始安裝間接監控NRPE:

(1)首先需要在Nagios的服務端和被監控客戶端都安裝NRPEnagios-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的情況了。

九、自己編寫監控腳本,並嵌入進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就先總結到這裏,歡迎到家提問指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章