企業級監控nagios實踐

nagios 監控服務應用指南php

 

小區:視頻監控,保安html

 

企業工做中爲何要部署監控系統前端

 

監控系統至關於哨兵的做用,監控幾百臺上千臺服務器,監控系統很是重要。java

 

監控系統都須要監控python

 

1. 本地資源:負載uptime cpu(top,sar),磁盤(df),內存(free),io(iostat),raid,溫度,passwd文件的變化,本地全部文件指紋識別mysql

2. 網絡服務:端口,url ,丟包,進程數,網絡流量linux

3. 其餘設備: 路由器、交換機端口流量,打印機,windows等ios

4. 業務數據:用戶登陸失敗次數,用戶登陸網站次數,輸入驗證碼失敗的次數,某個api     c++

   接口流量併發,電商網站定單,支付交易的數量。web

5. 監控軟件自己僅僅是一個平臺,咱們想監控的內容,理論上只要在服務器命令行能夠獲取到就能夠被監控軟件監控

 

 

前言 nagios 監控工具介紹及原理

 

nagios(難夠死)監控工具介紹與優點

 

nagios是一款開源的網絡及服務的監控工具,功能強大,靈活性強,能有效監控 windows linux和unix 等系統的主機各類狀態信息,交換機,路由器等設備,主機端口及url服務等,根據不一樣業務故障級別發出告警信息(郵件、微信、短信、語音報警、飛信、msn)給管理員,當故障恢復時也會發出恢復消息給管理員

 

nagios服務端能夠在linux系統和類unix系統上運行,目前沒法再windows上運行(客戶端軟件),windows能夠做爲被監控的主機,可是不能被做爲監控服務器

 

nagios 官方網站地址爲http://www.nagios.org

 

nagios的特色

 

01)監控網絡服務(smtp 、pop3 、http、tcp、ping等)

02)監控主機資源

03)簡單的插件設計模式使得用戶能夠方便的定製符合本身的服務的檢測方法

04)並行服務檢查機制

05)具有定義網絡分層結構的能力,用‘parent’主機定義來表達網絡主機間的關係,這種  關係可被用來返現和明晰主機宕機或不可達狀態

06)當服務或主機問題產生與解決後將及時通報聯繫人(mail、im、sms、sound);

07)自動的日誌回滾

08)可選的web界面用於查看當前的網絡狀態、通知和故障歷史、日誌文件等

 

 

14.2.3 nagios監控系統家族成員的構成

 

nagios監控通常由一個主程序(nagios)、一個插件程序(nagios-plugins)和一些可選的附加程序(NRPE、NSClient++、NSCA和NDOUtils)等組成

 

nagios自己只是一個監控的品臺而已,其具體的監控工做都是經過各種插件(例如:nagios-plugins)來實現的,也能夠本身編寫插件,所以,nagios主程序和nagios-plugins插件都是nagios服務器端必須安裝的程序組建。不過,通常nagios-plugins也要安裝於被監控端,用來獲取響應的數據,nagios可選的附加組建描述以下

 

1.NRPE組件

 

存在的位置:工做於被監控端,操做系統爲linux系統

做用:用於在被監控的遠程主機上執行腳本插件,獲取數據回傳給服務器端,以實現對這些主機資源和服務的監控

存在形式:守護進程模式,開啓的端口號是5666

監控的資源:主要用於監控本地資源,包括負載(uptime)、cpu(top、sar)磁盤(df -hi)

內存(free)、io(iostat)、raid磁盤故障、cpu溫度、passwd文件的變化,以及本地全部文件的指紋識別監控,固然也能夠監控進程、端口、url等

 

圖爲nrpe組件的運行原理圖

 

 

工做原理:一般由nagios服務器端發起獲取數據請求,由check_nrpe插件攜帶要獲取的命令,傳給被監控端的nrpe守護進程,nrpe進程讀取nrpe.cfg裏對應服務器端發送的命令信息,調用本地插件獲取數據,而後返回給nagios服務器端check_nrpe,進而傳給nagios展現到web界面中,嚴格講能夠稱之爲半被動工做模式,本文主要講解這個npre組件的功能

 

1.NSClient++組件

 

用於被監控端爲windows系統的服務器

 

2.NDOUtils組件(不推薦用)

 

做用:將nagios的配置信息和各event產生的數據存入數據庫

 

3.nsca組件 目前應用場景較少

 

 

 

14.2.4 nagios監控系統完整圖解

 

 

 

 

14.3 nagios服務器的安裝

 

14.3.1 nagios安裝準備

 

1)準備三臺服務器

 

管理ip地址

角色

備註

192.168.1.11

nagios-server

nagios服務器端

192.168.1.12

web01

被監控的客戶端

192.168.1.13

web02

被監控的客戶端

 

 

2)解決perl軟件編譯問題

 

[root@hd1 ~]# echo 'export LC_ALL=C' >>/etc/profile

[root@hd1 ~]# tail -1 /etc/profile

export LC_ALL=C

[root@hd1 ~]# source /etc/profile

[root@hd1 ~]# echo $LC_ALL

C

3)關閉nagios server端防火牆及SELINUX

經過配置文件查看selinux的狀態

[root@hd1 ~]# cat /etc/selinux/config

用命令關閉  selinux

[root@hd05 ~]# setenforce 0 

 

 

5)安裝nagios服務器端所需軟件包

   nagios服務器端須要有web界面展現監控效果,界面的展現主要使用php程序,所以,須要lamp環境,有些網友總想安裝lnmp環境,這徹底是自我麻煩,yum安裝的lamp環境是配合nagios服務端展現界面的最佳環境

安裝下面軟件包

[root@hd1 ~]# yum install gcc glibc glibc-common -y

[root@hd1 ~]# yum install gd gd-devel -y

[root@hd1 ~]# yum -y install mysql-server   

[root@hd1 ~]# yum install httpd php php-gd -y

 

查看

[root@hd1 ~]# rpm -qa mysql httpd php

mysql-5.1.73-3.el6_5.x86_64

php-5.3.3-38.el6.x86_64

httpd-2.2.15-39.el6.centos.x86_64

 

6)建立nagios服務器端須要的用戶及組

 

批量執行命令以下:

[root@hd1 ~]# useradd nagios     

[root@hd1 ~]# groupadd nagcmd

[root@hd1 ~]# usermod -a -G nagcmd nagios

[root@hd1 ~]# usermod -a -G nagcmd apache

[root@hd1 ~]# id -n -G nagios

nagios nagcmd

[root@hd1 ~]# id -n -G apache

apache nagcmd

[root@hd1 ~]# groups nagios

nagios : nagios nagcmd

[root@hd1 ~]# groups apache

apache : apache nagcmd

 

7)啓動lamp環境的http服務

[root@hd1 ~]# /etc/init.d/httpd start

[root@hd1 ~]# /etc/init.d/httpd start

Starting httpd: httpd: apr_sockaddr_info_get() failed for hd1.com

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

                                                          [  OK  ]  

 

 

14.3.2安裝nagios服務器端

 

[root@hd1 ~]# tar xf nagios-3.5.1.tar.gz

[root@hd1 ~]# cd nagios

[root@hd1 nagios]# ./configure --with-command-group=nagcmd

[root@hd1 nagios]#make all

[root@hd1 nagios]#make install

[root@hd1 nagios]# make install-init 安裝初始化腳本到/etc/init.d/

[root@hd1 nagios]# make install-config 生成nagios模板配置

[root@hd1 nagios]# make install-commandmode 安裝配置目錄許可外部命令文件

 

 

1)安裝nagios web配置文件及建立登陸用戶

   接着來安裝nagios web配置文件(生成nagios對應於apache裏的配置文件)

[root@hd1 nagios]# make install-webconf

 

建立nagios web監控界面後,登入時須要用戶名及密碼,這裏分別爲admin和123456

[root@hd1 nagios]# htpasswd -bc /usr/local/nagios/etc/htpasswd.users admin 123456

Adding password for user admin

[root@hd1 nagios]# cat /usr/local/nagios/etc/htpasswd.users

admin:4SH4NvORhXMFs

 

從新加載apache服務

 

[root@hd1 nagios]# /etc/init.d/httpd reload

 

 

 

2)配置啓動apache服務

 

啓動apache服務加入系統開機自啓動

[root@hd1 ~]# chkconfig httpd on

打開客戶端上的瀏覽器訪問http://192.168.1.11/nagios 用戶名是:admin密碼是123456

 

 

 

 

1)安裝nagios插件軟件包

   nagios插件軟件包就是一些實現獲取數據信息的命令或程序,經過這些命令或程序,  nagios能夠獲取到須要的數據,而後進行報警和展現,具體安裝過程以下:

 

先安裝基礎依賴包

[root@hd1 ~]# yum -y install perl-devel openssl-devel -y

 

安裝nagios plugins插件包

 

 

[root@hd1 ~]#tar xf nagios-plugins-1.4.13.tar.gz

 

[root@hd1 ~]# cd nagios-plugins-1.4.13

[root@hd1 nagios-plugins-1.4.13]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-mysql

 

[root@hd1 nagios-plugins-1.4.13]make 

[root@hd1 nagios-plugins-1.4.13]make  install

 

查看插件個數

[root@hd1 nagios-plugins-1.4.13]# ls /usr/local/nagios/libexec/|wc -l

61

 

2)安裝nrpe軟件

 

nrpe是客戶端安裝的軟件,爲何還要安裝在nagios服務器端?

 

1.nagios服務端須要check_nrpe插件作被動檢查,若是服務器端不裝nrpe軟件,就沒有check_npre這樣的檢查插件

2.nagios服務器端本地的資源也須要被監控,所以,nagios服務端也會被做爲客戶端

 

 

[root@hd1 ~]# tar zxvf nrpe-2.12.tar.gz

[root@hd1 ~]# cd nrpe-2.12

 

[root@hd1 nrpe-2.12]# ./configure

[root@hd1 nrpe-2.12]# make all

[root@hd1 nrpe-2.12]# make install-plugin

[root@hd1 nrpe-2.12]# make install-daemon

[root@hd1 nrpe-2.12]# make install-daemon-config

 

檢查check_nrpe插件

[root@hd1 ~]# ls /usr/local/nagios/libexec/check_nrpe

/usr/local/nagios/libexec/check_nrpe

 

[root@hd1 nrpe-2.12]# ls /usr/local/nagios/libexec/|wc -l

62

 

提示:生成的nrpe的配置文件爲/usr/local/nagios/etc/nrpe.cfg

 

6.配置並啓動nagios服務

 

[root@hd1 ~]# chkconfig nagios on

 

[root@hd1 ~]# chkconfig nagios --list      

nagios          0:off   1:off   2:on    3:on    4:on    5:on    6:off

 

 

7.更好的設置自動開機的方法是:

 

[root@hd1 ~]# echo "/etc/init.d/nagios start" >>/etc/rc.local

 

檢驗nagios配置文件(檢查語法)

 

[root@hd1 ~]# /etc/init.d/nagios checkconfig

Running configuration check... OK.

 

此命令爲檢查語法的命令,可是隻能報告對錯沒法給出錯誤的信息

 

可使用命令行檢查報錯,並輸出信息

 

[root@hd1 ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

 

Total Warnings: 0

Total Errors:   0

 

能夠修改/etc/init.d/nagios實現上述命令行檢查語法的詳細輸出,以下:

 

[root@hd1 ~]# grep 'checkconfig)'  -n  -A 2 /etc/init.d/nagios

181:    checkconfig)

182-            printf "Running configuration check..."

183-            $NagiosBin -v $NagiosCfgFile > /dev/null 2>&1;

 

grep表示搜索 checkconfig) 字符串,-n表示打印行號,-A 2 表示打印符合條件字符串最近的兩行

 

把 $NagiosBin -v $NagiosCfgFile > /dev/null 2>&1的輸出重定向去掉就能夠

 

 

[root@hd1 ~]# /etc/init.d/nagios checkconfig

Total Warnings: 0

Total Errors:   0

 

 

最後瀏覽nagios web界面檢查,打開瀏覽器訪問

 

到此,nagios服務端的安裝及配置就告一段落

 

14.4 nagios客戶端安裝

 

14.4.1 nagios客戶端安裝準備

 

準備2臺服務器或vm虛擬機

 

安裝基礎系統軟件

 

[root@hd2 ~]# yum install gcc glibc glibc-common -y

[root@hd2 ~]# yum install mysql-server -y

安裝這個目的是爲了安裝nagios plugins 生成check_mysql插件

 

上傳nagios相關軟件

 

添加nanios用戶

[root@hd2 ~]# useradd nagios -M -s /sbin/nologin

[root@hd2 ~]# id nagios

uid=503(nagios) gid=503(nagios) groups=503(nagios)

 

安裝nagios-plugins插件

 

[root@hd2 ~]# yum install perl-devel perl-CPAN openssl-devel -y

[root@hd2 ~]# tar xf nagios-plugins-1.4.13.tar.gz

[root@hd2 ~]# cd nagios-plugins-1.4.13

[root@hd2 nagios-plugins-1.4.13]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-perl-modules --with-mysql

 

[root@hd2 nagios-plugins-1.4.13]#make && make install

 

此時,檢查插件個數

 

[root@hd2 ~]# ls /usr/local/nagios/libexec/|wc -l

 

59

 

 

5.安裝nagios客戶端的nrpe軟件

 

[root@hd2 ~]# tar xf nrpe-2.12.tar.gz

[root@hd2 ~]# cd nrpe-2.12

[root@hd2 nrpe-2.12]# ./configure

[root@hd2 nrpe-2.12]# make all

[root@hd2 nrpe-2.12]#make install-plugin

[root@hd2 nrpe-2.12]#make install-daemon

[root@hd2 nrpe-2.12]#make install-daemon-config

 

6.安裝其餘相關的插件

 

如下是check_iostat插件須要的依賴包

 

root@hd2 ~]# tar zxf Params-Validate-0.91.tar.gz

[root@hd2 ~]# cd Params-Validate-0.91

[root@hd2 Params-Validate-0.91]# perl Makefile.PL

[root@hd2 Params-Validate-0.91]# make  && make install

 

 

[root@hd2 ~]# tar zxf Class-Accessor-0.31.tar.gz

[root@hd2 ~]# cd Class-Accessor-0.31

[root@hd2 Class-Accessor-0.31]# perl Makefile.PL

[root@hd2 Class-Accessor-0.31]# make && make install

[root@hd2 ~]# tar zxf Config-Tiny-2.12.tar.gz

[root@hd2 ~]# cd Config-Tiny-2.12

[root@hd2 Config-Tiny-2.12]# perl Makefile.PL

[root@hd2 Config-Tiny-2.12]# make && make install

[root@hd2 ~]# tar  zxf Math-Calc-Units-1.07.tar.gz

[root@hd2 ~]# cd Math-Calc-Units-1.07

[root@hd2 Math-Calc-Units-1.07]# perl Makefile.PL

[root@hd2 Math-Calc-Units-1.07]# make && make install

 

[root@hd2]# tar zxf Regexp-Common-2010010201.tar.gz

[root@hd2]# cd Regexp-Common-2010010201

[root@hd2 Regexp-Common-2010010201]# perl Makefile.PL

[root@hd2 Regexp-Common-2010010201]# make && make install

[root@hd2 ~]# tar zxf Nagios-Plugin-0.34.tar.gz

[root@hd2 ~]# cd Nagios-Plugin-0.34

[root@hd2 Nagios-Plugin-0.34]# perl Makefile.PL

[root@hd2 Nagios-Plugin-0.34]# make && make install

 

[root@hd2 ~]# yum install sysstat -y

 

 

 

sysstat工具包中包含兩類工具,分別爲即時查看工具(iostat、mpstat、sar)和累計統計工具(sar)能夠看到,這兩類工具都有sar,可見sar具備着兩種功能

 

爲了實現sar的累計統計功能,系統必須週期性的記錄當時的信息,這是經過調用/usr/lib/sa中的三個工具實現的

 

sa1 :收集並存儲天天的系統動態信息到一個二進制的文件中,用做sadc的前端程序

 

sa2:收集天天的系統活躍信息寫入總結性的報告,用做sar的前端程序

 

sadc:系統動態數據收集工具,收集的數據被寫入一個二進制文件中,用做sar工具的後端程序

 

 

這裏針對監視物理組件的高級linux命令小結以下:

 

內存:top free vmstat mpstat iostat sar

 

cpu:top vmstat mpstat iostat sar

i/o:vmstat mpstat iostat sar

進程:ipcs、ipcrm

負載:uptime

 

7.配置監控內存、磁盤i/o腳本插件

 

將上傳的兩個文件複製到對應的目錄

[root@hd2 ~]# cp check_memory.pl /usr/local/nagios/libexec/

[root@hd2 ~]# cp check_iostat /usr/local/nagios/libexec/

 

受權腳本可執行

[root@hd2 ~]# chmod 755 /usr/local/nagios/libexec/check_memory.pl

[root@hd2 ~]# chmod 755 /usr/local/nagios/libexec/check_iostat

 

改變腳本格式爲unix的格式

[root@hd2 ~]# yum -y install dos2unix  # 安裝dos2unix命令

[root@hd2 ~]# dos2unix /usr/local/nagios/libexec/check_memory.pl

dos2unix: converting file /usr/local/nagios/libexec/check_memory.pl to UNIX format ...

[root@hd2 ~]# dos2unix /usr/local/nagios/libexec/check_iostat

dos2unix: converting file /usr/local/nagios/libexec/check_iostat to UNIX format ...

 

 

14.4.4 配置nagios客戶端nrpe服務

[root@hd2 ~]# cd /usr/local/nagios/etc

[root@hd2 etc]# cp nrpe.cfg nrpe.cfg.bak  # 備份原始配置文件

[root@hd2 etc]# sed -n 79p nrpe.cfg  #print

allowed_hosts=127.0.0.1

[root@hd2 etc]# sed -i 's#allowed_hosts=127.0.0.1#allowed_hosts=127.0.0.1,192.168.1.11#' nrpe.cfg

 

[root@hd2 etc]# sed -n 79p nrpe.cfg

allowed_hosts=127.0.0.1,192.168.1.11

 

加入能夠監控nagios server的ip地址192.168.1.11

 

 

使用vim命令編輯nrpe.cfg的內容

 

1)註釋199-203的內容

 

 

 

2)在下面添加新內容

command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20

command[check_mem]=/usr/local/nagios/libexec/check_memory.pl -w 10% -c 3%

command[check_disk]=/usr/local/nagios/libexec/check_disk -w 15% -c 7% -p /

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

command[check_iostat]=/usr/local/nagios/libexec/check_iostat -w 6 -c 10

 

 

咱們通常經過nrpe去客戶端執行腳本插件獲取信息,這樣的模式成爲被動監控,與nsca的客戶端主動提交結果不衝突,由nagios服務端經過nrpe插件定時在client的nrpe服務上獲取信息

 

 

啓動nagios nrpe守護進程

 

 

[root@hd2 etc]# /usr/local/nagios/bin/nrpe  -c /usr/local/nagios/etc/nrpe.cfg -d

[root@hd2 etc]# netstat -lntup|grep nrpe                                       

tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      93592/nrpe  

這時,能夠將nrpe加入開機自啓動了,命令以下

 

[root@hd2 etc]# echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >>/etc/rc.local

 

 

注意:客戶端nrpe.cfg配置文件,最好保留一份到計算機上,這樣之後在其餘的機器上裝nrpe時,直接上傳便可

 

 

 

到此,客戶端的安裝配置部分所有結束

 

 

 

 

14.5 nagios服務器端監控

 

14.5.1 nagios服務器端監控基礎介紹

 

1. nagios服務器端目錄結構

 

[root@hd1 ~]# ls -l /usr/local/nagios

total 24

drwxrwxr-x.  2 nagios nagios 4096 Oct 21 17:43 bin

drwxrwxr-x.  3 nagios nagios 4096 Oct 21 17:43 etc

drwxrwxr-x.  2 nagios nagios 4096 Oct 21 17:43 libexec

drwxrwxr-x.  2 nagios nagios 4096 Oct 20 17:09 sbin

drwxrwxr-x. 11 nagios nagios 4096 Oct 21 16:55 share

drwxrwxr-x.  5 nagios nagios 4096 Oct 20 17:12 var

 

 

bin 目錄爲nagios相關命令

 

etc目錄爲nagios的配置文件及目錄信息

 

etc

|-- cgi.cfg

|-- cgi.cfg~

|-- htpasswd.users

|-- nagios.cfg

|-- nagios.cfg~

|-- nrpe.cfg

|-- objects

|   |-- commands.cfg

 

 

nagios.cfg主配置文件

nrpe.cfg服務器端的nrpe的配置文件

objects具體對象配置文件

 

libexec爲全部插件的目錄路徑

 

 

var爲nagios數據及日誌目錄

share爲nagios界面展現的php程序等內容的目錄

 

全部客戶端本地服務的監控都是經過執行libexec目錄下的插件來實現的,若是開啓了snmp(簡單網絡管理協議)

nagios服務器端也能夠主動抓取

 

2. nagios服務器端核心配置文件

 

objects目錄裏面放的是主配置文件nagios.cfg包含的其餘nagios配置文件

 

 

 

 

 

配置文件名稱

說明

command.cfg

存放nagios命令相關配置,這裏的命令是nagios裏定義的命令和插件命令相關聯的一個文件

services.cfg

存放具體被監控的服務相關配置文件內容

hosts.cfg

存放具體被監控主機相關的配置內容

contacts.cfg

存放報警聯繫人相關配置的文件

timeperiods.cfg

存放報警週期時間等相關配置內容

templates.cfg

模板配置文件

 

 

 

 

3. 配置主配置文件nagios.cfg

[root@hd1 etc]# vim nagios.cfg +34

#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg

cfg_file=/usr/local/nagios/etc/objects/services.cfg

 

添加37,38行註釋掉36行

localhost.cfg這個配置爲監控服務器本地服務的配置文件,註釋掉,而後統一監控

 

根據已有數據生成hosts.cfg主機文件

 

[root@hd1 etc]# cd /usr/local/nagios/etc/objects/

[root@hd1 objects]# head -51 localhost.cfg >hosts.cfg

[root@hd1 objects]# chown nagios.nagios hosts.cfg

 

生成新的services.cfg服務文件

[root@hd1 objects]# touch services.cfg

[root@hd1 objects]# chown nagios.nagios services.cfg

 

最後生成服務的配置文件目錄,全部放到此目錄下的配置都會自動被包含到主配置文件中生效

[root@hd1 objects]# mkdir services

[root@hd1 objects]# chown -R nagios.nagios services

 

 

1. nagios監控模式定義及監控模式選擇

 

根據監控的行爲,將nagios的監控分爲主動和被動

 

主動監控:nagios服務器發出請求的主動探測監控方式,不須要客戶端安裝任何插件

 

被動監控:nagios服務端經過nrpe插件定時去鏈接client的nrpe服務獲取信息,併發回到nagios服務器的監控是被動監控,這類監控一般是針對本地資源的

 

如何選擇主動和被動監控

 

1.對於本地的資源查看,通常是被動模式例如:負載,內存、硬盤、溫度、風扇等

 

2.對於web服務,數據庫服務這種能對外提供服務的,通常是主動監控 例如httpd sshd mysqld rsyncd 等

 

主動模式和被動模式也能夠相互轉換

 

 

14.5.2  配置nagios服務器端監控項

 

1.定義要監控的nagios客戶端主機

 

hosts.cfg通常用來存放nagios要監控的主機相關配置,下面是hosts.cfg中的主機定義部分的配置參數詳解

添加全部須要監控的客戶端主機和主機組

例如:

 

 

2.配置services.cfg,定義要監控的資源服務

 

實例以下

 

[root@hd1 objects]# vim services.cfg                            

 

define service {

      use                 generic-service

      host_name           web01

      service_description Disk Partition

      check_command       check_nrpe!check_disk

 

  }

define service {

      use                 generic-service

      host_name           web01

      service_description swap useage

      check_command       check_nrpe!check_swap

 

  }

define service {

      use                 generic-service

      host_name           web01

      service_description mem useage

      check_command       check_nrpe!check_mem

 

  }

define service {

      use                 generic-service

      host_name           web01

      service_description current load

      check_command       check_nrpe!check_load

 

  }

define service {

      use                 generic-service

      host_name           web01

      service_description disk iostat

      check_command       check_nrpe!check_iostat!5!11

 

  }

define service {

      use                 generic-service

      host_name           web01

      service_description ping

      check_command       check_ping!100.0,20%!500.0,60%

 

  }

 

 

提示:check_nrpe是服務器端的插件(是commands.cfg裏預先定義的命令名),負責和客戶端的nrpe進程交流並執行check_nrpe歎號後的插件,因此,check_nrpe!check_load中的check_load是客戶端的插件名,是在客戶端的nrpe進程對應的配置nrpe.cfg定義的命令名

 

nagios軟件默認沒有提供客戶端的內存和i/o插件,可是本文在配置時已經複製進去了,所以,只需在commands.cfg裏配置便可

3..調試hosts.cfg和services.cfg的全部配置

1)須要在commands.cfg中加入check_nrpe的插件配置

 

執行檢查語法命令

[root@hd1 objects]# /etc/init.d/nagios checkconfig

 

Total Warnings: 0

Total Errors:   0

 

警告和錯誤都是0 表示已經ok了

 

啓動nagios服務

[root@hd1 objects]# /etc/init.d/nagios reload

Running configuration check...done.

Reloading nagios configuration...done

此時,能夠看到本身配置的本地個系統狀態的監控結果了

 

 

 

 

出現如上結果,表示登陸web用戶沒有被許可查看這些服務資源,可按照以下方法解決上面的問題

 

[root@hd1 objects]# cd /usr/local/nagios/etc

查看權限

[root@hd1 etc]# grep "^authorized_for" cgi.cfg

authorized_for_system_information=nagiosadmin

authorized_for_configuration_information=nagiosadmin

authorized_for_system_commands=nagiosadmin

authorized_for_all_services=nagiosadmin

authorized_for_all_hosts=nagiosadmin

authorized_for_all_service_commands=nagiosadmin

authorized_for_all_host_commands=nagiosadmin

替換成admin用戶

[root@hd1 etc]# sed -i 's#nagiosadmin#admin#g' cgi.cfg

 

再次查看

[root@hd1 etc]# grep "^authorized_for" cgi.cfg       

authorized_for_system_information=admin

authorized_for_configuration_information=admin

authorized_for_system_commands=admin

authorized_for_all_services=admin

authorized_for_all_hosts=admin

authorized_for_all_service_commands=admin

authorized_for_all_host_commands=admin

 

從新加載配置文件

 

[root@hd1 etc]# /etc/init.d/nagios reload

 

再次經過瀏覽器查看

 

 

 

up 意思是服務器正常

pending的意思是服務器還沒肯定狀態 稍等

  紅色表示有故障

提示:

1)最好換掉默認管理員用戶nagiosadmin,替換成admin

2)遇到調試問題注意查看/usr/local/nagios/var/nagios.log這點很重要   

#要養成常常查看日誌的習慣

 

》》》》基於nagios監控原理排錯的案例

nagios被動監控的原理其實就是利用下面這個命令工做的

 

[root@hd1 objects]# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.12 -c check_iostat

IOSTAT OK - user 0.07 nice 0.00 sys 0.20 iowait 0.04 idle 0.00  | iowait=0.04%;; idle=0.00%;; user=0.07%;; nice=0.00%;; sys=0.20%;;

 

咱們來看一個錯誤的案例

 

 

上圖說明有一個服務顯示不正常 disk iostat

 

1)在nagios服務器端執行以下命令

 

[root@hd1 objects]# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.12 -c check_iostat

check_swap: Warning free space should be more than critical free space

 

這個跟圖形報錯同樣

 

2)在客戶端本地執行腳本檢查命令

[root@hd2 ~]# cd /usr/local/nagios/libexec/

[root@hd2 libexec]# ./check_iostat -w 6 -c 10

IOSTAT OK - user 0.07 nice 0.00 sys 0.20 iowait 0.04 idle 0.00  | iowait=0.04%;; idle=0.00%;; user=0.07%;; nice=0.00%;; sys=0.20%;;

 

發現很正常,這說明客戶端的配置文件或者是服務器端的配置文件的問題

 

3)檢查客戶端的配置文件

 

[root@hd2 etc]# vim nrpe.cfg

 

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

command[check_iostat]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

 

 

4)修改

 

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%

command[check_iostat]=/usr/local/nagios/libexec/check_iostat -w 6 -c 10

 

5)重啓

[root@hd2 etc]# pkill nrpe

[root@hd2 etc]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

 

6)刷新查看(務必耐心等待)

 

能夠看到disk iostat服務ok了

 

 

5添加http服務的url地址及端口監控

 

url監控的是指是經過命令行理解http的監控原理,以下

 

[root@hd1 ~]# cd /usr/local/nagios/libexec/

[root@hd1 libexec]# ./check_http  -H 192.168.1.12

 

下面將192.168.1.12配置成一個web服務器

[root@hd2]# yum -y install httpd

[root@hd2]# /etc/init.d/httpd start

[root@hd2]# cd /var/www/html/

[root@hd2 html]# echo "woshi 192.168.1.12" >index.html

 

下面對url地址進行監控,將要監控的服務配置到services.cfg中便可

 

define service {

      use                 generic-service

      host_name           web01

      service_description http_url

      check_command       check_http

 

  }

配置好以後,檢查nagios語法

 

[root@hd1 objects]# /etc/init.d/nagios checkconfig

Total Warnings: 0

Total Errors:   0

 

從新加載配置文件

[root@hd1 objects]# /etc/init.d/nagios reload

 

此時,能夠看到本身配置的url監控成果了

 

 

7.監控任意tcp udp端口舉例

 

端口監控的實質就是執行以下命令去監控

ip 協議 網絡層 三層

tcp協議,傳輸控制協議,四層,穩定的協議,打電話

upd 協議,四層,用戶數據報協議,短消息qq

 

http 應用層的協議  check_http  check_tcp  80

 

咱們把22端口號添加進去進行監控

define service {

      use                 generic-service

      host_name           web01

      service_description sshd 

      check_command       check_tcp!22

 

  }

 

 

[root@hd1 objects]# /etc/init.d/nagios reload                                 

Running configuration check...done.

Reloading nagios configuration...done

 

這裏的check_tcp爲nagios plugin默認插件,commands.cfg會自動配置進去,不須要添加

 

端口檢查也是很不錯的輔助監控方式

 

 

小結:

 

主動模式的監控配置過程以下:

1)在服務器端的命令行把要監控的命令先調試好

2)在commands.cfg裏定義nagios命令,同時調用命令行的插件

3)在服務的配置文件裏定義要監控的服務,調用commands.cfg裏定義的nagios的監控命令

4)若是咱們在服務器端寫了一個腳本,必須在commands.cfg定義

5)若是咱們在客戶端寫了一個腳本,必須在客戶端的nrpe.cfg裏定義命令

 

14.6 服務器端nagios圖形監控顯示和管理

 

14.6.1 服務器端安裝pnp生成圖形監控曲線

 

1.pnp出圖基礎依賴軟件安裝

先經過下面的命令安裝pnp軟件須要的基礎包

 

[root@hd1 ~]# yum -y install cairo pango zlib zlib-devel freetype freetype-devel gd gd-devel

 

而後安裝rrdtool依賴的libart_lgpl相關軟件包,這個軟件包要優於rrdtool安裝

[root@hd1 ~]# yum install libart_lgpl libart_lgpl-devel -y

 

png工具最終是經過rrdtool實現的畫圖,所以須要提早安裝rrdtool

root@hd1 ~]# yum install rrdtool -y

 

2.安裝出圖web界面展現軟件pnp

 

此處選擇0.4.14的pnp版本,若是選擇高版本在出圖方面可能會有坑,正常狀況下,選0.4版已經足夠了

[root@hd1 ~]# yum -y install perl-Time-HiRes

 

[root@hd1 ~]# tar zxf pnp-0.4.13.tar.gz

[root@hd1 ~]# cd pnp-0.4.13

[root@hd1 pnp-0.4.13]# ./configure \

> --with-rrdtool \

> --with-perfdata-dir=/usr/local/nagios/share/perfdata/

 

[root@hd1 pnp-0.4.13]# make all 

[root@hd1 pnp-0.4.13]# make install

[root@hd1 pnp-0.4.13]# make install-config

[root@hd1 pnp-0.4.13]# make install-init

 

[root@hd1 pnp-0.4.13]# ls /usr/local/nagios/libexec/|grep process

process_perfdata.pl

 

 

pnp提供了一個獲取數據出圖的perl腳本,能夠用以下命令查到,

[root@hd1 pnp-0.4.13]# ll /usr/local/nagios/libexec/|grep process

-rwxr-xr-x. 1 nagios nagios  30138 Oct 27 10:33 process_perfdata.pl

 

此時打開瀏覽器訪問http://192.168.1.11/nagios/pnp 會出現下圖所示

 

過一下子從新訪問上述地址就會恢復正常

 

若是過了很長時間仍是現實不正常,能夠執行以下命令

 

[root@hd1 pnp-0.4.13]# yum install -y php-gd   

[root@hd1 pnp-0.4.13]# yum install -y gd

[root@hd1 pnp-0.4.13]# rpm -ivh /root/gd-devel-2.0.35-11.el6.x86_64.rpm

 

3.nagios出圖相關配置

 

1)執行編輯命令 ‘vi /usr/local/nagios/etc/nagios.cfg +835’ ,修改主配置文件835行,將以下參數對應的值從0改成1 ,表示記錄數據

 

大概從848行開始,找到以下兩項,取消參數開頭的註釋,修改後的最終結果以下:

 

 

2)執行編輯命令 ‘vi /usr/loca/nagios/etc/objects/commands.cfg +227’ ,修改commands.cfg命令配置文件,定義出圖獲取數據的命令

 要修改的是commands.cfg配置文件的第227-238行,默認的配置以下

 

define command{

        command_name    process-host-perfdata

        command_line    /usr/local/nagios/libexec/process_perfdata.pl

        }

 

 

# 'process-service-perfdata' command definition

define command{

        command_name    process-service-perfdata

        command_line    /usr/local/nagios/libexec/process_perfdata.pl

        }

 

重啓配置文件

[root@hd1 ~]# /etc/init.d/nagios reload    

Running configuration check...done.

Reloading nagios configuration...done

 

4)此時在瀏覽器輸入’http://192.168.1.11/nagios/pnp/index.php’打開頁面,正確的pnp界面以下

 

到這裏爲止,pnp軟件的出圖就ok了,可是尚未業務數據的圖形趨勢,由於尚未配置呢,接下去就來配置

 

14.6.2 配置主機及服務獲取狀態數據出圖

 

1.設置讓被監控的主機記錄數據

 

若是要讓全部的主機獲取數據並出趨勢圖,則需編輯nagios的主機hosts.cfg文件,

不過,只要在每個被監控主機的配置下面增長同一個參數項 ‘process_perf_data 1’

便可

 

[root@hd1 ~]# cd /usr/local/nagios/etc/objects/

[root@hd1 objects]# vi hosts.cfg

# Define a host for the local machine

 

define host{

        use                     linux-server

        host_name               web01

        alias                   web01

        address                 192.168.1.12

        process_perf_data       1

        }

 

 

2.設置讓被監控主機對應的服務記錄數據

 

[root@hd1 objects]# vim services.cfg

 

define service {

      use                 generic-service

      host_name           web01

      service_description Disk Partition

      check_command       check_nrpe!check_disk

       process_perf_data       1

 

  }

define service {

      use                 generic-service

      host_name           web02

      service_description Disk Partition

      check_command       check_nrpe!check_disk

       process_perf_data       1

  }

 

如何批量插入一行呢?

[root@hd1 objects]# sed -i  "/check_command/a  process_perf_data       1 "  services.cfg

 

[root@hd1 objects]# sed -i "s#,,,#   #" services.cfg

 

 

還能夠對採起對全部服務對應的統一模板裏添加配置參數的方式

 

服務裏的use generic-service 已經配置了

 

[root@hd1 objects]# sed -n '154,177p' templates.cfg

 name                            generic-service

 failure_prediction_enabled      1

 process_perf_data               1

 

 

 

重啓nagios服務

[root@hd1 objects]# /etc/init.d/nagios reload    

Running configuration check...done.

Reloading nagios configuration...done

 

 

到此,若是等一段時間,而後查看pnp url就能夠發現生成了圖形數據,有些數據須要壓測或者真實環境才能看

 

 

14.6.3 整合pnp url超連接到nagios web界面

 

 

1.給被監控的全部主機添加超連接圖標

 

[root@hd1 objects]# cat hosts.cfg

 

define host{

        use                     linux-server

        host_name               web01

        alias                   web01

        address                 192.168.1.12

        process_perf_data       1

        action_url              /nagios/pnp/index.php?host=$HOSTNAME$

 

 

 

2.給被監控的主機指定的服務添加超連接圖標

 

刪除空行 : sed  '/^$/d' services.cfg

 

 

從新加載配置

[root@hd1 objects]# /etc/init.d/nagios reload

 

測試一下

 

 

 

14.7 實現對nagios故障報警給管理員

 

將要nagios故障報警給管理員時,經常使用的方式包括郵件報警和手機報警,下面分別介紹

 

1.郵件報警

 

普通郵件報警就是在故障發生或恢復時,將報警信息發到系統管理員或相關維護人的信箱中,最好是公司內部郵箱。

 

定義收郵件的郵箱

[root@hd1 ~]# vim /usr/local/nagios/etc/objects/contacts.cfg

 

 

 

 

 

 

 

 

 

常見的發送郵件的方法有兩種 ,一種是啓動本機的郵件服務postfix ,另一種是使用網上第三方郵件服務提供商的服務,例如:qq郵件服務或網易郵件服務

 

法1的配置

[root@hd1 nagios]# /etc/init.d/postfix restart

Shutting down postfix:                                     [  OK  ]

Starting postfix:                                          [  OK  ]

[root@hd1 nagios]# lsof -i :25

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

master  32807 root   12u  IPv4  57932      0t0  TCP localhost:smtp (LISTEN)

master  32807 root   13u  IPv6  57934      0t0  TCP localhost:smtp (LISTEN)

 

若是postfix啓動比較慢,能夠修改/etc/hosts作好本機ip和主機名的映射

 

提示:此環境下因爲沒有外網ip,而且郵件服務沒有作好mx記錄及反向解析,所以,郵件常常會收不到,或者當作垃圾郵件

 

法二:使用網上第三方郵件服務提供商好比163的郵箱

注意:這裏的163郵箱做爲報警的發件人,至關於htf1304@163.com 用戶登陸郵箱,而後給人發信,收件人就是在contact.cfg裏定義的

[root@hd1 ~]# vim /etc/mail.rc

[root@hd1 nagios]# /etc/init.d/postfix restart

 

在這裏說一下有些運營商 能夠開啓郵件短信提醒也比較方便

 

 

 

14.8 nagios插件開發

 

14.8.1 概述

 

1.什麼是nagios插件

 

  前文在部署nagios服務時已經安裝了nagios-plugins-1.4.6.tar.gz這個軟件包就是nagios插件安裝包

 

能夠看到有不少插件,其實,nagios軟件自己僅僅是一個監控的平臺,若是要監控具體的主機及服務的狀態和數據信息,還必須配置或調用插件或程序文件才能完成任務,所以,若是沒有插件,nagios就是一個空殼,什麼都作不了

 

2.爲何要開發nagios插件

 

大部分服務都不須要開發插件,但有部分咱們要監控的服務,是nagios裏沒有插件,須要咱們本身開發編寫腳本

 

14.8.2 編寫nagios插件的規則

1.編寫nagios插件說明

nagios插件是nagios提供的一種經過可擴展的方式部署的程序組件,該插件可經過shell、java、c++、php、python等多種開發語言開發,運維或系統架構人員只要經過修改nagios配置文件和相應的參數,就能很方便地將該插件集成到nagios中,實現對目標系統的監控

  nagios服務爲插件程序提供了兩個返回值接口和插件交互:一個是插件執行後的退出狀態碼,另外一個是插件執行過程當中在控制檯打印的第一行數據,退出狀態碼能夠被nagios主程序做爲判斷被監控系統服務狀態的依據,控制檯打印的第一行數能夠被nagios主程序做爲被監控系統服務狀態的補充說明,會顯示在web管理界面裏

 

注意:若是是一個主動監控插件,須要放在nagios服務器端/usr/local/nagios/liexec,而且須要在commands.cfg文件中定義本插件,而後須要在services.cfg 中添加一個新的監控服務,在這個服務裏,調用這個插件,若是是一個被動監控插件,須要放在nagios客戶端/usr/local/nagios/liexec,而且須要在客戶端的nrpe.cfg裏定義這個插件,而後須要在nagios服務器端services.cfg 裏添加一個新的監控服務,而且在這個服務裏,調用這個插件,注意調用的時候,別忘了前面有check_nrpe!chanjian      

 

 

退出狀態碼和說明以下:

 

ok 退出代碼,0表示服務工做正常

 

warning 退出代碼,1表示服務處於警告狀態

 

critical 退出代碼,2表示服務處於緊急、嚴重狀態

 

unknown 退出狀態碼,3表示服務出於未知狀態

 

[root@hd1 libexec]# head -7 utils.sh

#! /bin/sh

 

STATE_OK=0

STATE_WARNING=1

STATE_CRITICAL=2

STATE_UNKNOWN=3

STATE_DEPENDENT=4

 

2.nagios插件開發原理

  nagios插件程序中須要調用監控服務規定的操做序列,並根據預選定義的規則,對返回結果進行分析,判斷服務的當前狀態,而後以指定的狀態碼退出程序,同時將對該狀態的說明不換行輸出到控制檯

 

 

14.8.3 使用shell開發nagios插件

 

1.編寫檢查webrul地址的插件

 

[root@hd1 libexec]# cat check_url.sh

#!/bin/sh

#get the shell script name

progname=`basename $0`

#get the file path

progpath=`dirname $0`

 

usage() {

       

      echo "usage: /bin/sh  $progname url"

      exit 1

 

  }

 

#

[ $# -ne 1 ] && usage

 

wget -T 10  --spider $1 >/dev/null 2>&1

#此處解釋 wget命令

#-T, --timeout=SECONDS設定讀取時超過的時間爲SECONDS秒.  

#-t 設置重試次數。當鏈接中斷(或超時)時,wget將試圖從新鏈接。若是指定-t0,則重#試次數設爲無窮多。
#-c指定斷點續傳功能。實際上,wget默認具備斷點續傳功能,只有當你使用別的ftp工具#下載了某一文件的一部分,並但願wget接着完成此工做的時候,才須要指定此參數。

if [ $? -eq 0 ]

 

   then

    echo "url $1 ok "

    exit 0

 

   else

    echo "url $1 critical"

    exit 2

fi

 

 

上述腳本中 basename、dirname是系統命令

 

 

[root@hd1 libexec]# basename /usr/local/nagios/libexec

libexec

[root@hd1 libexec]# dirname /usr/local/nagios/libexec

/usr/local/nagios

 

 

測試一下webrul插件腳本

 

[root@hd1 libexec]# sh check_url.sh 192.168.1.12   

url 192.168.1.12 ok

 

2.weburl插件腳本部署過程

  1)將check_url.sh放到/usr/local/nagios/libexec中,並受權爲可執行

     [root@hd1 libexec]# chmod +x check_url.sh

 

  2)在command.cfg創建check_url命令;

     

 

3)在services.cfg裏添加監控上述url地址的服務

define service {

      use                 generic-service

      host_name           web01

      service_description http_zhudong_url

      check_command       check_url

 

4.從新加載nagios ,查看結果

 

[root@hd1 objects]# /etc/init.d/nagios reload    

Running configuration check...done.

Reloading nagios configuration...done

 

5.從新查看nagios服務頁面的監控結果

 

注意:這次屬於主動監控的方式,因此能夠停掉客戶端的nrpe進程

 

3.利用被動模式的nrpe方式監控/etc/passwd 文件是否變化

 

nagios被動模式下的全部插件都須要部署在被監控的nagios客戶端,部署步驟以下:

 

1)在nagios客戶端web01 上取/etc/passwd的文件指紋,即md5值

  

[root@hd2 ~]# md5sum /etc/passwd >/root/ps.md5

 

2)在nagios客戶端上web01上開發插件腳本,並測試

 

[root@hd2 libexec]# cat check_passwd

#!/bin/bash

orimd5="f7e63f1940dba72443afc319dfadc7f6"

currmd5=`md5sum /etc/passwd|cut -c 1-32`

 

if [ "$orimd5" == "$currmd5" ]

 

 then

     echo "/etc/passwd:ok"

     exit 0

 

 else

    echo "/etc/passwd:failed"

    exit 2

 

  fi

 

 

 

 

測試腳本

[root@hd2 libexec]# sh check_passwd 

/etc/passwd:ok

 

給腳本權限

[root@hd2 libexec]# chmod +x check_passwd

 

1)在nagios客戶端web01上編輯nrpe.cfg,插入以下的內容後保存

 

command[check_passwd]=/usr/local/nagios/libexec/check_passwd

 

 4)在nagios客戶端上重啓nrpe,並檢查是否重啓成功

 

[root@hd2 etc]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

[root@hd2 etc]# ps -ef|grep nrpe|grep -v grep

nagios   126175      1  0 09:00 ?        00:00:00 /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

 

5)在nagios服務器端上上進入services.cfg 文件添加以下集行內容

 

 

6)在nagios服務端檢查語法並重啓服務

[root@hd1 objects]# /etc/init.d/nagios reload

Running configuration check...done.

Reloading nagios configuration...done

 

 

 

7)進入服務器端的/usr/local/nagios/libexec 目錄,手動測試

 

 

8)在客戶端進行測試

 

 

9)經過頁面進行檢查

 

 

到此,nagios結束了。

 

常見問題

 

1.出現nrpe:unable to read output

 

多是:客戶端對應插件命令不存在或者無執行權限等緣由致使

 

2.出現nrpe:command  ·check_passwd· not defined 相似的問題

 

多是:服務器端的服務裏配置的命令與客戶端的nrpe.cfg裏配置的命令名不匹配致使的

 


 

 

 

開發一個主動監控的插件

 

1.在libexec下編寫插件並給執行權限

[root@hd1 libexec]# cat check_htf_ping 
#! /bin/bash
ping 192.168.1.12 -c 4 >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "web01 is online"
else
echo "web01 no online"
fi

 

[root@hd1 libexec]# chmod 755 check_htf_ping 

 

 

2.在commands.cfg 定義插件命令

[root@hd1 libexec]# cat ../etc/objects/commands.cfg

# 'check_ping' command definition

define command{

        command_name    check_htf_ping

        command_line    $USER1$/check_htf_ping 

        }

 

 

3.在services.cfg裏配置服務,調用這個插件

 

[root@hd1 libexec]# cat ../etc/objects/services.cfg

define service {

      use                 generic-service

      host_name           web01

      service_description  ping 192.168.1.12

      check_command       check_htf_ping

      process_perf_data       1

      action_url         /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$

  }

 

4.重啓服務,去瀏覽器上查看並驗證

 

[root@hd1 libexec]# /etc/init.d/nagios  restart    

 

 

 


編寫一個被動插件,監控客戶端的/dev/sda3分區的若是磁盤佔用率超過7%報警exit 1 

若是不大於7%不報警,exit 0

 

在web01 的nrpe.cfg 中添加一行

 

 

 

而後重啓 nrpe

 

在服務器端 services.cfg中添加

 

而後從新加載nagios

/etc/init.d/nagios reload

 

 

 

收到郵件也受到了短信通知  服務搭建ok!!

提示:

ok 退出代碼,0表示服務工做正常

 

warning 退出代碼,1表示服務處於警告狀態

 

critical 退出代碼,2表示服務處於緊急、嚴重狀態

 

 

 

 

若是有什麼不太好解決的問題,建議你們多分析日誌。

相關文章
相關標籤/搜索