天天看點

NAGIOS

                                                                  再談nagios

前言:

 好吧,準備重新再寫一次nagios的詳細說明文檔。因為這個東西安裝起來簡單,配置使用确實相對複雜很多。希望我能盡量寫的夠詳細,并将可能遇到的問題都列舉出來。

【nagios簡介】

首先我們先知道這個是個什麼東西。

nagios是一款開源的免費網絡監視工具,能有效監控windows、linux和unix的主機狀态,交換機路由器等網絡設定,列印機等。在系統或服務狀态異常時發出郵件或短信報警第一時間通知網站運維人員,在狀态恢複後發出正常的郵件或短信通知。(我承認我是從百度百科上拷貝的,不過這個解釋的已經很好了。)

nagios應用在linux作業系統中,那麼基礎的linux操作就不再多說。

nagios的強大主要在于其插件所提供的各種監控功能以及web形式的友好互動,nagios對于linux和windows伺服器都可以很好的進行監控,這裡主要說明對linux伺服器的監控。

【準備工作】

naigos必須運作在有c語言編輯器的linux平台上,并且需要一個web伺服器(通常來說apache即可)來提供友好的互動界面,否則你監控到的内容隻是一堆日志毫無樂趣可言。下面我将按照最小化安裝的裸機來進行安裝。

我使用的centos5.6版本,用ubuntu的注意版本及配置檔案習慣即可

監控主機a位址:192.168.0.10

被監控主機b位址:192.168.0.20

首先下載下傳3個檔案:

nagios-3.3.1.tar.gz                        nagios主程式

nagios-plugins-1.4.15.tar.gz       nagios插件

nrpe-2.12.tar.gz                             監控linux主機所需插件

#yum install –y httpd php gcc* gd* glibc*     安裝nagios所需的庫,這裡為了友善後面操作apache 和php都是yum安裝的,如果編譯安裝的朋友注意下路徑即可。

#groupadd nagios       建立一個nagios組

#useradd nagios –g nagios     建立一個nagios使用者并将其加入到nagios組中

【安裝nagios】

# tar zxvf nagios-3.3.1.tar.gz

# cd nagios

# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios   最好還是制定目錄

# make all

# make install

# make install-commandmode

# make install-config

# make install-init

# make install-webconf

這裡nagios的編譯不同于其他的軟體,需要好幾步才能完成,我們來解釋一下make這幾步的意思

make install  安裝主要的程式、cgi、html檔案等等。

make install-commandmode 賦予外部指令通路nagios配置檔案的權限

make install-config 将nagios的配置檔案的例子複制到nagios的安裝目錄下

make install-init 将nagios做成一個運作腳本,放入init.d中,使nagios可以随系統的開機而啟動

make install-webconf配置apache的web接口,如果運作出錯,是因為你的apache是自己編譯安裝的

不是yum安裝的,webconf生成的檔案會放在/etc/httpd/conf.d/下,因為找不到這個目錄,是以出錯

編譯安裝完成後:

# ls /usr/local/nagios

bin  etc  include  libexec  share

檢視是否有上面的檔案,如果有到此nagios就算是安裝完了。

那麼我們來看看這上面幾個目錄下的檔案都有什麼意義。

bin          nagios執行程式所在目錄,這個目錄隻有一個檔案nagios

etc          nagios配置檔案位置,初始安裝完成後,隻有幾個*.cfg-sample檔案

sbin        nagios  cgi檔案所在目錄,也就是執行外部指令所需檔案所在的目錄

share     nagios網頁檔案所在的目錄

var          nagios日志檔案、spid等檔案所在的目錄

nagios的主程式安裝完畢後,為了以防萬一我們來檢查一下/usr/local/nagios的目錄權限

如果不是nagios的屬主那麼要将屬主進行修改,否則nagios沒有權限來運作。

我們在進行下一步插件的安裝

【安裝nagios插件】

插件對于nagios來說是非常重要的,插件的版本對于nagios主程式之間的關聯并不大

各個版本基本都可以使用。

# tar zxvf nagios-plugins-1.4.15.tar.gz

# cd nagios-plugins

# ./configure --prefix=/usr/local/nagios   nagios-plugins是安裝到nagios的主目錄下的

# make

安裝完成後/usr/local/nagios生成目錄libexec,這就是nagios所需要的插件

檢查工作:

再次檢查nagios主目錄的屬主,一定要是nagios,不能是root

如果屬主不正确

#chown -r nagios.nagios /usr/local/nagios

nagios的使用者不需要登入shell 是以如果為了安全

vi /etc/passwd

nagios:x:500:500::/home/nagios:/bin/bash

修改為:

nagios:x:500:500::/home/nagios:/bin/nologin

那麼nagios使用者則不能夠登入shell

【配置apache】

  yum 裝的apache本身不需要太多的配置,在nagios的編譯過程中的make install-webconf就是在/etc/httpd/conf.d/下生成nagios.conf的配置檔案。會自動幫你配置apache的nagios部分。

#vi  /etc/httpd/conf/httpd.conf

修改apache的運作使用者為nagios

user nagios

group nagios

在末尾加上apache的nagios部分

scriptalias /nagios/cgi-bin "/usr/local/nagios/sbin"

<directory "/usr/local/nagios/sbin">

#  sslrequiressl

   options execcgi

   allowoverride none

   order allow,deny

   allow from all

#  order deny,allow

#  deny from all

#  allow from 127.0.0.1

   authname "nagios access"

   authtype basic

   authuserfile /usr/local/nagios/etc/htpasswd.users

   require valid-user

</directory>

alias /nagios "/usr/local/nagios/share"

<directory "/usr/local/nagios/share">

   options none

上面文本的作用是對nagios的目錄進行使用者驗證,隻有合法的授權使用者才可以通路nagios的頁面檔案

生成使用者驗證檔案

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

指令互動執行需要輸入2次密碼,然後會再/usr/local/nagios/etc/htpasswd.users中寫入一行字段是

剛才生成的使用者名和密碼

如需添加更多使用者執行指令中去掉-c即可,否則會覆寫所有已經生成的行

配置完成後執行/usr/sbin/httpd -t 來驗證apache 的配置檔案壓法

這裡的httpd路徑根據自己具體的路徑來執行

#service httpd restart

在浏覽器中輸入nagios的通路位址: http://local/nagios

在登入框中輸入你剛才設定的nagios使用者和密碼

到此我們的nagios伺服器就已經搭建好了,但是現在還沒有檢測任何的主機也沒有任何的資訊,我們現在要做的就是來看一看nagios伺服器到底需要怎麼用。

【配置nagios】

好了 這裡是我們的最重的重點了,我們來詳細的分析一下nagios的配置檔案。

首先來看一下nagios的etc目錄下的配置檔案有哪些

-rw-rw-r-- 1 nagios nagios 11408 12-07 12:57 cgi.cfg

-rw-r--r-- 1 nagios nagios    26 11-01 17:36 htpasswd.users

-rw-rw-r-- 1 nagios nagios 43775 12-07 12:19 nagios.cfg

drwxrwxr-x 2 nagios nagios  4096 12-07 14:44 objects

-rw-rw---- 1 nagios nagios  1340 11-01 17:35 resource.cfg

ps: 如果是nagios2.6版本以前,etc下的檔案名都是cgi.cfg-sample類型, 改名為cgi.cfg即可,2.6以後版本都不需要修改配置檔案名

由于我的nagios是最新的版本這裡會有一個objects的目錄,那麼來看一下目錄下有哪些檔案

commands.cfg  定義了各項功能指令及說明

localhost.cfg    監控的主機配置檔案

printer.cfg      監控列印配置檔案

templates.cfg   這裡會給你提供一些配置檔案的模闆供參考

windows.cfg    監控windows主機的配置檔案

contacts.cfg    定義聯系人的檔案

switch.cfg      這個基本不用,是一個假定您使用的示例配置檔案得到安裝nagios的快速入門指南。

timeperiods.cfg  監視時段配置檔案

這裡的object不同于老版本将一些對具體監控的配置放置在了統一的object目錄下,以友善管理。

# /usr/local/nagios/bin/nagios -v /usr/local/nagos/etc/nagios.cfg 來驗證程式能否正常運作

# vi /usr/local/nagios/etc/localhost.cfg

把下面的幾行注釋去掉

cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg  //聯系組配置檔案路徑

cfg_file=/usr/local/nagios/etc/objects/contacts.cfg       //聯系人配置檔案路徑

cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg     //主機組配置檔案路徑

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg          //主機配置檔案路徑

cfg_file=/usr/local/nagios/etc/objects/services.cfg       //服務配置檔案路徑

cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg    //監視時段配置檔案路徑

将check_external_command=0修改為1 作用是允許執行web界面下重新開機nagios,停止主機/服務檢查鞥操作

cgi.cfg檔案 控制相關的cgi腳本

#vi /usr/local/nagios/etc/cgi.cfg

確定use_authentication=1

其中的各項authorized_for_都是定義登入的使用者權限

全部設定為nagiosadmin即可,也可設定你自己htpasswd生成設定的使用者名

【安裝nrpe】

# tar zxvf nrpe-2.12.tar.gz

# cd nrpe

# .configure

# make install-plugin

commands.cfg定義外部建構nrpe

# vi /usr/local/nagios/etc/objects/commands.cfg

#check nrpe

define command{

        command_name check_nrpe

        command_line $user1$/check_nrpe -h $hostaddress$ -c $arg1$

        }

設定要監控的linux主機

vi /usr/local/nagios/etc/nagios.cfg

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

設定localhost.cfg内容

vi /usr/loca/nagios/etc/objects/locaohost.cfg

address 修改為被監控的ip

其他設定:

chkconfig --add nagios  配置開機啟動

chkconfig nagios on

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

vi /etc/selinux/config 關閉selinux

selinux=disabled

service iotables stop

serivce nagios start

【配置被監控端】

一、安裝nagios-plugin

# useradd nagios

# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-redhat-pthread-workaround

chown -r nagios.nagios /usr/local/nagios

二、安裝被監控端nrpe

# make install-daemon

# make install-daemon-config

配置nrpe

vi  /usr/local/nagios/etc/nrpe.cfg

allowed_hosts=192.168.0.1,127.0.0.1

啟動nrpe

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

也可講其寫入到/etc/rc.d/rc.local中開機運作

驗證nrpe

# netstat -anpl |grep 5666

tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   listen      11750/nrpe   

# /usr/local/nagios/libexec/check_nrpe -h 127.0.0.1

nrpe v2.12

然後服務端測試

/usr/local/nagios/libexec/check_nrpe -h 被監控機ip

配置監控對象(重要)

# vi /usr/local/nagios/etc/nrpe.cfg

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10

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

command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/hda1

command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s z

command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

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

這一步是關鍵,如果nagios伺服器想要監控客戶機swap分區,但客戶機nrpe.cfg檔案

沒有swap監控對像,這時監控伺服器就是報錯(nrpe command ‘check_swap’no defined).

平時自己寫腳本,也是主要配這個地方

至此就可以監控linux客戶機的disk,swap,users,memory了

那麼到了這裡還不夠,如果我們需要郵件報警或者短信報警的功能那麼就要進行更加負責的操作

【郵件報警】

我們首先看一下郵件報警的功能事怎麼定義的:

vi /usr/local/nagios/etc/objects/commands.cfg

#'notify-host-by-email' command definition

        command_name    notify-host-by-email

        command_line    /usr/bin/printf "%b" "***** nagios *****\n\nnotific

ation type: $notificationtype$\nhost: $hostname$\nstate: $hoststate$\naddre

ss: $hostaddress$\ninfo: $hostoutput$\n\ndate/time: $longdatetime$\n" | /bi

n/mail -s "** $notificationtype$ host alert: $hostname$ is $hoststate$ **"

$contactemail$

# 'notify-service-by-email' command definition

        command_name    notify-service-by-email

ation type: $notificationtype$\n\nservice: $servicedesc$\nhost: $hostalias$

\naddress: $hostaddress$\nstate: $servicestate$\n\ndate/time: $longdatetime

$\n\nadditional info:\n\n$serviceoutput$\n" | /bin/mail -s "** $notificatio

ntype$ service alert: $hostalias$/$servicedesc$ is $servicestate$ **" $cont

actemail$

這裡定義了host和server兩個子產品的email發送方式,

可以看到nagios預設的是使用linux系統自帶的/bin/mail 來發送郵件的,

這裡nagios已經幫我們配置好了,不出意外的話不需要進行太多修改。但是如果你需要用sendmail的話,可以自己修改指令。

下面來看看聯系人的配置檔案

vim /usr/local/nagios/etc/objects/contacts.cfg

定義一個發送郵件的位址和選項

define contact{

     contact_name   nagiosadmin  //定義聯系人的名字

     use      generic-contact  //這個名字是預設的,沒有進行修改                                                                                                                                       做修改

     alias     nagios admin  //别名

     service_notification_period    24x7  //服務出現狀況通知的時間段,這個時間段是objects中的timeperiod.cfg中定義的

     host_notification_period         24x7  //主機出現狀況通知的時間段,這個時間段同樣是timeperiod.cfg中定義的

      service_notification_options      w,u,c,r  //當伺服器出現w(warning),u(unkown),c(critical),或者r(恢複)這幾種情況下通知聯系人

      host_notification_options         d,u,r         //與service差不多,d的意思是down

      service_notification_commands   notify-service-by-email         // 定義服務出現問題,使用指令notify-service-by-email通知

      host_notification_commands      notify-host-by-email     //主機出現問題使用notify-host-by-email 通知

      email                          [email protected]    //通知人的郵件位址

}

這裡順便也講contact組也定義了 如下:

define contactgroup{

        contactgroup_name       admins

        alias                   nagios administrators

        members                 nagiosadmin

下面來看監控主機的配置檔案,我這裡的配置檔案為localhost.cfg

你可以選擇起任何的名字,隻需要在nagios.cfg中重新定義即可。

vi /usr/local/nagios/etc/objects/localhost.cfg

定義主機如下:

define host{

 host_name linux-20      //為被監控的主機起個名字

 alias  linux20       //起個别名

 address  192.168.0.20   //ip位址

 contact_groups admins       //聯系人的組,在contacts.cfg中定義

 check_command check-host-alive  //檢查主機狀态的指令,commands.cfg中定義

 check_period 24x7    //檢查的時間段24*7,來自timeperiod.cfg中定義的

 max_check_attempts 3  //檢查失敗後的重試次數

 notification_interval  10  //提醒的間隔,機關是分鐘

 notification_period  24x7  //提醒周期,來自timeperiod.cfg中定義

 notification_options  d,u,r   //報警的選項

主機檢查指令行一般選擇檢查主機存活check-host-alive

最大嘗試次數最好不要設定為“1”,一般來說3-4次比較合理,否則你的郵箱估計會爆掉

順便将host組也定義下

define hostgroup{

        hostgroup_name  linux-servers

        alias           linux servers

        members         linux-20  //可以在此添加linux主機,以逗号分離

下面來編輯service 的配置還是在localhost.cfg下,以ping和apache服務為例子

define service {

host_name   linux-20                      #被監控的主機,hosts.cfg中定義的

service_description  ping                      #定義的是監控這個主機是不是存活,描述是ping

check_period          24x7                        #監控的時間段,是timeperiods.cfg中定義的

notification_interval        10                 #重複發送提醒資訊的最短間隔時間。預設間隔時間是

                                               "60"分鐘。如果這個值設定為 "0" ,将不會發送重複提醒

normal_check_interval        3                 #檢查間隔3分鐘

max_check_attempts           3                 #最大重試次數,重新檢查3次 3次都失敗就報警

retry_check_interval         2                 #重試檢查間隔時間2分鐘

check_command   check_ping!100.0,20%!500.0,60%  #使用ping來做健康檢查

contact_groups          admins               #聯系人組,是contactgroups.cfg中定義的

                      }

host_name   linux-20

max_check_attempts           5

check_period              24x7

notification_interval        10

normal_check_interval        1

retry_check_interval         1

service_description  http

check_command   check_http

notification_period     24x7

notification_options     w,u,c,r

contact_groups          admins

                       }

主機名 host_name,必須是主機配置檔案hosts.cfg中定義的主機。

檢查用的指令check_command,在指令配置檔案中定義或在nrpe配置檔案中有定義。

最大重試次數max_check_attempts 一般設定為3-4次比較好,這樣不會因為網絡閃斷片刻而發生誤報。

檢查間隔和重試檢查間隔的機關是分鐘。

通知間隔指探測到故障以後,每隔多少時間發送一次報警資訊。 它的機關是分鐘。

通知選項跟服務定義配置檔案相同。

聯系組contact_groups由配置檔案contactgroup.cfg定義。

最後我們檢查下配置檔案是否正确

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

service nagios restart 

通過破壞測試,看看你能不能收到郵件吧。

ps:關于收不到郵件有很多可能

1.本地mail指令沒有權限給nagios用或者mail本身就無法使用

2.本地防火牆阻止

3.commands.cfg中的mail功能定義錯誤

4.你定義的收件郵箱阻止了nagios的郵件

想檢視你的郵件到底有沒有發送出去,還是要看/var/log/maillog的日志吧

一般來說配置的過程中會出現很多問題 多用

驗證,多檢視各個日志是能找到關鍵性的錯誤點的,祝大家好運。

繼續閱讀