Nagios监控系统安装及配置文档
3. 前言
做為系統(tǒng)管理員,管理著幾十臺或幾百臺服務(wù)器在運行。一個非常迫切的需求就是希望了解服務(wù)器及服務(wù)器上運行的服務(wù)的運行狀況,在服務(wù)器或服務(wù)出現(xiàn)當機或停止的時候能夠第一時間知道,及時處理。以便最小的減少由此帶來的影響和損失。Nagios就是用來解決這個問題的,在目前的一些監(jiān)控軟件中,Nagios 以其良好的穩(wěn)定性,強大的功能等,已成為業(yè)界監(jiān)控軟件的首選。
Nagios官方網(wǎng)站的描述:
Nagios is an open source host, service and network monitoring program. Who uses it? Lots of people, including many big companies and organizations:Nagios是一個用來監(jiān)控主機、服務(wù)和網(wǎng)絡(luò)的開放源碼軟件,很多大的公司或組織都在使用它。
4. Nagios監(jiān)控原理
上圖為Nagios監(jiān)控原理圖。Nagios監(jiān)控可以使用主動模式(Action)和被動模式 (Passive)。
主動模式主要是自身插件或結(jié)合Nrpe實現(xiàn),由Nagios在定義的時間去主動監(jiān)測被監(jiān)控端的服務(wù)器或服務(wù)是否正常。被動模式結(jié)合Naca實現(xiàn),由Nsca定時監(jiān)控服務(wù)器或服務(wù),再由Nasa把結(jié)果傳至Nagios。
被動模式適合大規(guī)模服務(wù)器(一般在最少100臺以上)需要監(jiān)控的情況,可有效減少監(jiān)控服務(wù)器的壓力。在服務(wù)器數(shù)量比較少的情況下用主動模式比較方便,因為主要的配置在監(jiān)控主機的設(shè)置就好了,無需在被監(jiān)控端做過多設(shè)置。
我們的監(jiān)控是使用Nagios結(jié)合Nrpe的主動模式。
5. Nagios的安裝
5.1. YUM方式安裝
我們的監(jiān)控服務(wù)器是Centos linux 4.8,可用yum方式安裝:
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.i386.rpm
# rpm –ivh rpmforge-release-0.3.6-1.el4.rf.i386.rpm
# yum install nagios*
# chkconfig –level 2345 nagios on
# service nagios start
注:本文后面的配置都是按yum安裝后的環(huán)境來配置的。
5.2. 源代碼方式安裝
1)安裝Nagios
# wget http://jaist.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.6.tar.gz
# tar zxvf nagios-3.0.6.tar.gz
# cd nagios-3.06
# ./configure -prefix=/usr/local/nagios
# make install????????????????? //安裝主要的程序、CGI及HTML文件
# make install-commandmode????? //給外部命令訪問nagios配置文件的權(quán)限
# make install-config?????????? //把配置文件的例子復(fù)制到nagios的安裝目錄
# make install-init???????????? //把nagios做成一個運行腳本,使nagios隨系統(tǒng)開機啟動
或者上面四步可用一行令代替:
# make all
2) 安裝nagios的插件
# wget http://nchc.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz
# cd nagios-plugins-1.4.13
# tar zxvf nagios-3.0.6.tar.gz
# ./configure -prefix=/usr/local/nagios
# make
# make install
6. Nagios配置文件
其實Nagios只有一個配置文件,就是/etc/nagios/nagios.cfg,其它的配置文件都是以include的方式包括進nagios.cfg的。如:
# You can specify individual object config files as shown below:
cfg_file=/etc/nagios/objects/commands.cfg
cfg_file=/etc/nagios/objects/contacts.cfg
cfg_file=/etc/nagios/objects/timeperiods.cfg
cfg_file=/etc/nagios/objects/templates.cfg
# Definitions for monitoring the local (Linux) host
cfg_file=/etc/nagios/objects/hosts.cfg
cfg_file=/etc/nagios/objects/services.cfg
commands.cfg是監(jiān)控命令的配置文件,contacts.cfg是監(jiān)控報警聯(lián)系人的配置文件,timeperiods.cfg是時間定義配置文件,templates.cfg是模板配置文件,這里面定義了一些模板以方便用戶使用。Hosts.cfg是被監(jiān)控主機的配置文件,services.cfg是被監(jiān)控服務(wù)的配置文件。
唯一的例外是cgi.cfg,這個文件是與WEB相關(guān)的。
6.1. Nagios的WEB配置
# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin 123456
建一個WEB訪問的用戶之后,在瀏覽器輸入http://ip/nagios/,輸入相應(yīng)的用戶和密碼就可以就看到Nagios的web界面了。
WEB用到的配置文件是/etc/nagios/cgi.cfg,更改配置可修改這個配置文件。
# vi /etc/nagios/cgi.cfg
use_authentication=1???????????????????????? #使用用戶認證
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
6.2.? hosts.cfg
define host{??????????? #這段是用來定義一個被監(jiān)控的主機。
host_name???????????? #這一項是用來定義標識主機的名字。我們用這個名字在host group和service里標識這個主機。一個主機能定義多個服務(wù)。使用適當時,宏$HOSTNAME$里存放了這一項的值。
alias???????????????? #這一項用來定義主機的一個完整名字或描述。主要是和使你能理容易的標識一個主機。使用適當時,宏$HOSTALIAS$里存放了這一項的值。
address?????????????? #這一項是用來定義主機的地址。一般而言是主機的IP。當然,你也能夠使用一個FQDN來標識你的主機,在沒有可訪問DNS服務(wù)器服務(wù)的情況下這種方法會引起問題。使用適當時,宏$ HOSTADDRESS $里存放了這一項的值。
max_check_attempts??? #這一項用來定義在檢測返回結(jié)果不是OK時,nagios重試檢測命令的次數(shù)。設(shè)置這個值為1會導(dǎo)致nagios一次也不重試就報警。
check_period????????? #這一項用一個time period項的名字來定義在哪段時間內(nèi)激活對這臺主機的主動檢測。time period是定義在別的文件里的配置項,我們可以在這里用名字來引用她。
contact_groups??????? #這是一個聯(lián)系組列表。我們用聯(lián)系組的名字來引用她們。多個聯(lián)系組間用“,”來分隔。
notification_interval #這一項用來定義當一個服務(wù)仍然down或unreachable時,我們間隔多久重發(fā)一次通知給聯(lián)系組。
notification_period?? #這一項用一個time period定義來標識什么時間段內(nèi)給聯(lián)系組送通知。這里我們用time period定義的名字來引用她。
notification_options? #這一項用來決定發(fā)送通知的時機。選項有:d = 當有down狀態(tài)時發(fā)送通知,u = 當有unreachable狀態(tài)時發(fā)送通知, r = 當有服務(wù)recoveries時發(fā)送通知,f = 當主機啟動或停機時發(fā)送通知。如果你給一個n選項,那么永遠不會發(fā)送通知。
}
define hostgroup{???? #這段是用來定義一個被監(jiān)控的主機組。
hostgroup_name? #主機組名稱,通常定義得較短
alias?????????? #主機組別名,通常定義得較長
members???????? #主機組成員
}
6.3. services.cfg
define service{????????????????????? #這段是用來定義一個被監(jiān)控的服務(wù)。
host_name???????????? #主機名稱
service_description?? #服務(wù)描述
check_command???????? #執(zhí)行命令
max_check_attempts??? #最大失敗嘗試次數(shù),值為1時只報警不重新檢測
normal_check_interval #常規(guī)檢測間隔時間,默認為60分鐘(常規(guī)檢測是指無論服務(wù)狀態(tài)是否正常,檢測次數(shù)達到“最大次數(shù)”時)
retry_check_interval? #失敗嘗試間隔時間,默認為60分鐘(失敗嘗試是指服務(wù)狀態(tài)不正常,檢查次數(shù)達到“最大次數(shù)”時)
check_period????????? #檢測時間段
notification_interval #當服務(wù)狀態(tài)不正常時通知聯(lián)系人的間隔時間,值為0時不通知聯(lián)系人
notification_period?? #通知聯(lián)系人時間段
notification_options? #通知聯(lián)系人選項,w警告,u未知,c危急,f啟動和停止,n不發(fā)送通知
contact_groups??????? #聯(lián)系人組
}
define servicegroup{???????????????? #這段是用來定義一個被監(jiān)控的服務(wù)組。
servicegroup_name???? #服務(wù)組名稱,通常定義得較短???????
alias???????????????? #服務(wù)組別名,通常定義得較長
members?????????????? #服務(wù)組成員
}
6.4. contacts.cfg
define contact{????????????? #這段是用來定義一個聯(lián)系人。
contact_name???????????????? #這個指令用來定義一個聯(lián)系人的簡稱。他會在定義contactgroup時被引用到。在相應(yīng)的環(huán)境中,宏定義$CONTACTNAME$會包含這個值。
alias??????????????????????? #這個指令是為了定義一個聯(lián)系人的具體的描述。在相應(yīng)的環(huán)境中,宏定義$CONTACTALIAS$會包含這個值。
host_notification_period???? #這個指令是為了定義,能夠通知Contact中定義的那個簡稱聯(lián)系人,關(guān)于主機有問題或者恢復(fù)正常狀態(tài)的時間段。你可以把他想象成能夠通知Contact關(guān)于主機的在線時間。
service_notification_period? #這個指令是為了定義,能夠通知Contact中定義的那個簡稱聯(lián)系人,關(guān)于服務(wù)的問題或恢復(fù)正常的時間段。
host_notification_options??? #這個指令為了定義主機在什么狀態(tài)下會給聯(lián)系人發(fā)通知。各個參數(shù)的描述如下:d=當主機的狀態(tài)處于down時,發(fā)送通知;f=當主機狀態(tài)處于stop時發(fā)送通知。r=當主機恢復(fù)up狀態(tài)時發(fā)送通知。n=什么狀態(tài)下都不發(fā)送通知(w-warning , u-unknown,c-critical,r-recovery;d-down,u-unreachable)。
service_notification_options #這個指令為了定義服務(wù)在什么狀態(tài)下會給聯(lián)系人發(fā)通知。各個參數(shù)的描述如下:w=當服務(wù)處于警告狀態(tài)時發(fā)送通知 u=當服務(wù)的狀態(tài)處于unknown時,發(fā)送通知;f=當服務(wù)狀態(tài)處于啟動和停止時發(fā)送通知。c=當服務(wù)處于Critical狀態(tài)時發(fā)送通知。n=什么狀態(tài)下都不發(fā)送通知。
host_notification_commands?? #這個指令是為了定義一個通知聯(lián)系人關(guān)于主機問題或恢復(fù)正常的聯(lián)系手段的一個列表。多個手段之間用逗號隔開。
service_notification_commands#這個指令是為了定義一個通知聯(lián)系人關(guān)于服務(wù)問題或恢復(fù)正常的聯(lián)系手段的一個列表。多個手段之間用逗號隔開。
email??????????????????????? #這個指令是為了定義聯(lián)系人的email地址。這個將取決于你是如何定義你的notification commands.它可以用來給聯(lián)系人發(fā)送緊急郵件。在相應(yīng)的環(huán)境中。宏定義$CONTACTEMAIL$將會包含它的值。
}
define contactgroup{???????? #這段是用來定義一個聯(lián)系人組。
contactgroup_name?? #聯(lián)系組名稱,通常定義得較短
alias?????????????? #聯(lián)系組別名,通常定義得較長
members???????????? #聯(lián)系組成員
}
6.5. timeperiods.cfg
define timeperiod{
timeperiod_name? #時間段名稱,通常定義得較短
alias??????????? #時間段別名,通常定義得較長
sunday?????????? #星期日時間段
monday?????????? #星期一時間段
tuesday????????? #星期二時間段
wednesday??????? #星期三時間段
thursday???????? #星期四時間段
friday?????????? #星期五時間段
saturday???????? #星期六時間段
}
6.6. commands.cfg
define command{
command_name??????? #定義命令的簡稱
command_line??????? #定義當服務(wù)進行時Nagios要執(zhí)行的動作。在命令執(zhí)行以前,所有合法的宏都要被他們的值代替。
}
7. 用Nrpe監(jiān)控Linux主機
7.1. 安裝Nrpe
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.i386.rpm
# rpm –ivh rpmforge-release-0.3.6-1.el4.rf.i386.rpm
# yum -y install nagios-nrpe
# chkconfig –level 2345 nrpe on
# service nrpe start
7.2. 配置Nrpe
修改Nrpe配置文件:
#? vi /etc/nagios/nrpe.cfg
command開頭只保留兩行:
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /
第一行是監(jiān)控系統(tǒng)負載,第二行是監(jiān)控磁盤空間的。
command[check_load]內(nèi)的check_load是定義的Nrpe命令,在監(jiān)控端的Nrpe插件可用這個命令來取得執(zhí)行結(jié)果。
7.3. 配置nagios
1) 增加nagios命令
# vi commands.cfg
最后增加:
define command{
command_name check_nrpe
command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
2) 增加被監(jiān)控服務(wù)器
# vi /etc/nagios/objects/hosts.cfg
define host{???????????????????
use???????????????????? linux-server
host_name?????????????? mysql.server
alias?????????????????? 10.11.12.80
address???????????????? 10.11.12.80
}
3) 增加被監(jiān)控服務(wù)
# vi /etc/nagios/objects/services.cfg
define service{
use???????????????????? local-service
host_name?????????????? mysql.server
service_description???? nrpe_disk
check_command?????????? check_nrpe!check_disk
notifications_enabled?? 1
}
define service{
use???????????????????? local-service
host_name?????????????? mysql.server
service_description???? nrpe_load
check_command?????????? check_nrpe!check_load
notifications_enabled?? 1
}
上面配置內(nèi)的check_load和check_disk是被監(jiān)控端Npre的配置文件(command[check_load])內(nèi)定義好的命令。最后使配置生效:
# nagios –v /etc/nagios/nagios.cfg? #配置文件的語法檢查
# service nagios reload
8. 監(jiān)控Web及Tomcat服務(wù)
監(jiān)控Web用Tomcat服務(wù)可用nagios自帶的插件check_http。
# vi commands.cfg
增加:
# 'check_tomcat' command definition
define command{
command_name??? check_tomcat
command_line??? $USER1$/check_http -I $HOSTADDRESS$ -p 8080 $ARG1$
}
# 'check_http' command definition
define command{
command_name??? check_http
command_line??? $USER1$/check_http -I $HOSTADDRESS$ -H $HOSTADDRESS$ $ARG1$
}
# vi services.cfg
增加:
define service{
use???????????????????? local-service
host_name?????????????? web1.ihompy.com
hostgroup_name????????? web-servers
service_description???? check-http
check_command?????????? check_http
max_check_attempts????? 3
normal_check_interval?? 3
retry_check_interval??? 1
check_period??????????? 24x7
notification_interval?? 60
notification_period???? 24x7
notification_options??? w,u,c,r
}
define service{
use???????????????????? local-service
host_name?????????????? l7ejb,l7admin,l7web,l7ds
#??????? hostgroup_name????????? l7-servers
service_description???? check-tomcat
check_command?????????? check_tomcat
max_check_attempts????? 3
normal_check_interval?? 3
retry_check_interval??? 1
check_period??????????? 24x7
notification_interval?? 60
notification_period???? 24x7
notification_options??? w,u,c,r
}
被監(jiān)控端無需配置,讓nagios使修改后的配置生效便可。
9. 監(jiān)控squid
9.1. 下載squid檢測腳本
# wget http://workaround.org/squid/nagios-plugin/check_squid
# chmod? 755 check_squid
# cp check_squid /usr/lib/nagios/plugins/
這個腳本我用的時候有點問題,出現(xiàn):
Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib/perl5/vendor_perl/5.8.5/LWP/Protocol.pm line 114.
原因是:
HTML::HeadParser模塊在使用parse()方法時,對沒有編碼的UTF-8會弄混,要保證在傳值之前進行適當?shù)木幋a。
參考:http://www.xinjiezuo.com/blog/?p=43
解決方式是在my $ua = new LWP::UserAgent;下面加入一行:
$ua->parse_head(0);
跳過去就好了。
9.2. 修改配置文件
# vi commands.cfg
增加:
# 'squid' command definition
define command {
command_name check_squid
command_line $USER1$/check_squid '$ARG1$' '$ARG2$' '$ARG3$' $HOSTADDRESS$ '$ARG4$' '$ARG5$' '$ARG6$' '$ARG7$'
}
# vi services.cfg
增加:
define service {
use???????????????????? local-service
host_name?????????????? squid1.ihompy.com
service_description???? check-squid
check_command?????????? check_squid!http://www.ihompy.com!-!-!80!-!-!2
max_check_attempts????? 3
normal_check_interval?? 3
retry_check_interval??? 1
check_period??????????? 24x7
notification_interval?? 60
notification_period???? 24x7
notification_options??? w,u,c,r
}
被監(jiān)控端無需配置,讓nagios使修改后的配置生效便可。
10. 監(jiān)控mysql及mssql服務(wù)
監(jiān)控mysql服務(wù)可用nagios自帶的插件check_mysql。Nagios也帶有一個check_mssql用來監(jiān)控sql server,不過要先安裝freetds。
# yum install freetds
# vi commands.cfg
增加:
# 'mysql'? command definition
define command{
command_name check_mysql
command_line $USER1$/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$
}
# 'check_mssql' command definition
define command{
command_name??? check_mssql
command_line??? $USER2$/check_mssql.sh $HOSTADDRESS$ $ARG1$ $ARG2$ $ARG3$
}
# vi services.cfg
增加:
define service{
use???????????????????? local-service
host_name?????????????? mysql.ihompy.com
hostgroup_name????????? mysql-servers
service_description???? check-mysql
check_command?????????? check_mysql!root!1qaz2wsx
max_check_attempts????? 3
normal_check_interval?? 3
retry_check_interval??? 1
check_period??????????? 24x7
notification_interval?? 60
notification_period???? 24x7
notification_options??? w,u,c,r
}
define service{
use???????????????????? local-service
host_name?????????????? sqlserver
#??????? hostgroup_name????????? backup-servers
service_description???? check_sqlserver
check_command?????????? check_mssql!sa!''!2000
notifications_enabled?? 1
}
被監(jiān)控端無需配置,讓nagios使修改后的配置生效便可。
11. 配置報警方式及聯(lián)系人
Nagios可以有很多報警方式,比如:E-mail,短信,MSN等。
目前短信方式主要是用中國移動的飛信客戶端及購買短信貓兩種方式。前者目前是免費的,后者需一點費用買短信貓及手機卡,不過代價也不高,一共不到200RMB。
MSN因為其自身的原因,不太穩(wěn)定。
我們使用的是一個折中的方式,在Nagios上配置的是E-mail方式,但使用的是中國移動的139郵箱,139郵箱在收到郵件后可免費發(fā)短信給用戶。這樣就郵箱和短信就都有了,目前觀察下來穩(wěn)定性還不錯。
11.1. 配置聯(lián)系人
# vi contacts.cfg
define contact{
contact_name??????????????????? luohui?????????
use???????????????????????????? generic-contact
alias?????????????????????????? Nagios Admin???
email?????????????????????????? farmer.luo@139.com?
pager?????????????????????????? 13761802324324
address1??????????????????????? huilinux@hotmail.com
}
define contact{
contact_name??????????????????? xuyong???????
use???????????????????????????? generic-contact
alias?????????????????????????? Nagios Admin???
email?????????????????????????? xuyong76@139.com
pager?????????????????????????? 133434323443
address1??????????????????????? xuyong@newsky.sh
}
define contactgroup{
contactgroup_name?????? admins
alias?????????????????? Nagios Administrators
members???????????????? luohui,xuyong
}
先定義兩個聯(lián)系人luohui和xuyong,再把它們加入到聯(lián)系人組admins。
11.2 配置報警命令
默認已經(jīng)配置好了,在command.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$\n
State: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATI
ONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'notify-service-by-email' command definition
define command{
command_name??? notify-service-by-email
command_line??? /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVIC
EDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n
$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTAC
TEMAIL$
}
11.3. 在主機和服務(wù)中啟用E-mail報警
因為我們配置的主機及服務(wù)都是使用了模板方式的,所以只要改了模板文件的配置,所有的主機和服務(wù)就都改了。
# vi templates.cfg
define contact{
name??????????????????????????? generic-contact??????????
service_notification_period???? 24x7???????????????
host_notification_period??????? 24x7???????????????????
service_notification_options??? w,u,c,r,f,s????????????
host_notification_options?????? d,u,r,f,s??????????????
service_notification_commands?? notify-service-by-email
host_notification_commands????? notify-host-by-email???
register??????????????????????? 0??????????????????????
}
在主機及服務(wù)模板內(nèi),把contact_groups都改成聯(lián)系人組admins:
contact_groups????????????????? admins?
轉(zhuǎn)載于:https://blog.51cto.com/dreamsarefar/427523
總結(jié)
以上是生活随笔為你收集整理的Nagios监控系统安装及配置文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BT项目的运作之一项目建设方案与BT总包
- 下一篇: 配置RODBC访问PostgreSQL数