Nagios企業監控講解

來源:互聯網
上載者:User

標籤: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_nameCentos_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的服務端和被監控用戶端都安裝NRPEnagios-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企業監控講解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.