1. 程式人生 > >centos-Nagios 監控搭建

centos-Nagios 監控搭建

Nagios 監控

閱讀目錄

回到頂部

1. 介紹

Nagios是一款開源軟體,能有效監控 Windows 、Linux、VMware 和 Unix 主機狀態,交換機、路由器等網路設定等。當監控出異常時提醒系統管理員,當異常恢復時也會通知。Nagios提供一個基於瀏覽器的web介面,方便管理人員檢視系統的執行狀態,網路狀態、服務狀態、日誌資訊,以及其他異常現象。

朋友們如果覺得麻煩,可以試試OneAlert一鍵整合nagios,輕鬆實現微信、電話、郵件、簡訊、APP的告警通知。![img](file:///C:/Users/wzh94434/AppData/Local/Temp/%

[email protected]$ACOF(TYDYECOKVDYB.png)http://www.onealert.com/activity/nagios.html

回到頂部

2. 安裝

說明:安裝機器為CentOS系統

2.1安裝依賴包

由於Nagios提供了Web介面,因此需要安裝Apache;由於配置Web介面需要PHP模組支援,所以需要安裝PHP,還需要其他外掛。

sudo yum install httpd php php-cli gcc glibc glibc-common gd gd-devel net-snmp

2.2建立使用者和分組

sudo useradd -m nagios             #新建使用者
sudo passwd nagios                 #修改密碼
sudo groupadd nagcmd               #新建分組
sudo usermod -a -G nagcmd nagios   #新增使用者到分組

2.3安裝Nagios

下載

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz

安裝

tar xzf nagios-4.0.8.tar.gz  #解壓
cd nagios-4.0.8
sudo ./configure --with-command-group=nagcmd
sudo make all
sudo make install
sudo make install-init
sudo make install-config
sudo make install-commandmode

安裝 Web介面
sudo make install-webconf

為web介面建立登入賬號

sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

其中nagiosadmin為賬號名可更改,同時會提示新增密碼。
重啟Apache服務

sudo service httpd restart
目錄名稱 作用
bin Nagios 可執行程式所在目錄
etc Nagios 配置檔案目錄
sbin Nagios cgi 檔案所在目錄, 也就是執行外部 命令所需要檔案所在的目錄
share Nagios 網頁存放路徑
libexec Nagios 外部外掛存放目錄
var Nagios 日誌檔案、Lock 等檔案所在的目錄
var/archives agios 日誌自動歸檔目錄
var/rw 用來存放外部命令檔案的目錄

2.4安裝plugins

下載
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
安裝
tar xzf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3.tar.gz
sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios 
sudo make 
sudo make install

預設安裝目錄:/usr/lib64/nagios/plugins/
安裝完畢,web介面
img

回到頂部

3. 基本配置

3.1 配置檔案列表配置檔案作用

配置檔案 說明
cgi.cfg 控制CGI訪問的配置檔案
nagios.cfg Nagios的主配置檔案
resource.cfg 變數定義檔案,在此定義的變數,用於其它配置檔案中使用,如USER1USER1
objects objects為目錄,內部含有大量的配置檔案
objects/command.cfg 命令定義配置檔案
objects/contacts.cfg 聯絡人和聯絡人分組配置檔案
objects/localhost.cfg 定義監控本機的配置檔案
objects/printer.cfg 監控印表機的配置檔案,預設不啟用此檔案
objects/switch.cfg 監控路由器的配置檔案,預設不啟用此檔案
objects/templates.cfg 定義主機和服務的配置檔案
objects/timeperiods.cfg 定義監控時間段的配置檔案
objects/windows.cfg 監控Windows機器的配置檔案,預設沒有啟動此檔案
備註: Nagios 在配置方面非常靈活,預設的配置檔案並不是必需的。可以使用這些預設的配置檔案,也可以建立自己的配置檔案,然後在主配置檔案 nagios.cfg 中引用即可。

注:在以後修改配置檔案後,可以利用以下命令列檢測配置檔案是否正確,可以根據錯誤提示修改

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

修改完配置檔案後web介面不會立馬修改,需要重新載入、啟動nagios服務。

sudo service nagios reload
sudo service nagios restart

3.2 命令配置檔案

檔名稱:commands.cfg
檔案定義格式:

define command{
       command_name    *******
       command_line    *******

例如,檢視本地負載的命令

# 'check_local_load' command definition
define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        } 

其中,變數USER1USER1在resource.cfg中定義

# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec

USER1USER1中自帶很多可執行的檔案,可在命令列使用-v,檢視具體的用法,這裡ARG1是發出警告(w)的條件,ARG1是發出警告(w)的條件,ARG2是發出嚴重警告©的條件。可以用命令執行,命令執行,如

[[email protected]]$ /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0  -c 10.0,6.0,4.0
OK - load average: 0.00, 0.01, 0.05|load1=0.000;5.000;10.000;0; load5=0.010;4.000;6.000;0; load15=0.050;3.000;4.000;0;

3.3 監控本地主機

確認nagios.cfg中有對localhoast.cfg檔案的引用

# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

localhost.cfg自帶了對HTTP、ROOTPartition、SSH等服務的定義。
在localhost.cfg定義主機

define host{
        use                  linux-server
        host_name            localhost
        alias                localhost
        address              127.0.0.1
        }

其中host_name是對被監控機器的名稱,alias是被監控機器名稱的別稱,address是被監控機器的ip(127.0.0.1表示本地機器),use指明的是被監控機器繼承的模板(定義模板的位置在templates.cfg,具體含義參考報警部分)。

然後在localhost.cfg裡完成對服務(service)的定義

define service{
        use                             local-service
        host_name                       localhost
        service_description             磁碟空間
        check_command                   check_local_disk!20%!10%!/
        }

其中,use指被監控機器整合的服務模板(定義模板的位置在templates.cfg,具體含義參考報警部分),host_name指主機名,與上面定義的host_name所指含義相同,service_description指要顯示在web介面的內容,check_command指明要執行的命令名稱(命令定義的位置是commands.cfg),示例中的引數20%表示,磁碟剩餘空間少於20%(ARG1)時開始報警,10ARG1)時開始報警,10ARG2$)表示,磁碟剩餘空間少於10)時開始報警。
對本機其他的監控的配置一樣。配置完成後可以在瀏覽器上瀏覽效果(地址:部署nagios所在機器的ip/nagios)
監控主機頁面
img

監控服務頁面

3.4 監控遠端Linux/UNIX主機

img

原理

img
監控遠端的Linux/UNIX由兩部分組成:執行在監控主機上的check_nrpe,執行在被監控主機上的NRPE守護程序。其中check_nrpe不是nagios自帶的可執行檔案,是安裝plugins時帶的可執行檔案(位置在: /usr/lib64/nagios/plugins/)。
當監控遠端的Linux/UNIX時,工作流程如下:

  • nagios執行check_nrpe這個外掛,並告訴它要執行什麼命令
  • check_nrpe連線到被監控端的NRPE守護程序,告訴它命令
  • 被監控端的NRPE守護程序執行具體的操作
  • 被監控端的NRPE守護程序把執行的結果返回給Nagios做後處理

被監控端的外掛安裝與配置

CentOS系統

yum install epel-release
yum install nrpe nagios-plugins-all openssl

Debian/Ubuntu系統

apt-get install epel-release
sudo apt-get install nagios-nrpe-server nagios-plugins

安裝完後進行配置
開啟/etc/nagios/nrpe.cfg檔案,在allowed_hosts後面新增上監控機器的ip

## Find the following line and add the Nagios server IP ##
allowed_hosts=127.0.0.1 192.168.1.150

開啟NRPE服務
CentOS系統

systemctl start nrpe
chkconfig nrpe on

Debian/Ubuntu系統

sudo /etc/init.d/nagios-nrpe-server restart

回到監控主機,新建目錄servers

sudo mkdir /usr/local/nagios/etc/servers

建立監控遠端Linux/UNIX主機的指令碼

sudo touch /usr/local/nagios/etc/servers/clients.cfg

在nagios.cfg中新增上目錄servers,這樣目錄中的檔案都會被引入到監控中來。

cfg_dir=/usr/local/nagios/etc/servers

舉例

以“監控遠端Linux/UNIX主機的CPU負載”為例
被監控端
進入目錄cd /etc/nagios/nrpe.cfg
新增命令列:

command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
修改後重啟服務
service nagios-nrpe-server restart

監控端
開啟servers/clients.cfg檔案
定義主機

define host{
        use                             linux-server
        host_name                       10.61.88.23
        alias                           10.61.88.23
        address                         10.61.88.23
}
定義服務
define service {
        use                             generic-service,srv-pnp
        host_name                       10.61.88.23
        service_description             CPU負載
        check_command                   check_nrpe!check_load
        notifications_enabled           1
        } 

其中check_command中check_nrpe!後面的命令check_load對應被監控端的command[check_load]對應的命令。

監控遠端windows

說明

nagios對windows進行監控需要在被監控端安裝NSClient,NSClient++來監控windows主機有三種方式:check_nt、check_nrpe、nsca。check_nt自帶很多功能,可以完成很多基本的需求,但是擴充套件性差;check_nrpe可以通過執行自己定義的指令碼做到很好地擴充套件。為了滿足自己的需求,可以以上幾種方式結合使用。
在objects目錄下建立檔案windows.cfg,新增主機和服務。

check_nt

新增主機和服務

define host{
use             windows-server  
host_name       ruanxi          
alias           My Windows Server
address         192.168.0.5     
}

#監控 windows 主機的開機運作時間
define service{
use                     generic-service
host_name               ruanxi
service_description     Uptime
check_command           check_nt!UPTIME
}

#監控 windows 主機的記憶體使用狀況 
define service{
use                     generic-service
host_name               ruanxi
service_description     Memory Usage
check_command           check_nt!MEMUSE!-w 80 -c 90  #記憶體使用到達80%則warn,到達90%則Critical
}

check_nrpe

原理
img
使用check_nrpe監控windows的原理與監控linux主機的原理一致,這樣可以根據特定的需求自己寫指令碼。
以監控某個程序是否執行為例
編輯NSClient配置檔案NSC.ini,去掉以下幾行前面的“;”號(去掉註釋,使其生效)

NRPEListener.dll
script_dir=scripts\
CheckExternalScripts.dll

在NSClient安裝目錄下的scripts資料夾下,新建一個check_run.bat批處理檔案,如下

@echo off
tasklist |find "%1" >NUL
IF ERRORLEVEL 1 GOTO err
IF ERRORLEVEL 0 GOTO ok

:err
echo CRITICAL: Process does not exist
exit /B 1

:ok
echo OK: The process of normal
exit /B 0

說明:指令碼的退出值與nagios的報警提示對應關係為:0–正常,1–警告,2–嚴重警告
在NSC.ini檔案中[External Scripts]下面新增如下行:

check_run=scripts\check_run.bat   chrome.exe

重啟NSClinet
可以在被監控端check_nrpe所在的目錄(CentOs預設的安裝目錄為:/usr/lib64/nagios/plugins/)

./check_nrpe -H hostip -c check_run

注:-H後寫剛才指令碼所在的機器,-c後寫命令,這裡對應配置檔案中的check_run

如果結果與預期的一致,那麼就可以繼續配置監控端了

配置監控端
修改commands.cfg,增加命令

define command{
        command_name    check_run
        command_line    /usr/lib64/nagios/plugins/check_nrpe -H yourip -c check_run
        }

修改windows.cfg,增加服務

define service{
        use                     generic-service-urgent,srv-pnp
        host_name               youip   ;要展示資訊的機器的ip
        service_description     check_fileexistspan
        check_command           check_run
        }

回到頂部

4. 報警

4.1 報警配置檔案

修改聯絡人

配置檔案是contacts.cfg.
聯絡人定義方式為:

define contact{
        contact_name                    nagiosadmin             ; 使用者名稱稱
        use                             generic-contact         ; 
        alias                           Nagios Admin            ; 使用者別稱
        email                          ****@****                ;修改為需要通知的郵箱
        }

該contact繼承了templates.cfg中的genetic-contact,如下

define contact{
        name                            generic-contact         ; The name of this contact template
        service_notification_period     24x7                    ; service notifications can be sent anytime
        host_notification_period        24x7                    ; host notifications can be sent anytime
        service_notification_options    w,u,c,r,f,s             ; send notifications for all service states, flapping events, and scheduled downtime events
        host_notification_options       d,u,r,f,s               ; send notifications for all host states, flapping events, and scheduled downtime events
        service_notification_commands   notify-service-by-email ; send service notifications via email
        host_notification_commands      notify-host-by-email    ; send host notifications via email
        register                        0                       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
        }

host_notification_commands指定的方式為notify-host-by-email,如果是微信或簡訊等其他方式,用逗號隔開寫在後面即可。其中命令notify-host-by-email的定義在commands.cfg中預設已定義,如下

# 'notify-host-by-email' command definition
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

聯絡人分組定義方式為:

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagiosadmin  ;這裡填寫剛才定義的contact_name
        }

4.2 修改報警時間週期

define host{
        use                     linux-server
        host_name               server_10.61.91.37
        alias                   server_10.61.91.37
        address                 127.0.0.1
        contact_groups          admins   ;這裡新增報警組名稱(上面剛定義的)
        }
要使主機或服務能夠發郵件,必須在定義主機或服務時新增說明,以服務為例。修改localhost.cfg中本機的修改。
這樣主機出現異常時會發送異常到報警組,報警組把異常分配給組裡的成員,然後成員按著自己預先設定的報警方式進行報警。主機繼承了linux-server模板,模板的定義在templates.cfg檔案,檔案中存在著主機和服務的繼承關係,可以根據需要自己定製引數,以linux-server模板為例:
define host{
        name                            linux-server    ; 主機模板名稱
        use                             generic-host    ; 繼承通用模板
        check_period                    24x7            ; 監控的時間段為一週七天,每天24小時,具體定義詳見timeperiods.cfg
        check_interval                  5               ; 對主機每5分鐘檢測一次(注:這裡的數值單位預設為分鐘)
        retry_interval                  1               ; 重試檢測時間為1分鐘
        max_check_attempts              1               ;  nagios對主機的最大檢查次數,即nagios在檢查發現某主機異常時,並不馬上下定論
        check_command                   check-host-alive ;指定檢查主機狀態的命令,其中“check-host-alive”在commands.cfg檔案中定義
        notification_period             workhours       ; 主機故障時,傳送通知的時間範圍,其中“workhours”在timeperiods.cfg中進行了定義;
        notification_interval           30              ; 故障出現,沒有修復,每30分鐘再發一次告警
        notification_options            d,u,r           ; 定義主機在什麼狀態下可以傳送通知給使用者,d即down,表示宕機狀態;
        register                        0               ;指明這非真正主機,這只是模板而已
        }
注:這裡的時間是時間片的含義,定義在nagios.cfg中command_check_interval=60,預設單位是s 。30即30*60s

4.3 郵件報警

上面是以郵件報警為例說明的,但是前提是系統可以往外發郵件,配置如下(以CentOs為例)
開啟/etc/mail.rc檔案
新增
img
其中
set from=[傳送人郵箱地址]
set smtp=[smtp伺服器地址]
set smtp-auth-user=[郵箱使用者名稱]
set smtp-auth-password=[郵箱密碼]
set smtp-auth=login
測試:
mail -s [郵件主題][郵件地址] 回車,然後輸入郵件內容,最後按“Ctrl + D”。如果傳送成功表名配置成功。

4.4 微信、簡訊報警

參考

110雲監控 Nagios告警整合 連結
利用Nagios呼叫Python程式控制微信公眾平臺釋出報警信 連結

回到頂部

5. 分組

完成了以上的配置,已經完成了nagios的基本配置,但是當有多個機器時,所有的機器顯示在一起會顯得很亂,並且和自己無關的主機也會對自己報警。為了作區分可以對主機和服務進行分組,這樣管理人員就可以只關注自己管理的主機和服務。

5.1 主機分組

定義分組的位置放哪都行,只要引入到nagios.cfg中即可,為了方便找,這裡把分組放到localhost.cfg和windows.cfg裡。

define hostgroup{
        hostgroup_name  linux-servers ; The name of the hostgroup
        alias           Linux Servers ; Long name of the group
        members         server_10.61.91.37,172.16.41.211,10.61.88.23 ; 主機名
        }
點選web介面左邊導航條中主機組的表格,分組示例

5.2 服務分組

define servicegroup{
        servicegroup_name       dbservices
        alias                   Database Services
        members                 程序CPU與記憶體,10.61.88.23,監控埠狀態 ;這裡寫service中的service_description
        }
點選web介面左邊導航條中服務組的表格,分組示例

回到頂部

6. 介面美化

6.1 漢化

可以根據自己的需求對web介面的顯示選項進行定製和修改。
對左邊導航條的修改檔案是/usr/local/nagios/share/side.php
修改後,需要重新載入、啟動nagios。簡易修改效果如下:
img

6.2 pnp4nagios外掛

nagios自帶圖表分析功能,但是不美觀,可以利用外掛pnp4nagios,它對進行檢測的主機和服務進行統計,管理人員可以根據統計報表進行分析、改善。
官網安裝文件
效果圖
img

回到頂部

7. 參考

Install And Configure Nagios 4 On Ubuntu 14.10/14.04
Nagios 監控系統架設全攻略

回到頂部

8. 維護備忘

郵箱發件人設定:/etc/mail.rc

配置檔案檢查:sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

重新載入:sudo service nagios reload sudo service nagios restart

監控遠端Linux

新建使用者

sudo useradd -m nagios
sudo passwd nagios

安裝nagios-plungins: sudo apt-get install nagios-nrpe-server nagios-plugins

配置檔案地址:/etc/nagios/nrpe.cfg

外掛所在地址:/usr/lib/nagios/plugins (或 /usr/lib64/nagios/plugins/)

新增可以監控的機器:

sudo vim  /etc/nagios/nrpe.cfg

增加:allowed_hosts=127.0.0.1 10.61.73.49  (server的ip)
增加具體命令:command[check_cpu_proc]=

修改後重新啟動:sudo service nagios-nrpe-server restart

監控遠端Windows

cd /usr/local/nagios/libexec/

檢視是否正常工作:

./check_nt -H 172.16.41.84 -p 12489 -v UPTIME (12489為預設埠)

原文出處:https://www.cnblogs.com/kaituorensheng/p/4682565.html