前言:
以下重点讲解了Nagios部署过程,部署过程中遇到的问题一些解决方法等,本人亲自实践过,希望对这方面学习的人员提供相关的帮助。参考资料:南非蚂蚁-高性能Linux服务器运维监控-Nagios.
Service version
Linux: Centos6.0
nagios: 3.2.0
nagios-plugins: 1.4.14
apache: 2.0.63
php: 5.3.2
nagios-server: 192.168.236.188
nagios-client: 192.168.236.168
Naigos配置文件、源码安装包下载地址: http://down.51cto.com/data/475120
所有软件存放目录为/usr/local/software
检查所需的软件库
[root@nagios-server ~]# rpm -qa gcc gcc-c++ libxml2 libxml2-devel autoconf make libart_lgpl libart_lgpl-devel gd gd-devel openssl-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel pango-devel cairo-devel
libpng-1.2.44-1.el6.i686
libxml2-2.7.6-4.el6_2.4.i686
glib2-devel-2.22.5-7.el6.i686
cairo-devel-1.8.8-3.1.el6.i686
glibc-devel-2.12-1.80.el6_3.3.i686
zlib-1.2.3-25.el6.i686
libjpeg-6b-46.el6.i686
libpng-devel-1.2.44-1.el6.i686
autoconf-2.63-5.1.el6.noarch
libart_lgpl-devel-2.3.20-5.1.el6.i686
pango-devel-1.28.1-3.el6_0.5.1.centos.i686
gd-2.0.35-10.el6.i686
zlib-devel-1.2.3-25.el6.i686
freetype-devel-2.3.11-6.el6_2.9.i686
libxml2-devel-2.7.6-4.el6_2.4.i686
make-3.81-19.el6.i686
glibc-2.12-1.80.el6_3.3.i686
gcc-4.4.6-4.el6.i686
gcc-c++-4.4.6-4.el6.i686
libart_lgpl-2.3.20-5.1.el6.i686
libjpeg-devel-6b-46.el6.i686
gd-devel-2.0.35-10.el6.i686
glib2-2.22.5-7.el6.i686
openssl-devel-1.0.0-20.el6_2.5.i686
如果没有安装此软件库,请自行使用yum安装好,避免编译安装程序时出错!!
1.1 安装Nagios
1.安装前的准备
(1)创建Nagios用户和用户组
[root@nagios-server ~]# useradd -s /sbin/nologin nagios
[root@nagios-server ~]# mkdir /usr/local/nagios
[root@nagios-server ~]# chown -R nagios.nagios /usr/local/nagios
(2)开启系统的sendmail服务
2.编译安装Nagios
[root@nagios-server ~]# cd /usr/local/software/
[root@nagios software]# tar -zxvf nagios-3.2.0.tar.gz
[root@nagios software]# cd nagios-3.2.0
[root@nagios nagios-3.2.0]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/include
[root@nagios nagios-3.2.0]# make all
[root@nagios nagios-3.2.0]# make install #通过 make install命令来安装Nagios主程序的CGI和HTML文件
[root@nagios nagios-3.2.0]# make install-init #通过 make install-init命令可以再/etc/rc.d/init.d目录下创建Nagios启动脚本
[root@nagios nagios-3.2.0]# make install-commandmode #通过make install-commandmode命令配置目录权限
[root@nagios nagios-3.2.0]# make install-config # make install-config命令用来安装Nagios示例配置文件,这里的安装路径是/usr/local/nagios/etc
设置开机启动
[root@nagios-server ~]# chkconfig --add nagios
[root@nagios-server ~]# chkconfig --level 35 nagios on
[root@nagios-server ~]# chkconfig --list nagios
nagios
0:off
1:off
2:off
3:on
4:off
5:on
6:off
Nagios各个目录名称及用途说明
目录名称 用 途
bin Nagios可执行程序所在目录
etc Nagios配置文件所在目录
sbin Nagios CGI文件所在目录,也就是执行外部命令所需文件所在的目录
Share Nagios网页文件所在目录
libexec Nagios外部插件所在目录
var Nagios日志文件、lock等文件所在的目录
var/archives Nagios日志自动归档目录
var/rw 用来存放外部命令文件的目录
3.安装Nagios插件
[root@nagios software]# tar zxvf nagios-plugins-1.4.14.tar.gz
[root@nagios software]# cd nagios-plugins-1.4.14
[root@nagios nagios-plugins-1.4.14]# ./configure --prefix=/usr/local/nagios
[root@nagios nagios-plugins-1.4.14]# make
[root@nagios nagios-plugins-1.4.14]# make install
4.安装Nagios汉化插件(可选安装)
[root@nagios software]# tar jxvf nagios-cn-3.2.0.tar.bz2
[root@nagios software]# cd nagios-cn-3.2.0
[root@nagios nagios-cn-3.2.0]# ./configure
[root@nagios nagios-cn-3.2.0]# make all
[root@nagios nagios-cn-3.2.0]# make install
5.安装与配置Apache
(1)安装Apache与PHP,步骤如下:
[root@nagios software]# tar zxvf httpd-2.0.63.tar.gz
[root@nagios software]# cd httpd-2.0.63
[root@nagios httpd-2.0.63]# ./configure --prefix=/usr/local/apache2
[root@nagios httpd-2.0.63]# make
[root@nagios httpd-2.0.63]# make install
接着安装PHP,步骤如下:
[root@nagios software]# tar zxvf php-5.3.2.tar.gz
[root@nagios software]# cd php-5.3.2
[root@nagios php-5.3.2]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-gd --with-zlib
[root@nagios php-5.3.2]# make
[root@nagios php-5.3.2]# make install
(2)配置Apache
首先在Apache配置文件/usr/local/apache2/conf/httpd.conf中修改Apache进程的启动用户为Nagios,即找到:
User nobody
Group #-1
修改为:
User nagios
Group nagios
然后找到:
DirectoryIndex index.html index.html.var
修改为:
DirectoryIndex index.html index.php
接着增加如下内容:
AddType application/x-httpd-php .php
LoadModule php5_module modules/libphp5.so
安全起见,一般要求必须经过授权才能访问Nagios的Web监控界面,因此需要增加验证配置,即在httpd.conf文件的最后添加如下信息:
#setting for nagios
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
AuthType Basic
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd
Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
AuthType Basic
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd
Require valid-user
</Directory>
(3)创建Apache目录验证文件
在上面的配置中,指定了目录验证文件htpasswd,下面创建这样一个文件:
[root@nagios-server ~]# /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd nagios
New password: (输入密码)
Re-type new password: (在输入一次密码)
Adding password for user nagios
这样就在/usr/local/nagios/etc目录下创建了一个htpasswd验证文件,对应的用户为nagios,当通过http://ip/nagios/访问Web监控界面时就需要输入用户名和密码了。
(4)启动Apache服务,设置开机自动启动
[root@nagios-server ~]# /usr/local/apache2/bin/apachectl start
[root@nagios-server ~]# echo "/usr/local/apache2/bin/apachectl start" >> /etc/rc.local
启动apache后,可以看到Nagios的默认Web监控界面,如果安装的是Nagios的中文包,看到的应该是中文界面
注:
1.nagios 中文乱码解决:
发现是apache 配置文件的编码问题
修改/usr/local/apache2/conf/httpd.conf
最后添加AddDefaultCharset utf-8
重启apache
2.启动apache时出现以下提示信息
[root@nagios-server conf]# /usr/local/apache2/bin/apachectl start
httpd: Could not determine the server's fully qualified domain name, using 192.168.236.188 for ServerName
调整方法vim /usr/local/apache2/conf/httpd.conf
找到ServerName修改为
ServerName 192.168.236.188:80
1.2 配置Nagios
(1)templates.cfg文件
nagios主要用于监控主机资源以及服务,在nagios配置中称为对象,为了不必重复定义一些监控对象,Nagios引入了一个模板配置文件,将一些共性的属性定义成模板,以便于多次引用。这就是templates.cfg的作用。
下面详细介绍下templates.cfg文件中每个参数的含义:
define contact{
name generic-contact
# 联系人名称
service_notification_period 24x7
# 当服务出现异常时,发送通知的时间段,这个时间段"24X7"在timeperiods.cfg文件中定义
host_notification_period 24x7
# 当主机出现异常时,发送通知的时间段,这个时间段"24X7"在timeperiods.cfg文件中定义
service_notification_options w,u,c,r
# 定义的是"通知可以被发出的情况",w即warn,表示警告状态;u即unknown,表示不名状态;
# c即criticle,表示紧急状态;r即recover,表示恢复状态.也就是在服务出现警告状态、未知状态
# 紧急状态和重新恢复状态时都发送通知给使用者
host_notification_options d,u,r
# 定义主机在什么状态下需要发送通知给使用者,d即down,表示宕机状态;u即unreachable,表示不可达状态
# r即recovery,表示重新恢复状态
service_notification_commands notify-service-by-email
# 服务故障时,发送通知的方式,可以是邮件和短信,这里的发送方式是邮件,其中
# "notify-service-by-email"在commands.cfg文件中定义
host_notification_commands notify-host-by-email
# 主机故障时,发送通知的方式,可以是邮件和短信,这里的发送方式是邮件,其中
# "notify-host-by-email"在commands.cfg文件中定义
register 0
}
define host{
name generic-host
# 主机名称;这里的主机名并不是直接对应真正机器的主机名,乃是对应在主机配置文件中设定的主机名
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
# 其值可以为0或1,其作用为是否用Nagios的数据输出功能,如果将此项赋值为1,
# 那么Nagios就会将收集的数据写入某个文件中,以备提取
retain_status_information 1
retain_nonstatus_information 1
notification_period
24x7
# 指定"发送通知"的时间段,也就是可以在什么时候发送通知给使用者
register 0
}
define host{
name
linux-server
# 主机名称
use
generic-host
# use表示引用,也就是将主机generic-host的所有属性引用到linux-server中,
# 在配置Nagiso过程中,很多情况下会用到引用
check_period
24x7
# 这里的check_period告诉Nagios检测主机的时间段
check_interval
5
# Nagios对主机的检查时间间隔,这里是5分钟
retry_interval
1
# 重试检查时间间隔,单位是分钟
max_check_attempts
10
# Nagios对主机的最大检查次数,也就是Nagios在检查过程中发现某主机异常时,并不马上判断为异常状况,而是
# 多试几次,因为可能只是一时网络太拥挤,或是一些其他原因,使主机受到了一点影响,这里的10就是至少试10次的意思
check_command
check-host-alive
# 指定检查主机状态的命令,其中"check-host-alive"在commands.cfg文件中定义
notification_period
workhours
# 主机故障时,发送通知的时间范围,其中"workhours"在timeperiods.cfg中进行了定义
notification_interval
120
# 在主机出现异常后,故障一直没有解决,Nagios再次对使用者发出通知的时间。单位是分钟,如果觉得所有的事件只需要一次
# 通知就够了,可以把这个选项设为0
notification_options
d,u,r
# 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态;u即unreachable,表示不可到达状态;
# r即recovery,表示重新恢复状态
contact_groups
admins
# 指定联系人组,这个"admin"在contacts.cfg文件中定义
register
0
}
define service{
name generic-service
# 定义一个服务名称
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0
check_period 24x7
# 这里的check_period告诉Nagios检查服务的时间段
max_check_attempts 3
# Nagios对服务的最大检查次数
normal_check_interval 10
# 此选项用来设置服务检查时间间隔,也就是说,Nagios这一次检查与下一次检查所隔的时间,这里是10分钟
retry_check_interval 2
# 重试检查时间间隔,单位是分钟
contact_groups admins
# 指定联系人组
notification_options
w,u,c,r
# 定义"通知可以被发出的情况"
notification_interval 60
# 在服务出现异常后,故障一直没有解决,Nagios再次向使用者发出通知的时间,单位是分钟
notification_period 24x7
# 指定"发送通知"的时间段,也就是可以在什么时候发送通知给使用者
register 0
}
define service{
name local-service
use generic-service
max_check_attempts 2
normal_check_interval 5
retry_check_interval 1
register 0
}
(2)resource.cfg文件
resource.cfg是nagios的变量定义文件,文件内容只有一行:
$USER1$=/usr/local/nagios/libexec
(3)commands.cfg文件
[root@nagios-server etc]# cp /usr/local/nagios/etc/objects/commands.cfg /usr/local/nagios/etc
此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。这里并未列出文件的所有内容,仅仅介绍了配置中用到的一些命令。
#下面是notify-host-by-email命令的定义
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" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ #命令具体的执行方式,“-H $HOSTADDRESS$” 是定义目标主机的地址,这个地址在hosts.cfg文件中定义了。
}
#下面是notify-service-by-email命令的定义
define command{
command_name notify-service-by-email #命令名称,即定义了一个服务异常时发送邮件的命令
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\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$ **" $CONTACTEMAIL$
}
#下面是check_host-alive命令的定义
define command{
command_name check-host-alive #命令名称,用来检测主机状态。
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
#这里的变量$USER1$在resource.cfg文件中进行定义,即$USER1$=/usr/local/nagios/libexec,那么check_ping的完整路径为/usr/local/nagios/libexec/check_ping。 “-w 3000.0,80%”中“-w”说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。“-c 5000.0,100%”中“-c”说明后面的一对值对应的是“CRITICAL”,“100%”是其临界值。“-p 1”说明每次探测发送一个包。
}
#下面是check_ftp命令的定义
define command{
command_name check_ftp
command_line $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$ #$ARG1$是指在调用这个命令的时候,命令后面的第一个参数。
}
#下面是check_http命令的定义
define command{
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}
#下面是check_ssh命令的定义
define command{
command_name check_ssh
command_line $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
}
(4)hosts.cfg文件
此文件默认不存在,需要手动创建,hosts.cfg主要用来指定被监控的主机地址以及相关属性信息,一个配置好的实例如下:
define host{
use linux-server
#引用主机Linux-server的属性信息,Linux-server主机在templates.cfg文件中进行定义
host_name web
#主机名
alias ixdba-web
#主机别名
address 192.168.236.188
#被监控的主机地址,这个地址可以是IP,也可以是域名
}
define host{
use linux-server
host_name mysql
alias ixdba-mysql
address 192.168.236.168
}
define hostgroup{
#定义一个主机组
hostgroup_name sa-servers
#主机组名称,可以随意指定
alias sa servers
#主机组别名
members web,mysql
#主机组成员,其中"web"、"mysql"就是上面定义的两个主机
}
(5)services.cfg文件
此文件默认也不存在,需要手动创建,services.cfg文件主要用于定义监控的服务和主机资源,例如监控http服务、SSH服务、主机磁盘空间、主机系统负载等等。
##################### Web ###########################
define service{
use local-service
#引用local-service服务的属性值,local-service在templates.cfg文件中进行了定义
host_name web
#指定要监控哪个主机上的服务,"web"在hosts.cfg文件中进行了定义
service_description PING
#对监控服务内容的描述,以供维护人员参考
check_command check_ping!100.0,20%!500.0,60%
#指定检查的命令,check_ping命令在commands.cfg中定义,后跟两个参数,命令与参数间用!分割
}
define service{
use local-service
host_name web
service_description SSH
check_command check_ssh
#check_ssh命令在commands.cfg中定义
}
define service{
use local-service
host_name web
service_description http
check_command check_http
}
############################### MySQL ##########################
define service{
use local-service
host_name mysql
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service
host_name mysql
service_description SSH
check_command check_ssh
}
define service{
use local-service
host_name mysql
service_description mysqlport
check_command check_tcp!3306
}
(6)contacts.cfg文件
contacts.cfg是一个定义联系人和联系人组的配置文件,当监控的主机或者服务出现故障,nagios会通过指定的通知方式(邮件或者短信)将信息发给这里指定的联系人或者使用者。
define contact{
contact_name sasystem #联系人名称
use generic-contact #引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义
alias sa-system #联系人别名
}
define contactgroup{
contactgroup_name admins #联系人组名称
alias system administrator group #联系人组描述
members sasystem #联系人组成员,其中“sasystem”就是上面定义的联系人
}
(7)timeperiods.cfg文件
此文件只要用于定义监控的时间段,下面是一个配置好的实例:
# 下面定义一个名为24x7的时间段,即监控所有时间段
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
# 下面定义一个名为workhours的时间段,即工作时间段
define timeperiod{
timeperiod_name
workhours
alias
Normal Work Hours
monday
09:00-17:00
tuesday
09:00-17:00
wednesday
09:00-17:00
thursday
09:00-17:00
friday
09:00-17:00
}
(8)cgi.cfg文件
此文件用来控制相关cgi脚本,如果想在nagios的web监控界面执行cgi脚本,例如重启nagios进程、关闭nagios通知、停止nagios主机检测等,这时就需要配置cgi.cfg文件了。
由于nagios的web监控界面验证用户为nagios,所以只需在cgi.cfg文件中添加此用户的执行权限就可以了,需要修改的配置信息如下:
default_user_name=nagios
authorized_for_system_information=nagiosadmin,nagios
authorized_for_configuration_information=nagiosadmin,nagios
authorized_for_system_commands=nagios
authorized_for_all_services=nagiosadmin,nagios
authorized_for_all_hosts=nagiosadmin,nagios
authorized_for_all_service_commands=nagiosadmin,nagios
authorized_for_all_host_commands=nagiosadmin,nagios
(9)nagios.cfg文件
Nagios.cfg默认的路径为/usr/local/nagios/etc/nagios.cfg,是nagios的核心配置文件,所有的对象配置文件都必须在这个文件中进行定义才能发挥其作用,
这里只需将对象配置文件在Nagios.cfg文件中进行引用即可。
log_file=/usr/local/nagios/var/nagios.log
#“log_file”变量用来定义nagios日志文件的路径。
cfg_file=/usr/local/nagios/etc/hosts.cfg
cfg_file=/usr/local/nagios/etc/services.cfg
cfg_file=/usr/local/nagios/etc/commands.cfg
cfg_file=/usr/local/nagios/etc/contacts.cfg
cfg_file=/usr/local/nagios/etc/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/templates.cfg
#“cfg_file”变量用来引用对象配置文件,如果有更多的对象配置文件,在这里依次添加即可。
object_cache_file=/usr/local/nagios/var/objects.cache
#该变量用于指定一个“所有对象配置文件”的副本文件,或者叫对象缓冲文件
resource_file=/usr/local/nagios/etc/resource.cfg
#该变量用于指定nagios资源文件的路径,可以在Nagios.cfg中定义多个资源文件。
status_file=/usr/local/nagios/var/status.dat
#该变量用于定义一个状态文件,此文件用于保存nagios的当前状态、注释和宕机信息等。
status_update_interval=10
#该变量用于定义状态文件(即status.dat)的更新时间间隔,单位是秒,最小更新间隔是1秒。
nagios_user=nagios
#该变量指定了Nagios进程使用哪个用户运行。
nagios_group=nagios
#该变量用于指定Nagios使用哪个用户组运行。
check_external_commands=1
#该变量用于设置是否允许nagios在web监控界面运行cgi命令,也就是是否允许nagios在web界面下执行重启nagios、停止主机/服务检查等操作。“1”为运行,“0”为不允许。
command_check_interval=2
#该变量用于设置nagios对外部命令检测的时间间隔,如果指定了一个数字加一个"s"(如10s),那么外部检测命令的间隔是这个数值以秒为单位的时间间隔。如果没有用"s",那么外部检测命令的间隔是以这个数值的“时间单位”的时间间隔。
interval_length=60
#该变量指定了nagios的时间单位,默认值是60秒,也就是1分钟,即在nagios配置中所有的时间单位都是分钟。
1.3 Nagios的运行和维护
1.验证Nagios配置文件的正确性
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
得到的检测结果如下:
Nagios Core 3.2.0
Copyright (c) 2009 Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 08-12-2009
License: GPL
Website: http://www.nagios.org
Reading configuration data...
Read main config file okay...
Processing object config file '/usr/local/nagios/etc/commands.cfg'...
Processing object config file '/usr/local/nagios/etc/contacts.cfg'...
Processing object config file '/usr/local/nagios/etc/timeperiods.cfg'...
Processing object config file '/usr/local/nagios/etc/templates.cfg'...
Processing object config file '/usr/local/nagios/etc/hosts.cfg'...
Processing object config file '/usr/local/nagios/etc/services.cfg'...
Read object config files okay...
Running pre-flight check on configuration data...
Checking services...
Checked 8 services.
Checking hosts...
Checked 2 hosts.
Checking host groups...
Checked 1 host groups.
Checking service groups...
Checked 0 service groups.
Checking contacts...
Checked 1 contacts.
Checking contact groups...
Checked 1 contact groups.
Checking service escalations...
Checked 0 service escalations.
Checking service dependencies...
Checked 0 service dependencies.
Checking host escalations...
Checked 0 host escalations.
Checking host dependencies...
Checked 0 host dependencies.
Checking commands...
Checked 24 commands.
Checking time periods...
Checked 2 time periods.
Checking for circular paths between hosts...
Checking for circular host and service dependencies...
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
2.启动与停止Nagios
(1)启动Nagios
[root@nagios-server ~]# /etc/init.d/nagios start
或者
[root@nagios-server ~]# service nagios start
或者
手动方式启动Nagios
通过nagios命令的"-d"参数来启动nagios守护进程。
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
(2)关闭Nagios
[root@nagios-server ~]# /etc/init.d/nagios stop
或者
[root@nagios-server ~]# service nagios stop
或者通过kill方式关闭Nagios
kill <nagios_pid>
(3)重启Nagios
[root@nagios-server ~]# /etc/rc.d/init.d/nagios reload
[root@nagios-server ~]# /etc/rc.d/init.d/nagios restart
或者
通过Web监控页面重启Nagios
或者
kill -HUP <nagios_pid>
1.4 Nagios性能分析图表的实现
1.安装PNP
[root@nagios software]# tar zxvf rrdtool-1.4.5.tar.gz
[root@nagios software]# cd rrdtool-1.4.5
[root@nagios rrdtool-1.4.5]# ./configure --prefix=/usr/local/rrdtool
[root@nagios rrdtool-1.4.5]# make
[root@nagios rrdtool-1.4.5]# make install
接着安装PNP
[root@nagios software]# tar zxvf pnp-0.4.13.tar.gz
[root@nagios software]# cd pnp-0.4.13
[root@nagios pnp-0.4.13]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata
[root@nagios pnp-0.4.13]# make all
[root@nagios pnp-0.4.13]# make install
[root@nagios pnp-0.4.13]# make install-config
[root@nagios pnp-0.4.13]# make install-init
安装完成,PNP默认文件放置情况如下:
General Options:
----------------------------- -------------------
Nagios user/group: nagios nagios
Install directory: /usr/local/nagios
HTML Dir: /usr/local/nagios/share/pnp
Config Dir: /usr/local/nagios/etc/pnp
Path to rrdtool: /usr/local/bin/rrdtool (Version 1.4.5)
RRDs Perl Modules: *** NOT FOUND ***
RRD Files stored in: /usr/local/nagios/share/perfdata
process_perfdata.pl Logfile: /usr/local/nagios/var/perfdata.log
Perfdata files (NPCD) stored in: /usr/local/nagios/var/spool/perfdata/
-------------------------------------------------------------------------
2.配置PNP
创建默认配置文件
[root@nagios-server ~]# cd /usr/local/nagios/etc/pnp/
[root@nagios pnp]# cp process_perfdata.cfg-sample process_perfdata.cfg
[root@nagios pnp]# cp npcd.cfg-sample npcd.cfg
[root@nagios pnp]# cp rra.cfg-sample rra.cfg
[root@nagios pnp]# chown -R nagios:nagios /usr/local/nagios/etc/pnp
修改process_perfdata.cfg文件
[root@nagios-server ~]# vim /usr/local/nagios/etc/pnp/process_perfdata.cfg
LOG_FILE = /usr/local/nagios/var/perfdata.log
#
# Loglevel 0=silent 1=normal 2=debug
#
LOG_LEVEL = 2
这里将日志级别改为2,即debug模式。
修改Nagios配置文件
1.增加小太阳图标
修改templates.cfg,增加一个定义PNP的host和service。修改后的内容如下:
define host {
name hosts-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$
process_perf_data 1
}
define service{
name services-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
process_perf_data 1
}
2.修改nagios.cfg
找到如下几项,去掉注释。修改后的信息如下:
process_performance_data=1
host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata
其中,"process-host-perfdata"和"process-service-perfdata"指令是新启用的,这两个指令默认已经在commands.cfg文件中进行定义了。
3.修改commands.cfg
process_perfdata.pl就是PNP自带的一个脚本,这个脚本在PNP安装完成后会自动生成。
因此,可以将process-host-perfdata和process-service-perfdata指令中对应的执行命令的内容替换成此脚本。修改后内容如下:
# 'process-host-perfdata' command definition
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
}
4.修改hosts.cfg文件和services.cfg文件
将hosts-pnp和services-pnp引用到hosts.cfg和services.cfg,修改后的hosts.cfg内容如下:
define host{
use linux-server,hosts-pnp
host_name web
alias nagios-web
address 192.168.236.188
}
define host{
use linux-server,hosts-pnp
host_name mysql
alias gosafe-mysql
address 192.168.236.168
}
修改后的services.cfg内容如下:
define service{
use local-service,services-pnp
host_name web
service_description http
check_command check_http
}
define service{
use local-service,services-pnp
host_name mysql
service_description SSH
check_command check_ssh
}
5.测试PNP功能
重新检查Nagios配置文件是否正确,然后重启Nagios.
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@nagios-server ~]# /etc/init.d/nagios restart
如果配置正确,此时就会生成相应主机的PNP文件
[root@nagios web]# pwd
/usr/local/nagios/share/perfdata/web
[root@nagios web]# ls
http.rrd http.xml PING.rrd PING.xml
注:点击小太阳也能会报以下这种错误:
Deprecated: Assigning the return value of new by reference is deprecated in /usr/local/nagios/share/pnp/include/function.inc.php on line 1026
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 557
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 559
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 563
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /usr/local/nagios/share/pnp/include/function.inc.php on line 565
Deprecated: Function eregi() is deprecated in /usr/local/nagios/share/pnp/include/function.inc.php on line 1502
这是因为pnp-0.4.14对PHP 5.3.0的支持还不是很好,其中有几个bug需要修改:
根据错误提示打开
vi /usr/local/nagios/share/pnp/include/function.inc.php
找到行1502修改为
if($level == 2 && $type == "complete" && preg_match("/^NAGIOS_/",$tag)){
还会有两处错误需要修改,根据提示找到对应行进行修改:
line 556: 添加:date_default_timezone_set('UTC');
line 1026:修改为$pdf = new PDF('P', 'mm', 'A4'); 删除&
再重新重启nagios,应该就能看到图表了
1.5 利用插件扩展Nagios的监控功能
利用NRPE外部构件监控远程主机
1.配置Nagios客户端(即远程主机)
(1)安装Nagios插件
[root@nagios-clinet software]# useradd -s /sbin/nologin nagios
[root@nagios-clinet software]# tar zxvf nagios-plugins-1.4.14.tar.gz
[root@nagios-clinet software]# cd nagios-plugins-1.4.14
[root@nagios-clinet nagios-plugins-1.4.14]# ./configure
[root@nagios-clinet nagios-plugins-1.4.14]# make
[root@nagios-clinet nagios-plugins-1.4.14]# make install
执行如下命令设置插件目录权限:
[root@nagios-clinet ~]# chown nagios.nagios /usr/local/nagios
[root@nagios-clinet ~]# chown -R nagios.nagios /usr/local/nagios/libexec
(2)安装NRPE插件
[root@nagios-clinet software]# tar zxvf nrpe-2.12.tar.gz
[root@nagios-clinet software]# cd nrpe-2.12
[root@nagios-clinet nrpe-2.12]# ./configure
[root@nagios-clinet nrpe-2.12]# make all
[root@nagios-clinet nrpe-2.12]# make install-plugin
[root@nagios-clinet nrpe-2.12]# make install-daemon
[root@nagios-clinet nrpe-2.12]# make install-daemon-config
(3)配置NRPE
NRPE的配置文件为/usr/local/nagios/etc/nrpe.cfg。在该文件中找到"allowed_hosts=127.0.0.1"一行,将其修改如下:
allowed_hosts=127.0.0.1,192.168.236.188(Nagios监控服务器的地址或域名)
(4)启动NRPE守护进程
[root@nagios-clinet ~]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
建议将此命令加入到/etc/rc.local文件中,这样就可以在开机时自动运行NRPE守护进程了,NRPE守护进程的默认端口为5666,
通过如下命令可以检测端口是否启动:
[root@nagios-clinet ~]# netstat -ntpl |grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 2205/nrpe
(5)测试NRPE功能
首先在Nagios客户端本机上测试,执行如下命令:
[root@nagios-clinet ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
如果正常,应该出现如下信息:
[root@nagios-clinet ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
NRPE v2.12
(6)定义监控服务器内容
要监控一个远程服务器下的某些信息,首先要在远程服务器中定义监控的内容,
例如要监控一台远程服务器的当前用户连接数、CPU负载、磁盘利用率、交换空间使用情况,
需要在nrpe.cfg中定义如下监控内容:
[root@nagios-clinet ~]# vim /usr/local/nagios/etc/nrpe.cfg
command[check_users_1]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load_1]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_sda1_1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
command[check_zombie_procs_1]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs_1]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
command[check_swap_1]=/usr/local/nagios/libexec/check_swap -w 20 -c 10
其中,command后面中括号的内容就是定义的变量,变量名可以随意指定,只要在Nagios服务器端配置文件引用时保持统一即可。
2.在服务器端安装NRPE和配置Nagios服务
(1)安装NRPE插件
[root@nagios software]# tar zxvf nrpe-2.12.tar.gz
[root@nagios software]# cd nrpe-2.12
[root@nagios nrpe-2.12]# ./configure
[root@nagios nrpe-2.12]# make all
[root@nagios nrpe-2.12]# make install-plugin
通过make install-plugin命令默认将check_nrpe插件安装到/usr/local/nagios/libexec目录下。
(2)测试插件与客户端是否能正常通信
在Nagios服务端执行如下指令:
/usr/local/nagios/libexec/check_nrpe -H 客户端主机IP
例如:
[root@nagios-server ~]# /usr/local/nagios/libexec/check_nrpe -H 192.168.236.168
NRPE v2.12
如果能显示如上的输出信息,表明NRPE可以与客户端正常通信。
(3)定义一个check_nrpe监控命令
修改/usr/local/nagios/etc/command.cfg文件,添加如下内容:
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
(4)添加远程主机监控
修改/usr/local/nagios/etc/service.cfg文件,添加如下监控内容:
define service{
use local-service,services-pnp
host_name mysql
service_description users
check_command check_nrpe!check_users_1
}
define service{
use local-service,services-pnp
host_name mysql
service_description load
check_command check_nrpe!check_load_1
}
define service{
use local-service,services-pnp
host_name mysql
service_description disk
check_command check_nrpe!check_sda1_1
}
define service{
use local-service,services-pnp
host_name mysql
service_description swap
check_command check_nrpe!check_swap_1
}
define servicegroup{
#定义一个服务组
servicegroup_name servergroup
#服务组名称,可以随意指定
alias server-group
#服务组别名
members web,PING,web,SSH,web,http,mysql,users,mysql,load,mysql,disk,mysql,swap,mysql,SSH,mysql,PING,mysql,mysqlport
#服务组成员,格式为"主机名,主机对应的服务描述"
}
(5)测试和启动Nagios服务
[root@nagios-server ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@nagios-server ~]# service nagios restart
最后给出一个通过扩展插件NRPE搭建完成的Nagios监控系统,如下图所示:
1.6 利用飞信实现Nagios短信报警功能
1.下载Linux版本的飞信程序
URL: http://down.51cto.com/data/321617
2.安装与配置飞信
(1)安装飞信
[root@nagios software]# tar zxvf fetion20101205-linux.tar.gz
[root@nagios software]# cp -r fetion /usr/local/
[root@nagios software]# chmod -R 755 /usr/local/fetion
执行完毕后,/usr/local/fetion/fetion就是我们需要的飞信客户端程序。
(2)配置飞信
[root@nagios-server ~]# vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/fetion
[root@nagios-server ~]# ldconfig
测试飞信能否正常运行。
[root@nagios-server ~]# ldd /usr/local/fetion/fetion
[root@nagios-server ~]# /usr/local/fetion/fetion
************************ IMPORTANT STATEMENT ************************
** **
** PLEASE DON'T USE THIS SOFTWARE TO SEND JUNK SHORT MESSAGES. **
** OTHERWISE PLEASE BEAR YOUR OWN CONSEQUENCES. **
** **
** Version:[20101205002-linux] **
*********************************************************************
This program is the console version of China Fetion!
It's free for personal user.
This project website: http://www.it-adv.net/
Usage:
--mobile=[mobile]
--sid=[sid]
--pwd=[pwd]
--config=[config file] *format:index mobile password
--index=[index no in config file,refer to sample.conf]
--debug *debug mode on
--hide *login fetion in hidden state
--to=[mobile/sid]
--command-path=[command file path]
--robotmode
--daemon(linux only)
--proxy-ip(http proxy ip)
--proxy-port(http proxy port)
--msg-gb=[gb2312/gbk message]
--msg-utf8=[utf8 message]
--msg-type=[0/1/2 sms longsms smartmsg]
--file-gb=[gb2312/gbk file]
--file-utf8=[utf8 file]
--query-cmcc-no
--auto-retry
--exit-on-verifycode
--t3key=[http://www.tui3.com/page/smssend/]
如果出现以上的帮助信息,表示飞信已经安装成功。
(3)举例
[root@nagios-server ~]# /usr/local/fetion/fetion --mobile=137****9209 --pwd=password --to 132****9909 --msg-utf8="test fetion"
图形验证码已经生成,文件名为:137****9209.jpg请识别后输入图形验证码:
打开这个图片,然后输入对应的验证码。
这个例子是测试飞信能否成功发送短信的。注意,发送对象必须是自己的飞信好友或自己。
其中,"137****9209"是发送人的手机号码,"132****9909"是接收人的手机号码。
3.测试飞信功能
[root@nagios-server ~]# /usr/local/fetion/fetion --mobile=134****6409 --pwd=password --to=136****1120 --msg-gb="This is test fetion" -debug
如果短信发送成功,应该能看到以下返回信息:
SIP-C/4.0 280 Send SMS OK
I: 2
Q: 1 M
L: 114
D: Sat, 11 Aug 2012 13:24:49 GMT
XI: 55E99109D410592CE7F45D823E59484D
飞信测试成功后,就可将飞信整合到Nagios中了。
4.Nagios配置
(1)编辑/usr/local/nagios/etc/command.cfg文件
添加如下内容:
define command{
command_name notify-service-by-sms
command_line /usr/local/fetion/fetion --mobile=137****9209 --pwd=xxxxx --to=$CONTACTPAGER$ --msg-utf8="Host $HOSTSTATE$ Address $HOSTADDRESS$ Service $SERVICEDESC$ State $SERVICESTATE$ on $TIME$"
}
define command{
command_name notify-host-by-sms
command_line /usr/local/fetion/fetion --mobile=137****9209 --pwd=xxxxx --to=$CONTACTPAGER$ --msg-utf8="Host $HOSTSTATE$ alert for $HOSTNAME$! on '$LONGDATETIME$'"
}
(2)修改/usr/local/nagios/etc/templates.cfg文件
找到联系人为generic-contact的定义,修改后的内容如下:
define contact{
name generic-contact
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email,notify-service-by-sms
host_notification_commands notify-host-by-email,notify-host-by-sms
register 0
}
(3)修改/usr/local/nagios/etc/contacts.cfg文件
修改联系人为sasystem的定义,修改后的内容如下:
define contact{
contact_name sasystem
use generic-contact
alias sa-system
pager 137****9209
}
至此,通过飞信发送报警信息的Nagios监控系统配置完毕了。
飞信Shell脚本。
[root@nagios-server fetion]# cat sms.sh
#!/bin/bash
# script name : sms
# write liweizhong
user=137****9209
passwd=******
sendto="137****9209,159****1113"
msg=$1
/usr/local/fetion/fetion --mobile="$user" --pwd="$passwd" --to="$sendto" --msg-utf8="$msg"
[root@nagios-server fetion]#
[root@nagios-server fetion]# ./sms.sh "This is fetion test"
SIP-C/4.0 280 Send SMS OK
I: 2
Q: 1 M
L: 116
D: Tue, 21 Aug 2012 07:41:17 GMT
XI: 504BC53116C0AD5F83E22BC7B94950D1
SIP-C/4.0 280 Send SMS OK
I: 4
Q: 1 M
L: 116
D: Tue, 21 Aug 2012 07:41:19 GMT
XI: D41571BE8938C11BFF19F1FF92D2CD56
测试成功!!
本文出自 “李惟忠的技术博客” 博客,转载请与作者联系!