Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
功能介绍
编辑
Nagios 可以监控的功能有:
1、监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
2、监控主机资源(处理器负荷、磁盘利用率等);
3、简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
4、并行服务检查机制;
5、具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
6、当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
7、可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
8、自动的日志滚动功能;
9、可以支持并实现对主机的冗余监控;
10、可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等; [1]
11、可以通过手机查看系统监控信息;
12、可指定自定义的事件处理控制器;
cacti 编辑
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。
介绍
编辑
Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。界面友好。软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。
cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成。
Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等变量。
snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下)。rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。关于RRDTool的知识请参阅RRDTool教学。
数据加密工具libmcrypt、mhash、mcrypt
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make &&make install
tar zxvf mhash-0.9.9.9.tar.gz
./configure
make &&make install
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
tar zxvf mcrypt-2.6.8.tar.gz
./configure
make &&make install
需要事先先把rpm安装的HTTP、MySQL、PHP都给卸载:
如:rpm -e httpd --nodeps
执行LAMP脚本,安装LAMP平台。
注意:由于脚本里没有给MySQL创建硬链接,所以需要手动创建:
cd /usr/local/mysql/bin/
ln -s /usr/local/mysql/bin/* /usr//local/bin/
ln -s /usr/local/mysql/lib/mysql/* /usr/lib/
ln -s /usr/local/mysql/include/mysql/* /usr/include/
并创建MySQL数据库root用户和密码与PHP网页的一致,如:123456
测试PHP、MYSQL连接
[root@www ~]# vim /usr/local/apache2/htdocs/index.php
<?php
$link=mysql_connect('localhost','root','123456');
if($link) echo "Mysql connect is OK !!";
mysql_close();
phpinfo( );
?>
安装rrdtool
rpm -ivh rrdtool-1.2.23-1.el5.rf.i386.rpm rrdtool-devel-1.2.23-1.el5.rf.i386.rpm perl-rrdtool-1.2.23-1.el5.rf.i386.rpm
安装SNMP
yum install net-snmp net-snmp-libs net-snmp-utils net-snmp-devel -y
配置SNMP
vim /etc/snmp/snmpd.conf 配置内容略(大概是41行,65行,85行要修改一下)!
chkconfig snmpd on
service snmpd restart
service snmptrapd start #启动snmptrapd服务
chkconfig snmptrapd on #使其开机自动启动
netstat -unlp 查看端口UDP 161 162
配置MYSQL
登录mysql,创建cacti的数据库,并为其指定cactier用户和密码(123456)。数据库名字可根据需要指定,这里指定为cactidb,创建并授权:
mysql -uroot -p
mysql> create database cactidb;
mysql> GRANT all privileges ON cactidb.* TO cactier@localhost IDENTIFIED BY '123456';
mysql> GRANT all privileges ON cactidb.* TO cactier@127.0.0.1 IDENTIFIED BY '123456';
mysql> GRANT all privileges ON cactidb.* TO cactier@192.168.20.0 IDENTIFIED BY '123456';
这里指定了一个网段的授权,是将来做监控时数据库和监控工具不在同一台主机上,网段可根据自己需要进行授权。
mysql> flush privileges;
安装cacti
tar zxvf cacti-0.8.7g.tar.gz
mv cacti-0.8.7g /usr/local/apache2/htdocs/cacti
cd /usr/local/apache2/htdocs/cacti/
mysql -uroot -p123456 cactidb <cacti.sql
vim /usr/local/apache2/htdocs/cacti/include/config.php
将下列各参数的值修改为您前面所设定的:
$database_type = "mysql";
$database_default = "cactidb";
$database_hostname = "localhost";
$database_username = "cactier";
$database_password = "123456";
$database_port = "3306";
添加账号和密码
useradd cactier
passwd cactier
cd /usr/local/apache2/htdocs/cacti
chown -R cactier rra/ log/
制作计划任务
vim /etc/crontab
*/5 * * * * cactier php /usr/local/apache2/htdocs/cacti/poller.php > /dev/null &
service crond restart
如果采集数据命令执行没有反应可以在php前加上执行路径,如:
/usr/local/php5/bin/php /usr/local/apache2/htdocs/cacti/poller.php
从浏览器直接访问以下地址 即可看到cacti配置画面
http://IP/cacti/install/
########################################################################
如果是编译安装LAMP平台,在安装PHP时记得开启PDO-Mysql模块:配置命令如下:
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --enable-sockets --enable-mbstring --enable-pdo --with-pdo-mysql=/usr/local/mysql/bin/mysql_config --with-gd --with-zlib-dir=/usr/include/zlib.h --enable-force-cgi-redirect --with-config-file-path=/usr/local/php5/etc
cp php.ini-recommended /usr/local/php5/etc/php.ini
########################################################################
CACTI插件安装:
安装net-snmp
rpm -qa |grep snmp
# yum -y install net-snmp net-snmp-utils net-snmp-libs
cacti-plugins插件安装
tar zxvf cacti-plugin-0.8.7g-PA-v2.8.tar.gz
cd cacti-plugin-arch/
cp cacti-plugin-0.8.7g-PA-v2.8.diff pa.sql /usr/local/apache2/htdocs/cacti/
cd /usr/local/apache2/htdocs/cacti/
patch -p1 -N < cacti-plugin-0.8.7g-PA-v2.8.diff
mysql -uroot -p cactidb<pa.sql
vi include/config.php 修改一下参数保存退出
$config['url_path'] = '/cacti/';
配置好SNMP并验证
snmpwalk -v 2c -c public localhost system
Nagios 的安装
1. 安装基础支持套件和添加用户
nagios 需要一些基础支持套件才能运行,如apache,gcc,glibc,gd 库等。在此我们使用LAMP环境
#/usr/sbin/useradd nagios 添加一个名为nagios 的用户用以专门跑nagios
#passwd nagios 设置密码
#/usr/sbin/usermod -G nagios daemon 将apache 用户加入nagios 组
下载软件:
wget http://nchc.dl.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
wget http://nchc.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
2. 安装nagios;
tar zxvf nagios-3.4.3.tar.gz
cd nagios
注意下面--with-httpd-conf 的路径,取决与你apache的,如果是yum安装的apache,则路径为:
./configure --prefix=/usr/local/nagios --with-command-group=nagios --with-httpd-conf=/usr/local/apache2/conf/extra/
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
这时nagios 基本已经安装完成,默认安装后的配置文件用于启动nagios 是没有问题的。
#vi usr/local/nagios/etc/objects/contacts.cfg
修改nagiosadmin 这行其中的邮件地址为你的email 地址,以将报警邮件发到你的邮箱
#/usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
设置登陆web 界面时HTTP 验证的账号密码
#service httpd restart 启动apache
下面修改httpd.conf ,如果是yum装的apache ,配置文件的路径为如下所示:
vim /etc/httpd/conf/httpd.conf
在空白地方添加一下两行
# nagios default settings
Include conf/extra/nagios.conf
以上过程配置结束以后需要重新启动httpd:
# service httpd restart
3. 安装nagios-plugins
nagios-plugins 是nagios 官方提供的一套插件程序,nagios 监控主机的功能其实都是通过执行插件程序来实现的。
#tar xzf nagios-plugins-1.4.15.tar.gz
#cd nagios-plugins-1.4.15
#./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
#make&&make install
安装插件,安装后所有插件命令将被安装到/usr/local/nagios/libexec 目录下
4. 安装nagios-snmp-plugins
nagios-snmp-plugins 是一套用Perl 编写的通过SNMP 方式监控主机的插件程序。
#wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz
#tar xzf nagios-snmp-plugins.1.1.1.tgz
#cd nagios_plugins
#########
配置check_snmp_int.pl 这些插件的使用时需要配置cpan,CPAN 是Comprehensive Perl Archive
Network 的缩写.。它是一个巨大的Perl 软件收藏库,收集了大量有用的Perl 模块(modules)
及其相关的文件。这里主要是使用Perl-Net-SNMP 模块。有两种方式安装:
A)通过CPAN 来安装
#perl -MCPAN -e shell 一路回车,选择默认选项即可 区域选择亚洲 国家选择中国
cpan> install Net::SNMP
B)首先去官方网站www.cpan.org 下载以下几个模块
Crypt::DES
Digest::MD5
Digest::SHA1
Digest::HMAC
Net::SNMP
下载后对于每个模块依次按照下面的方式安装
#tar zxf <module>.tar.gz <module>表示模块名,具体请按上面提到的模块替换
#cd <module> <module>表示模块名,具体请按上面提到的模块替换
#perl Makefile.pl
#make test
#make install
注意:Net::SNMP 模块必须在最后安装。至此Net::SNMP 手动安装完毕
#########
#./install.sh
再执行nagios-snmp-plugins 安装脚本,执行之后会将插件命令安装到/usr/local/nagios/libexec下
5. 下面是一些配置
(1)把nagios添加为系统服务并将之加入到自动启动服务队列:
chkconfig --add nagios
chkconfig nagios on
(2)检查其主配置文件的语法是否正确:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
(3)如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:service nagios start
(4)配置selinux
如果您的系统开启了selinux服务,则默认为拒绝nagios web cgi程序的运行。您可以通过下面的命令来检查您的系统是否开启了selinux:
getenforce
如果上面命令的结果显示开启了selinux服务,您可以通过下面的命令暂时性的将其关闭:
setenforce 0
如果您想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的值“force”修改为“disable”即可。
##当然,您也可以通过以下方式将nagios的CGI程序运行于SELinux/targeted模式而不用关闭selinux:
chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin
chcon -R -t httpd_sys_content_t /usr/local/nagios/share
(5)通过web界面查看nagios:
http://your_nagios_IP/nagios
整合cacti 和nagios
整合cacti 和nagios 是利用了cacti 的一个插件nagios for cacti(NPC),它的原理是将nagios 的数据通过ndo2db 导入到mysql 数据库(cacti 的库中),然后cacti 读取数据库信息将nagios的结果展示出来。
下面编译安装NDOUtils,NDOUtils则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现这些数据的快速检索和处理。 yum -y install DBI DBD-mysql
1. 安装ndoutils
安装ndoutils的依赖包
(1)安装DBI
wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
tar -zxvf DBI-1.616.tar.gz
cd DBI-1.616
perl Makefile.PL
make && make install
(2)安装DBD-mysql
wgethttp://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.018.tar.gz
tar xvf DBD-mysql-4.018.tar.gz
unset LANG
cd DBD-mysql-4.018
perl Makefile.PL --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/lib -lz " --cflags=-I/usr/local/mysql/include/mysql --mysql_config=/usr/local/mysql/bin/mysql_config --testhost=localhost
make && make test &&make install
# 做好MySQL库文件lib和include文件的连接(这点很重要)。
mkdir /usr/include/mysql
mkdir /usr/lib/mysql
ln -s /usr/local/mysql/include/* /usr/include/
ln -s /usr/local/mysql/include/* /usr/include/mysql/
ln -s /usr/local/mysql/lib/* /usr/lib/
ln -s /usr/local/mysql/lib/* /usr/lib/mysql
(1)安装ndoutils
ndoutils作用,把nagios的数据写到mysql,集成nagios到cacti的关健的一部分。
tar -zxvf ndoutils-1.4b9.tar.gz
cd ndoutils-1.4b9
./configure --prefix=/usr/local/nagios --enable-mysql --disable-pgsql LDFLAGS=-L/usr/local/mysql/lib/mysql --with-mysql-lib=/usr/local/mysql/lib/mysql --with-mysql=/usr/local/mysql --with-mysql-inc=/usr/local/mysql/include/mysql
make (注:这里不需要make install)
##################################################################
../include/config.h:261:25: error: mysql/mysql.h: No such file or directory
../include/config.h:262:26: error: mysql/errmsg.h: No such file or directory
make[1]: *** [io.o] Error 1
make[1]: Leaving directory `/root/nagiosddd/ndoutils-1.4b9/src'
make: *** [all] Error 2
解决方法
# vi include/config.h
将
#include <mysql/mysql.h>
#include <mysql/errmsg.h>
修改为
#include </usr/local/mysql/include/mysql/mysql.h>
#include </usr/local/mysql/include/mysql/errmsg.h>
#######################################################################
完成后必须再次make
复制执行及配置文件
cp config/ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg
cp config/ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
chown nagios.nagios /usr/local/nagios/etc/ndo*.cfg
cd src
cp ndomod-3x.o ndo2db-3x log2ndo file2sock /usr/local/nagios/bin
cd ../db/
./installdb -ucactier -p123456 -h localhost -d cactidb
或者:mysql -u root -p -D cactidb -h localhost < ./db/mysql.sql
(2).配置ndo2db.cfg文件:
[root@node3 etc]# vim /usr/local/nagios/etc/ndo2db.cfg
lock_file=/usr/local/nagios/var/ndo2db.lock
ndo2db_user=nagios
ndo2db_group=nagios
socket_type=tcp
socket_name=/usr/local/nagios/var/ndo.sock
tcp_port=5668
use_ssl=0
db_servertype=mysql
db_host=localhost
db_port=3306
db_name=cactidb
db_prefix=npc_
db_user=cactier
db_pass=123456
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
max_externalcommands_age=44640
debug_level=0
debug_verbosity=1
debug_file=/usr/local/nagios/var/ndo2db.debug
max_debug_file_size=1000000
(3).配置ndomod.cfg文件
[root@node3 etc]# vim /usr/local/nagios/etc/ndomod.cfg
instance_name=node3
output_type=tcpsocket
output=127.0.0.1
tcp_port=5668
use_ssl=0
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2
(4).配置nagios的配置文件
[root@node3 etc]# vim /usr/local/nagios/etc/nagios.cfg
添加以下两句,第二句如果没有才加上去,默认是有的。
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg 大概在251行。
event_broker_options=-1 大概在224行
(5). 启动ndo2db守护进程
[root@node3 etc]# /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
执行完以上这条命令,如果没有报错,就看看nagios.log的日志,如果出现以下提示:
tail -30 /usr/local/nagios/var/nagios.log
nagios: ndomod: Could not open data sink! I'll keep trying, but some output may get lost...
解决方法就是:
查看/usr/local/nagios/etc/ndo2db.cfg文件里的ndo2db_user=nagios ndo2db_group=nagios db_user=ndouser
db_pass=ndouser 这几项是否正确配置了,ndo2db_user就是你运行nagios的用户名;ndo2db_group是运行nagios的组,db_user表示的是你授权访问ndodb数据库的用户名,db_pass访问数据的密码。
如果在加载守护进程出现:
Failed to obtain lock on file /usr/local/nagios/var/ndo2db.lock: Permission denied : Permission denied
解决方法是:确认你在/usr/local/nagios/etc/ndo2db.cfg里ndo2db_user与ndo2db_group这两项的填写的用户是否对目录/usr/local/nagios/var/有写入的权限。
(6).启动nagios
[root@node3 etc]# /etc/init.d/nagios start
制作NDO2DB启动脚本(供选择)
cp ./daemon-init /etc/init.d/ndo2db
chmod +x /etc/init.d/ndo2db
chkconfig --add ndo2db
chkconfig ndo2db on
#添加启动脚本
service nagios restart
service ndo2db start
#重启服务
查看日志文件,以验证ndoutils配置是否成功
tail -20 /usr/local/nagios/var/nagios.log #或者 tail -20 /var/log/messages
安装cacti插件npc
wget http://www.constructaegis.com/downloads/npc-2.0.4.tar.gz
tar -zxvf npc-2.0.4.tar.gz
mv npc /usr/local/apache2/htdocs/cacti/plugins
登录cacti后台,在插件管理中心安装并启用NPC。
Plugin Management面板,install npc,enable npc。
Settings-npc选项卡下面:
Nagios Command File Path: /usr/local/nagios/var/rw/nagios.cmd
Nagios URL: http://IP/nagios/
保存后完成。
至此,ndoutils会自动把nagios的数据写到mysql里cacti库下的npc_*表。
查看访问
http://IP/cacti/
###########################
如果查看日志报错:
ndo2db-3x: mysql_error: 'Unknown column 'long_output' in 'field list''
解决方法就是:
ALTER TABLE npc_eventhandlers ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_hostchecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_hoststatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_notifications ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_servicechecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_servicestatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_statehistory ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_systemcommands ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
所有服务重启:
service mysqld restart
service httpd restart
service ndo2db restart
service nagios restart
配置nagios(主要是定义监控的对象所存放的是哪些文件)
预备知识 :
在Nagios里面定义了一些基本的对象,一般用到的有:
监控时间段 timeperiod 7X24小时不间断还是周一至周五,或是自定义的其他时间段
联系人 contact 出了问题向谁报告?一般当然是系统管理员了
被监控主机 Host 所需要监控的服务器,当然可以是监控机自己
监控命令 command nagios发出的哪个指令来执行某个监控,这也是自己定义的
被监控的服务 Service 例如主机是否存活,80端口是否开,磁盘使用情况或者自定义的服务等
注意:多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组
修改Nagios的配置文件:
------------------------------------------------------------------------
vi /usr/local/nagios/etc/nagios.cfg //修改nagios的主配置文件
#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg //注释此行
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg //监视时段配置文件路径
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //联系人配置文件路径
cfg_file=/usr/local/nagios/etc/objects/commands.cfg //监控命令配置文件路径
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg //主机配置文件路径
cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg //主机组配置文件路径
cfg_file=/usr/local/nagios/etc/objects/services.cfg //服务配置文件路径
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg //联系组配置文件路径
check_external_commands=0 //将 0 改成 1,允许在web界面下执行重启Nagios
command_check_interval=60s //改成 60s, 命令检查时间间隔
check_external_commands=0 //将0改为1,允许在web界面执行external_commands
然后检查配置文件是否出错
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果正常就显示如下信息
Total Warnings: 0
Total Errors: 0
因为默认的nagios配置文件没有 hosts.cfg、hostgroups.cfg等文件,因此在检查的时候会报错,这时需要手工的去创建这些文件:
cd /usr/local/nagios/etc/objects
touch hosts.cfg
touch hostgroups.cfg
..........
建完后再检查是否报错:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
八、配置cgi.cfg (主要是)
vi cgi.cfg //修改cgi脚本控制文件
use_authentication=1 //确保值为 1
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
-------------------------------------------------------------------------
九、配置misccommands.cfg
vi misccommands.cfg //主要功能是用于发送报警短信和报警邮件
#host-notify-by-sms //发送短信报警
define command {
command_name host-notify-by-sms
command_line /usr/local/bin/sms_send "Host $HOSTSTATE$ alert for $HOSTNAME$! on '$DATETIME$' " $CONTACTPAGER$
}
#service notify by sms //发送短信报警
define command {
command_name service-notify-by-sms
command_line /usr/local/bin/sms_send "'$HOSTADDRESS$' $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
}
十、定义nagios各对象的具体配置文件:
vi /usr/local/nagios/etc/objects/timeperiods.cfg //定义监控时间段,名称是24*7,监控时间是全天24小时
define timeperiod {
timeperiod_name 24x7 //时间段的名称,这个地方不要有空格
alias 24 Hours A Day,7Days 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
}
vi contacts.cfg //定义联系人
define contact {
contact_name sa //不要有空格
alias system administrator
service_notification_period 24x7 //服务出了状况通知的时间段,由timeperiods.cfg中定义的.
host_notification_period 24x7 //主机出了状况通知的时间段,由timeperiods.cfg中定义的.
service_notification_options w,u,c,r //当服务出现故障
host_notification_options d,u,r //当主机出现故障
service_notification_commands service-notify-by-sms,service-notify-by-email //命令读配置miscommands.cfg
host_notification_commands host-notify-by-email,host-notify-by-sms //命令读配置miscommands.cfg
email monitor@xxx.com
pager 132********
}
define contact {
contact_name ritto
alias system administrator
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-by-email
//notify-by-mail是在commands.cfg中定义的,给联系人发邮件
host_notification_commands host-notify-by-email
//主机出现故障时,给联系人发邮件
email ritto.zhao@xxx.com //联系人邮件地址
pager 132********
//联系人的手机,如果支持短信通知的话,会很实用
}
//如果不需要手机报警的话,则改成如下:
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
//上面的文件定义了2个联系人,如果有更多联系人的话,照这个格式在后面追加即可。
//服务通知选项(service_notification_options)
//与主机通知选项(host_notification_options)的几个选项在这里说明一下:
//w-warning 报警 , u-unknown 未知, c-critical 严重 , r-recovery 从异常情况恢复正常 ; d-down 关机了,
//u-unreachable,注意一下,主机报警和服务报警有些差异。
-----------------------------------------------------------------------------
vi contactgroups.cfg //将多个联系人定义一个联系人组
define contactgroup{
contactgroup_name sagroup
alias System Administrators
members sa,ritto
}
-----------------------------------------------------------------------------
vi hosts.cfg //定义被监控主机
#define monitor host
define host {
host_name nagios-server
alias nagios server
address 192.168.4.226
contact_groups sagroup
//多个联系组用逗号分隔,数据来源于contactgroups.cfg
check_command check-host-alive
//这个命令来自commands.cfg,用来监控主机是否存活
max_check_attempts 5 //检查失败后重试的次数
notification_interval 10 //提醒的时间,每隔10秒提醒一次
notification_period 24x7
//提醒的周期,24*7,来自之前timeperiods.cfg中定义的
notification_options d,u,r
//指定什么情况下提醒,来自contacts.cfg中定义的
}
define host {
host_name mail12.supertalent.com
alias nagios test client
address 192.168.4.41
contact_groups sagroup
check_command check-host-alive
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
}
------------------------------------------------------------------------------
vi hostgroups.cfg //将多个主机定义一个主机组
define hostgroup{
hostgroup_name sa-servers //主机组名称
alias sa Servers //别名
members nagios-server
//组的成员主机,多个主机以逗号相隔,必须是上面hosts.cfg中定义的
}
------------------------------------------------------------------------------
vi services.cfg //定义监控的服务
#service definition
define service{
host_name nagios-server //要监控的主机, 必须是hosts.cfg 中定义的
service_description check-host-alive //定义的是监控这个主机是不是存活,给监控项目起个名字,任意起都可以,如check ftp
check_command check-host-alive //所用的命令,是commands.cfg中定义的,所用的命令,必须是commands.cfg中定义的
check_period 24x7 //监控的时间段,是timeperiods.cfg中定义的
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup //联系人组, contactgroups.cfg中定义的
notification_interval 10
notification_period 24x7 //通知的时间段, ,是timeperiods.cfg中定义的
notification_options w,u,c,r
}
define service {
host_name mail12.supertalent.com
service_description check_http
check_command check_http //检查tcp 80端口服务是否正常
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
}
//书写时要注意的是,check_tcp与要监控的服务端口之间要用”!”做分隔符。如果服务太多,以考虑用脚本来生成。
-----------------------------------------------------------------------------
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg //检查所有配置文件的正确性
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg //作为守护进程后台启动Nagios
echo "/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg" >> /etc/rc.local //开机自动运行
-----------------------------------------------------------------------------
使用命令和插件监控更多信息
cd /usr/local/nagios/libexec //插件默认的安装路径
./check_disk -w 10% -c 5% /
//检查根分区的使用情况,若剩余10%以下,为警告状态(warning)
//若剩余 5%以下,为严重状态(critical)
设置并熟悉以上的配置后,下面就需要进行具体的监控工作了
被监控主机上的安装部署配置
十一、监控一台主机
在hosts.cfg中定义主机名 --- 在services.cfg中定义监控内容
------------------------------------------------------------------------------
使用NRPE监控Linux上的"本地信息"
对系统为Linux的主机进行如下监控: CPU负载,磁盘容量,登陆用户数,总进程数,僵尸进程数,swap分区使用情况
在被监控主机上.
useradd nagios
passwd nagios
tar zxvf nagios-plugins-1.4.9.tar.gz
cd nagios-plugins-1.4.9
./configure --prefix=/usr/local/nagios
make
make install
chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec/
tar zxvf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure //NRPE port: 5666
make all
make install-plugin
make install-daemon //安装daemon
make install-daemon-config //安装配置文件
ls /usr/local/nagios/
bin/ etc/ libexec/ share/ //现在nagios目录会有4个目录了
将NRPE daemon作为xinetd下的一个服务运行
yum -y install xinetd
service xinetd start
chkconfig --level 3 xinetd on
make install-xinetd //安装xinetd脚本
vi /etc/xinetd.d/nrpe
only_from = 127.0.0.1 192.168.4.226 //在后面增加监控主机的地址,以空格间隔
vi /etc/services
nrpe 5666/tcp # nrpe //增加这一行
service xinetd restart
netstat -at | grep nrpe //查看NRPE是否已经启动
netstat -an | grep 5666 //查看5666端口是否被监听
vi /etc/sysconfig/iptables //增加一条5666的端口
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5666 -j ACCEPT
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 //测试NRPE是否正常工作
NRPE v2.8.1 //正常的结果会显示当前NRPE的版本号
查看NRPE的监控命令
cd /usr/local/nagios/etc
vi 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
[***]中是命令名,也就是check_nrpe的-c参数可以接的内容,=后面是实际执行的插件程序
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_users //检测登陆用户数
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_load //CPU负载
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_zombie_procs //僵尸进程
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_total_procs //总进程数
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_disk //磁盘使用量
其中:
//check_load -w 15,10,5 -c 30,25,20
//在unix里面负载的均值通常表示是1分钟,5分钟,15分钟内平均有多少进程处于等待状态
//当1分钟多于15个进程等待,5分钟多于10个,15分钟多于5个则为warning状态
//当1分钟多于30个进程等待,5分钟多于25个,15分钟多于20个则为critical状态
记住监测磁盘时,先用
fdisk -l //查看磁盘的分区,如果sda, 则应该改成下面的形式,把默认的hda1改成sda1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 268 2048287+ 82 Linux swap / Solaris
/dev/sda3 269 19457 154135642+ 83 Linux
command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda1
command[check_sda3]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda3
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_sda1
DISK OK - free space: /boot 77 MB (82% inode=99%);| /boot=16MB;78;88;0;98
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_sda3
DISK OK - free space: / 135169 MB (97% inode=99%);| /=3113MB;145789;145799;0;145809
例如查看根分区的使用情况,执行
/usr/local/nagios/libexec/check_disk -w 10% -c 5% /
命令的含义是检查分区/的使用情况,若剩余10%以下,为警告状态(warning),5%以下为严重状态(critical),
执行后我们会看到下面这条信息
DISK WARNING - free space: / 135169 MB (97% inode=99%);| /=3113MB;145789;145799;0;145809
说明当前是warning的状态,空闲空间还有97%.
在运行Nagios的监控主机上
因为之前已经将Nagios运行起来了,现在要做的是:
安装check_nrpe插件
在commands.cfg中创建check_nrpe中的命令,只有在commands.cfg中定义过的命令才能在services.cfg中使用
创建对被监控主机的监控项目
tar zxvf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure
make all
make install-plugin //只运行这一步即可,只需要check_nrpe插件
/usr/local/nagios/libexec/check_nrpe -H 192.168.4.30
NRPE v2.8.1
//测试一下监控机使用check_nrpe与被监控机运行的nrpedaemon之間的通信
//看到已经返回了正确的NRPE的版本信息,说明一切正常
//如返回"Could not complete SSL handshake",则要检查被监控机/etc/xinetd.d/nrpe中only_from这项是否允许监控机访问
在commands.cfg中增加对check_nrpe的定义
vi /usr/local/nagios/etc/commands.cfg
#################################################################
# 2008.12.4 by ritto
#################################################################
# 'check_nrpe' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
//command_name check_nrpe 定义命令名称为check_nrpe, 在services.cfg中要使用这个名称
//command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ 定义实际运行的插件程序
接下来可以在services.cfg中定义对主机CPU负载的监控
vi services.cfg
define service {
host_name mail1
service_description check-load
check_command check_nrpe!check_load
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service {
host_name mail1
service_description check-users
check_command check_nrpe!check_users
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service {
host_name mail1
service_description check-zombie-process
check_command check_nrpe!check_zombie_procs
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
----------------------------------------------------------------------
在被监控机上增加check_swap命令的定义
vi /usr/local/nagios/etc/nrpe.cfg
增加下面这一行
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
//如果在被监控机上是以daemon运行的nrpe,则需要手动重启
//如果在被监控机上是以xinetd运行的,则不需要
----------------------------------------------------------------------
在监控机上增加这个监控项目:
vi /etc/services.cfg
define service {
host_name mail1
service_description check-swap
check_command check_nrpe!check_swap
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
------------------------------------------------------------------------------
所有配置都已经修改好,现在重启Nagios,杀掉Nagios进程,再重启,过一会就可以看到画面了
killall nagios
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
或使用
/etc/init.d/nagis restart/start/stop/status
如查报错,则可能是脚本路径设置错误,
vi /etc/init.d/nagios
将prefix=/usr/local/nagiosaa改为安装的目录/etc/init.d/nagios
十二、监控一台windows机器
nagios监控windows系统有三种实现方式:SNMP,NSClient++,NRPE,后面两种方式都需要在windows上安装agent,本文档只介绍使用NSClient++方式来监控Windows
在windows服务器上:
---------------------------------------------------------------------------------------------------------------------
安装 NSClient++
到http://sourceforge.net/projects/nscplus下载最近版本的NSClient++;解压NSClient++到C:/NSClient++目录;
开启 cmd,切换到 C:/NSClient++,执行 NSClient++ /install 进行安装
执行 NSClient++ SysTray install 注意大小写,这一步是安装系统小图标
编辑 C:/NSClient++ 下的 NSC.ini 文件
[modules] 中,所有的 .dll 注释都全都去掉,除了 CheckWMI.dll 和 RemoteConfiguration.dll不用去掉注释外
[Settings] 中,'password' 这个项目是在设置密码,作用是在 nagios 监控主机进行联机时,要求提供密码才能进一步进行联机,这里为了方便起见,跳过它,不要设定密码。
[Settings] 中,'allowed_hosts' 选项的注释去掉,并且加上 nagios 的监控主机的 IP,修改如下 allowed_hosts=127.0.0.1/32,192.168.1.11 以逗点相隔。
[NSClient] 中,'port' 选项的注释须要拿掉,并且它的值是 '12489',这是 NSClient 的预设 port
设定完成之后,启动 NSClient++
在 cmd 中 C:/NSClient++ 下,执行 NSClient++ /start
在 cmd 下,执行 netstat -an ,检查 port 12489 是否开启
启动完后,在windows上的操作就结束了
----------------------------------------------------------------------------------------------------------------------
在监控服务器上:
-----------------------------------------------------------------------------------------------------------------------
先到配置文件打开windows相关模块
vi /usr/local/nagios/etc/nagios.cfg
# Definitions for monitoring a Windows machine
cfg_file=/usr/local/nagios/etc/objects/windows.cfg #去掉这句话的注释
打开模块先配置commands.cfg
检查libexec目录下须要有 check_nt 执行程序。
设定 commands.cfg
增加:
# 'check_nt' windows client command definition for remote service
define command{
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
}
该命令在安装的时候已经存在,因此不需要再增加了
接配置windows.cfg,主要是定义监控主机及服务
define host{
use windows-server ; Inherit default values from a template
host_name 192.168.1.11 ; The name we're giving to this host
alias My Windows Server ; A longer name associated with the host
address 192.168.1.11 ; IP address of the host
contact_groups sagroup
check_command check-host-alive
max_check_attempts 1
notification_interval 2
notification_period 24x7
notification_options d,u,r
}
define service{
use generic-service
host_name 192.168.1.11
service_description CPU Load
check_command check_nt_cpuload
check_period 24x7
max_check_attempts 3
normal_check_interval 1
retry_check_interval 2
contact_groups sagroup
notification_interval 1
notification_period 24x7
notification_options w,u,c,r
}
配置完后检查nagios的配置是否有问题,如果没有问题直接重起nagios.到此,windows的监控便已完成
功能介绍
编辑
Nagios 可以监控的功能有:
1、监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
2、监控主机资源(处理器负荷、磁盘利用率等);
3、简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
4、并行服务检查机制;
5、具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
6、当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
7、可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
8、自动的日志滚动功能;
9、可以支持并实现对主机的冗余监控;
10、可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等; [1]
11、可以通过手机查看系统监控信息;
12、可指定自定义的事件处理控制器;
cacti 编辑
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。
介绍
编辑
Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。界面友好。软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。
cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成。
Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等变量。
snmp抓到数据不是存储在mysql中,而是存在rrdtool生成的rrd文件中(在cacti根目录的rra文件夹下)。rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的档案文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。关于RRDTool的知识请参阅RRDTool教学。
数据加密工具libmcrypt、mhash、mcrypt
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make &&make install
tar zxvf mhash-0.9.9.9.tar.gz
./configure
make &&make install
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
tar zxvf mcrypt-2.6.8.tar.gz
./configure
make &&make install
需要事先先把rpm安装的HTTP、MySQL、PHP都给卸载:
如:rpm -e httpd --nodeps
执行LAMP脚本,安装LAMP平台。
注意:由于脚本里没有给MySQL创建硬链接,所以需要手动创建:
cd /usr/local/mysql/bin/
ln -s /usr/local/mysql/bin/* /usr//local/bin/
ln -s /usr/local/mysql/lib/mysql/* /usr/lib/
ln -s /usr/local/mysql/include/mysql/* /usr/include/
并创建MySQL数据库root用户和密码与PHP网页的一致,如:123456
测试PHP、MYSQL连接
[root@www ~]# vim /usr/local/apache2/htdocs/index.php
<?php
$link=mysql_connect('localhost','root','123456');
if($link) echo "Mysql connect is OK !!";
mysql_close();
phpinfo( );
?>
安装rrdtool
rpm -ivh rrdtool-1.2.23-1.el5.rf.i386.rpm rrdtool-devel-1.2.23-1.el5.rf.i386.rpm perl-rrdtool-1.2.23-1.el5.rf.i386.rpm
安装SNMP
yum install net-snmp net-snmp-libs net-snmp-utils net-snmp-devel -y
配置SNMP
vim /etc/snmp/snmpd.conf 配置内容略(大概是41行,65行,85行要修改一下)!
chkconfig snmpd on
service snmpd restart
service snmptrapd start #启动snmptrapd服务
chkconfig snmptrapd on #使其开机自动启动
netstat -unlp 查看端口UDP 161 162
配置MYSQL
登录mysql,创建cacti的数据库,并为其指定cactier用户和密码(123456)。数据库名字可根据需要指定,这里指定为cactidb,创建并授权:
mysql -uroot -p
mysql> create database cactidb;
mysql> GRANT all privileges ON cactidb.* TO cactier@localhost IDENTIFIED BY '123456';
mysql> GRANT all privileges ON cactidb.* TO cactier@127.0.0.1 IDENTIFIED BY '123456';
mysql> GRANT all privileges ON cactidb.* TO cactier@192.168.20.0 IDENTIFIED BY '123456';
这里指定了一个网段的授权,是将来做监控时数据库和监控工具不在同一台主机上,网段可根据自己需要进行授权。
mysql> flush privileges;
安装cacti
tar zxvf cacti-0.8.7g.tar.gz
mv cacti-0.8.7g /usr/local/apache2/htdocs/cacti
cd /usr/local/apache2/htdocs/cacti/
mysql -uroot -p123456 cactidb <cacti.sql
vim /usr/local/apache2/htdocs/cacti/include/config.php
将下列各参数的值修改为您前面所设定的:
$database_type = "mysql";
$database_default = "cactidb";
$database_hostname = "localhost";
$database_username = "cactier";
$database_password = "123456";
$database_port = "3306";
添加账号和密码
useradd cactier
passwd cactier
cd /usr/local/apache2/htdocs/cacti
chown -R cactier rra/ log/
制作计划任务
vim /etc/crontab
*/5 * * * * cactier php /usr/local/apache2/htdocs/cacti/poller.php > /dev/null &
service crond restart
如果采集数据命令执行没有反应可以在php前加上执行路径,如:
/usr/local/php5/bin/php /usr/local/apache2/htdocs/cacti/poller.php
从浏览器直接访问以下地址 即可看到cacti配置画面
http://IP/cacti/install/
########################################################################
如果是编译安装LAMP平台,在安装PHP时记得开启PDO-Mysql模块:配置命令如下:
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --enable-sockets --enable-mbstring --enable-pdo --with-pdo-mysql=/usr/local/mysql/bin/mysql_config --with-gd --with-zlib-dir=/usr/include/zlib.h --enable-force-cgi-redirect --with-config-file-path=/usr/local/php5/etc
cp php.ini-recommended /usr/local/php5/etc/php.ini
########################################################################
CACTI插件安装:
安装net-snmp
rpm -qa |grep snmp
# yum -y install net-snmp net-snmp-utils net-snmp-libs
cacti-plugins插件安装
tar zxvf cacti-plugin-0.8.7g-PA-v2.8.tar.gz
cd cacti-plugin-arch/
cp cacti-plugin-0.8.7g-PA-v2.8.diff pa.sql /usr/local/apache2/htdocs/cacti/
cd /usr/local/apache2/htdocs/cacti/
patch -p1 -N < cacti-plugin-0.8.7g-PA-v2.8.diff
mysql -uroot -p cactidb<pa.sql
vi include/config.php 修改一下参数保存退出
$config['url_path'] = '/cacti/';
配置好SNMP并验证
snmpwalk -v 2c -c public localhost system
Nagios 的安装
1. 安装基础支持套件和添加用户
nagios 需要一些基础支持套件才能运行,如apache,gcc,glibc,gd 库等。在此我们使用LAMP环境
#/usr/sbin/useradd nagios 添加一个名为nagios 的用户用以专门跑nagios
#passwd nagios 设置密码
#/usr/sbin/usermod -G nagios daemon 将apache 用户加入nagios 组
下载软件:
wget http://nchc.dl.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
wget http://nchc.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
2. 安装nagios;
tar zxvf nagios-3.4.3.tar.gz
cd nagios
注意下面--with-httpd-conf 的路径,取决与你apache的,如果是yum安装的apache,则路径为:
./configure --prefix=/usr/local/nagios --with-command-group=nagios --with-httpd-conf=/usr/local/apache2/conf/extra/
make all
make install
make install-init
make install-config
make install-commandmode
make install-webconf
这时nagios 基本已经安装完成,默认安装后的配置文件用于启动nagios 是没有问题的。
#vi usr/local/nagios/etc/objects/contacts.cfg
修改nagiosadmin 这行其中的邮件地址为你的email 地址,以将报警邮件发到你的邮箱
#/usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
设置登陆web 界面时HTTP 验证的账号密码
#service httpd restart 启动apache
下面修改httpd.conf ,如果是yum装的apache ,配置文件的路径为如下所示:
vim /etc/httpd/conf/httpd.conf
在空白地方添加一下两行
# nagios default settings
Include conf/extra/nagios.conf
以上过程配置结束以后需要重新启动httpd:
# service httpd restart
3. 安装nagios-plugins
nagios-plugins 是nagios 官方提供的一套插件程序,nagios 监控主机的功能其实都是通过执行插件程序来实现的。
#tar xzf nagios-plugins-1.4.15.tar.gz
#cd nagios-plugins-1.4.15
#./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
#make&&make install
安装插件,安装后所有插件命令将被安装到/usr/local/nagios/libexec 目录下
4. 安装nagios-snmp-plugins
nagios-snmp-plugins 是一套用Perl 编写的通过SNMP 方式监控主机的插件程序。
#wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz
#tar xzf nagios-snmp-plugins.1.1.1.tgz
#cd nagios_plugins
#########
配置check_snmp_int.pl 这些插件的使用时需要配置cpan,CPAN 是Comprehensive Perl Archive
Network 的缩写.。它是一个巨大的Perl 软件收藏库,收集了大量有用的Perl 模块(modules)
及其相关的文件。这里主要是使用Perl-Net-SNMP 模块。有两种方式安装:
A)通过CPAN 来安装
#perl -MCPAN -e shell 一路回车,选择默认选项即可 区域选择亚洲 国家选择中国
cpan> install Net::SNMP
B)首先去官方网站www.cpan.org 下载以下几个模块
Crypt::DES
Digest::MD5
Digest::SHA1
Digest::HMAC
Net::SNMP
下载后对于每个模块依次按照下面的方式安装
#tar zxf <module>.tar.gz <module>表示模块名,具体请按上面提到的模块替换
#cd <module> <module>表示模块名,具体请按上面提到的模块替换
#perl Makefile.pl
#make test
#make install
注意:Net::SNMP 模块必须在最后安装。至此Net::SNMP 手动安装完毕
#########
#./install.sh
再执行nagios-snmp-plugins 安装脚本,执行之后会将插件命令安装到/usr/local/nagios/libexec下
5. 下面是一些配置
(1)把nagios添加为系统服务并将之加入到自动启动服务队列:
chkconfig --add nagios
chkconfig nagios on
(2)检查其主配置文件的语法是否正确:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
(3)如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:service nagios start
(4)配置selinux
如果您的系统开启了selinux服务,则默认为拒绝nagios web cgi程序的运行。您可以通过下面的命令来检查您的系统是否开启了selinux:
getenforce
如果上面命令的结果显示开启了selinux服务,您可以通过下面的命令暂时性的将其关闭:
setenforce 0
如果您想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的值“force”修改为“disable”即可。
##当然,您也可以通过以下方式将nagios的CGI程序运行于SELinux/targeted模式而不用关闭selinux:
chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin
chcon -R -t httpd_sys_content_t /usr/local/nagios/share
(5)通过web界面查看nagios:
http://your_nagios_IP/nagios
整合cacti 和nagios
整合cacti 和nagios 是利用了cacti 的一个插件nagios for cacti(NPC),它的原理是将nagios 的数据通过ndo2db 导入到mysql 数据库(cacti 的库中),然后cacti 读取数据库信息将nagios的结果展示出来。
下面编译安装NDOUtils,NDOUtils则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现这些数据的快速检索和处理。 yum -y install DBI DBD-mysql
1. 安装ndoutils
安装ndoutils的依赖包
(1)安装DBI
wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
tar -zxvf DBI-1.616.tar.gz
cd DBI-1.616
perl Makefile.PL
make && make install
(2)安装DBD-mysql
wgethttp://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.018.tar.gz
tar xvf DBD-mysql-4.018.tar.gz
unset LANG
cd DBD-mysql-4.018
perl Makefile.PL --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/lib -lz " --cflags=-I/usr/local/mysql/include/mysql --mysql_config=/usr/local/mysql/bin/mysql_config --testhost=localhost
make && make test &&make install
# 做好MySQL库文件lib和include文件的连接(这点很重要)。
mkdir /usr/include/mysql
mkdir /usr/lib/mysql
ln -s /usr/local/mysql/include/* /usr/include/
ln -s /usr/local/mysql/include/* /usr/include/mysql/
ln -s /usr/local/mysql/lib/* /usr/lib/
ln -s /usr/local/mysql/lib/* /usr/lib/mysql
(1)安装ndoutils
ndoutils作用,把nagios的数据写到mysql,集成nagios到cacti的关健的一部分。
tar -zxvf ndoutils-1.4b9.tar.gz
cd ndoutils-1.4b9
./configure --prefix=/usr/local/nagios --enable-mysql --disable-pgsql LDFLAGS=-L/usr/local/mysql/lib/mysql --with-mysql-lib=/usr/local/mysql/lib/mysql --with-mysql=/usr/local/mysql --with-mysql-inc=/usr/local/mysql/include/mysql
make (注:这里不需要make install)
##################################################################
../include/config.h:261:25: error: mysql/mysql.h: No such file or directory
../include/config.h:262:26: error: mysql/errmsg.h: No such file or directory
make[1]: *** [io.o] Error 1
make[1]: Leaving directory `/root/nagiosddd/ndoutils-1.4b9/src'
make: *** [all] Error 2
解决方法
# vi include/config.h
将
#include <mysql/mysql.h>
#include <mysql/errmsg.h>
修改为
#include </usr/local/mysql/include/mysql/mysql.h>
#include </usr/local/mysql/include/mysql/errmsg.h>
#######################################################################
完成后必须再次make
复制执行及配置文件
cp config/ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg
cp config/ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg
chown nagios.nagios /usr/local/nagios/etc/ndo*.cfg
cd src
cp ndomod-3x.o ndo2db-3x log2ndo file2sock /usr/local/nagios/bin
cd ../db/
./installdb -ucactier -p123456 -h localhost -d cactidb
或者:mysql -u root -p -D cactidb -h localhost < ./db/mysql.sql
(2).配置ndo2db.cfg文件:
[root@node3 etc]# vim /usr/local/nagios/etc/ndo2db.cfg
lock_file=/usr/local/nagios/var/ndo2db.lock
ndo2db_user=nagios
ndo2db_group=nagios
socket_type=tcp
socket_name=/usr/local/nagios/var/ndo.sock
tcp_port=5668
use_ssl=0
db_servertype=mysql
db_host=localhost
db_port=3306
db_name=cactidb
db_prefix=npc_
db_user=cactier
db_pass=123456
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
max_externalcommands_age=44640
debug_level=0
debug_verbosity=1
debug_file=/usr/local/nagios/var/ndo2db.debug
max_debug_file_size=1000000
(3).配置ndomod.cfg文件
[root@node3 etc]# vim /usr/local/nagios/etc/ndomod.cfg
instance_name=node3
output_type=tcpsocket
output=127.0.0.1
tcp_port=5668
use_ssl=0
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2
(4).配置nagios的配置文件
[root@node3 etc]# vim /usr/local/nagios/etc/nagios.cfg
添加以下两句,第二句如果没有才加上去,默认是有的。
broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg 大概在251行。
event_broker_options=-1 大概在224行
(5). 启动ndo2db守护进程
[root@node3 etc]# /usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg
执行完以上这条命令,如果没有报错,就看看nagios.log的日志,如果出现以下提示:
tail -30 /usr/local/nagios/var/nagios.log
nagios: ndomod: Could not open data sink! I'll keep trying, but some output may get lost...
解决方法就是:
查看/usr/local/nagios/etc/ndo2db.cfg文件里的ndo2db_user=nagios ndo2db_group=nagios db_user=ndouser
db_pass=ndouser 这几项是否正确配置了,ndo2db_user就是你运行nagios的用户名;ndo2db_group是运行nagios的组,db_user表示的是你授权访问ndodb数据库的用户名,db_pass访问数据的密码。
如果在加载守护进程出现:
Failed to obtain lock on file /usr/local/nagios/var/ndo2db.lock: Permission denied : Permission denied
解决方法是:确认你在/usr/local/nagios/etc/ndo2db.cfg里ndo2db_user与ndo2db_group这两项的填写的用户是否对目录/usr/local/nagios/var/有写入的权限。
(6).启动nagios
[root@node3 etc]# /etc/init.d/nagios start
制作NDO2DB启动脚本(供选择)
cp ./daemon-init /etc/init.d/ndo2db
chmod +x /etc/init.d/ndo2db
chkconfig --add ndo2db
chkconfig ndo2db on
#添加启动脚本
service nagios restart
service ndo2db start
#重启服务
查看日志文件,以验证ndoutils配置是否成功
tail -20 /usr/local/nagios/var/nagios.log #或者 tail -20 /var/log/messages
安装cacti插件npc
wget http://www.constructaegis.com/downloads/npc-2.0.4.tar.gz
tar -zxvf npc-2.0.4.tar.gz
mv npc /usr/local/apache2/htdocs/cacti/plugins
登录cacti后台,在插件管理中心安装并启用NPC。
Plugin Management面板,install npc,enable npc。
Settings-npc选项卡下面:
Nagios Command File Path: /usr/local/nagios/var/rw/nagios.cmd
Nagios URL: http://IP/nagios/
保存后完成。
至此,ndoutils会自动把nagios的数据写到mysql里cacti库下的npc_*表。
查看访问
http://IP/cacti/
###########################
如果查看日志报错:
ndo2db-3x: mysql_error: 'Unknown column 'long_output' in 'field list''
解决方法就是:
ALTER TABLE npc_eventhandlers ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_hostchecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_hoststatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_notifications ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_servicechecks ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_servicestatus ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_statehistory ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
ALTER TABLE npc_systemcommands ADD long_output TEXT NOT NULL DEFAULT '' AFTER output;
所有服务重启:
service mysqld restart
service httpd restart
service ndo2db restart
service nagios restart
配置nagios(主要是定义监控的对象所存放的是哪些文件)
预备知识 :
在Nagios里面定义了一些基本的对象,一般用到的有:
监控时间段 timeperiod 7X24小时不间断还是周一至周五,或是自定义的其他时间段
联系人 contact 出了问题向谁报告?一般当然是系统管理员了
被监控主机 Host 所需要监控的服务器,当然可以是监控机自己
监控命令 command nagios发出的哪个指令来执行某个监控,这也是自己定义的
被监控的服务 Service 例如主机是否存活,80端口是否开,磁盘使用情况或者自定义的服务等
注意:多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组
修改Nagios的配置文件:
------------------------------------------------------------------------
vi /usr/local/nagios/etc/nagios.cfg //修改nagios的主配置文件
#cfg_file=/usr/local/nagios/etc/objects/localhost.cfg //注释此行
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg //监视时段配置文件路径
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //联系人配置文件路径
cfg_file=/usr/local/nagios/etc/objects/commands.cfg //监控命令配置文件路径
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg //主机配置文件路径
cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg //主机组配置文件路径
cfg_file=/usr/local/nagios/etc/objects/services.cfg //服务配置文件路径
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg //联系组配置文件路径
check_external_commands=0 //将 0 改成 1,允许在web界面下执行重启Nagios
command_check_interval=60s //改成 60s, 命令检查时间间隔
check_external_commands=0 //将0改为1,允许在web界面执行external_commands
然后检查配置文件是否出错
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果正常就显示如下信息
Total Warnings: 0
Total Errors: 0
因为默认的nagios配置文件没有 hosts.cfg、hostgroups.cfg等文件,因此在检查的时候会报错,这时需要手工的去创建这些文件:
cd /usr/local/nagios/etc/objects
touch hosts.cfg
touch hostgroups.cfg
..........
建完后再检查是否报错:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
八、配置cgi.cfg (主要是)
vi cgi.cfg //修改cgi脚本控制文件
use_authentication=1 //确保值为 1
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
-------------------------------------------------------------------------
九、配置misccommands.cfg
vi misccommands.cfg //主要功能是用于发送报警短信和报警邮件
#host-notify-by-sms //发送短信报警
define command {
command_name host-notify-by-sms
command_line /usr/local/bin/sms_send "Host $HOSTSTATE$ alert for $HOSTNAME$! on '$DATETIME$' " $CONTACTPAGER$
}
#service notify by sms //发送短信报警
define command {
command_name service-notify-by-sms
command_line /usr/local/bin/sms_send "'$HOSTADDRESS$' $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
}
十、定义nagios各对象的具体配置文件:
vi /usr/local/nagios/etc/objects/timeperiods.cfg //定义监控时间段,名称是24*7,监控时间是全天24小时
define timeperiod {
timeperiod_name 24x7 //时间段的名称,这个地方不要有空格
alias 24 Hours A Day,7Days 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
}
vi contacts.cfg //定义联系人
define contact {
contact_name sa //不要有空格
alias system administrator
service_notification_period 24x7 //服务出了状况通知的时间段,由timeperiods.cfg中定义的.
host_notification_period 24x7 //主机出了状况通知的时间段,由timeperiods.cfg中定义的.
service_notification_options w,u,c,r //当服务出现故障
host_notification_options d,u,r //当主机出现故障
service_notification_commands service-notify-by-sms,service-notify-by-email //命令读配置miscommands.cfg
host_notification_commands host-notify-by-email,host-notify-by-sms //命令读配置miscommands.cfg
email monitor@xxx.com
pager 132********
}
define contact {
contact_name ritto
alias system administrator
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-by-email
//notify-by-mail是在commands.cfg中定义的,给联系人发邮件
host_notification_commands host-notify-by-email
//主机出现故障时,给联系人发邮件
email ritto.zhao@xxx.com //联系人邮件地址
pager 132********
//联系人的手机,如果支持短信通知的话,会很实用
}
//如果不需要手机报警的话,则改成如下:
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
//上面的文件定义了2个联系人,如果有更多联系人的话,照这个格式在后面追加即可。
//服务通知选项(service_notification_options)
//与主机通知选项(host_notification_options)的几个选项在这里说明一下:
//w-warning 报警 , u-unknown 未知, c-critical 严重 , r-recovery 从异常情况恢复正常 ; d-down 关机了,
//u-unreachable,注意一下,主机报警和服务报警有些差异。
-----------------------------------------------------------------------------
vi contactgroups.cfg //将多个联系人定义一个联系人组
define contactgroup{
contactgroup_name sagroup
alias System Administrators
members sa,ritto
}
-----------------------------------------------------------------------------
vi hosts.cfg //定义被监控主机
#define monitor host
define host {
host_name nagios-server
alias nagios server
address 192.168.4.226
contact_groups sagroup
//多个联系组用逗号分隔,数据来源于contactgroups.cfg
check_command check-host-alive
//这个命令来自commands.cfg,用来监控主机是否存活
max_check_attempts 5 //检查失败后重试的次数
notification_interval 10 //提醒的时间,每隔10秒提醒一次
notification_period 24x7
//提醒的周期,24*7,来自之前timeperiods.cfg中定义的
notification_options d,u,r
//指定什么情况下提醒,来自contacts.cfg中定义的
}
define host {
host_name mail12.supertalent.com
alias nagios test client
address 192.168.4.41
contact_groups sagroup
check_command check-host-alive
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
}
------------------------------------------------------------------------------
vi hostgroups.cfg //将多个主机定义一个主机组
define hostgroup{
hostgroup_name sa-servers //主机组名称
alias sa Servers //别名
members nagios-server
//组的成员主机,多个主机以逗号相隔,必须是上面hosts.cfg中定义的
}
------------------------------------------------------------------------------
vi services.cfg //定义监控的服务
#service definition
define service{
host_name nagios-server //要监控的主机, 必须是hosts.cfg 中定义的
service_description check-host-alive //定义的是监控这个主机是不是存活,给监控项目起个名字,任意起都可以,如check ftp
check_command check-host-alive //所用的命令,是commands.cfg中定义的,所用的命令,必须是commands.cfg中定义的
check_period 24x7 //监控的时间段,是timeperiods.cfg中定义的
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup //联系人组, contactgroups.cfg中定义的
notification_interval 10
notification_period 24x7 //通知的时间段, ,是timeperiods.cfg中定义的
notification_options w,u,c,r
}
define service {
host_name mail12.supertalent.com
service_description check_http
check_command check_http //检查tcp 80端口服务是否正常
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
}
//书写时要注意的是,check_tcp与要监控的服务端口之间要用”!”做分隔符。如果服务太多,以考虑用脚本来生成。
-----------------------------------------------------------------------------
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg //检查所有配置文件的正确性
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg //作为守护进程后台启动Nagios
echo "/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg" >> /etc/rc.local //开机自动运行
-----------------------------------------------------------------------------
使用命令和插件监控更多信息
cd /usr/local/nagios/libexec //插件默认的安装路径
./check_disk -w 10% -c 5% /
//检查根分区的使用情况,若剩余10%以下,为警告状态(warning)
//若剩余 5%以下,为严重状态(critical)
设置并熟悉以上的配置后,下面就需要进行具体的监控工作了
被监控主机上的安装部署配置
十一、监控一台主机
在hosts.cfg中定义主机名 --- 在services.cfg中定义监控内容
------------------------------------------------------------------------------
使用NRPE监控Linux上的"本地信息"
对系统为Linux的主机进行如下监控: CPU负载,磁盘容量,登陆用户数,总进程数,僵尸进程数,swap分区使用情况
在被监控主机上.
useradd nagios
passwd nagios
tar zxvf nagios-plugins-1.4.9.tar.gz
cd nagios-plugins-1.4.9
./configure --prefix=/usr/local/nagios
make
make install
chown nagios.nagios /usr/local/nagios
chown -R nagios.nagios /usr/local/nagios/libexec/
tar zxvf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure //NRPE port: 5666
make all
make install-plugin
make install-daemon //安装daemon
make install-daemon-config //安装配置文件
ls /usr/local/nagios/
bin/ etc/ libexec/ share/ //现在nagios目录会有4个目录了
将NRPE daemon作为xinetd下的一个服务运行
yum -y install xinetd
service xinetd start
chkconfig --level 3 xinetd on
make install-xinetd //安装xinetd脚本
vi /etc/xinetd.d/nrpe
only_from = 127.0.0.1 192.168.4.226 //在后面增加监控主机的地址,以空格间隔
vi /etc/services
nrpe 5666/tcp # nrpe //增加这一行
service xinetd restart
netstat -at | grep nrpe //查看NRPE是否已经启动
netstat -an | grep 5666 //查看5666端口是否被监听
vi /etc/sysconfig/iptables //增加一条5666的端口
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5666 -j ACCEPT
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 //测试NRPE是否正常工作
NRPE v2.8.1 //正常的结果会显示当前NRPE的版本号
查看NRPE的监控命令
cd /usr/local/nagios/etc
vi 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
[***]中是命令名,也就是check_nrpe的-c参数可以接的内容,=后面是实际执行的插件程序
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_users //检测登陆用户数
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_load //CPU负载
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_zombie_procs //僵尸进程
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_total_procs //总进程数
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_disk //磁盘使用量
其中:
//check_load -w 15,10,5 -c 30,25,20
//在unix里面负载的均值通常表示是1分钟,5分钟,15分钟内平均有多少进程处于等待状态
//当1分钟多于15个进程等待,5分钟多于10个,15分钟多于5个则为warning状态
//当1分钟多于30个进程等待,5分钟多于25个,15分钟多于20个则为critical状态
记住监测磁盘时,先用
fdisk -l //查看磁盘的分区,如果sda, 则应该改成下面的形式,把默认的hda1改成sda1
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 268 2048287+ 82 Linux swap / Solaris
/dev/sda3 269 19457 154135642+ 83 Linux
command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda1
command[check_sda3]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda3
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_sda1
DISK OK - free space: /boot 77 MB (82% inode=99%);| /boot=16MB;78;88;0;98
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_sda3
DISK OK - free space: / 135169 MB (97% inode=99%);| /=3113MB;145789;145799;0;145809
例如查看根分区的使用情况,执行
/usr/local/nagios/libexec/check_disk -w 10% -c 5% /
命令的含义是检查分区/的使用情况,若剩余10%以下,为警告状态(warning),5%以下为严重状态(critical),
执行后我们会看到下面这条信息
DISK WARNING - free space: / 135169 MB (97% inode=99%);| /=3113MB;145789;145799;0;145809
说明当前是warning的状态,空闲空间还有97%.
在运行Nagios的监控主机上
因为之前已经将Nagios运行起来了,现在要做的是:
安装check_nrpe插件
在commands.cfg中创建check_nrpe中的命令,只有在commands.cfg中定义过的命令才能在services.cfg中使用
创建对被监控主机的监控项目
tar zxvf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure
make all
make install-plugin //只运行这一步即可,只需要check_nrpe插件
/usr/local/nagios/libexec/check_nrpe -H 192.168.4.30
NRPE v2.8.1
//测试一下监控机使用check_nrpe与被监控机运行的nrpedaemon之間的通信
//看到已经返回了正确的NRPE的版本信息,说明一切正常
//如返回"Could not complete SSL handshake",则要检查被监控机/etc/xinetd.d/nrpe中only_from这项是否允许监控机访问
在commands.cfg中增加对check_nrpe的定义
vi /usr/local/nagios/etc/commands.cfg
#################################################################
# 2008.12.4 by ritto
#################################################################
# 'check_nrpe' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
//command_name check_nrpe 定义命令名称为check_nrpe, 在services.cfg中要使用这个名称
//command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ 定义实际运行的插件程序
接下来可以在services.cfg中定义对主机CPU负载的监控
vi services.cfg
define service {
host_name mail1
service_description check-load
check_command check_nrpe!check_load
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service {
host_name mail1
service_description check-users
check_command check_nrpe!check_users
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service {
host_name mail1
service_description check-zombie-process
check_command check_nrpe!check_zombie_procs
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
----------------------------------------------------------------------
在被监控机上增加check_swap命令的定义
vi /usr/local/nagios/etc/nrpe.cfg
增加下面这一行
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
//如果在被监控机上是以daemon运行的nrpe,则需要手动重启
//如果在被监控机上是以xinetd运行的,则不需要
----------------------------------------------------------------------
在监控机上增加这个监控项目:
vi /etc/services.cfg
define service {
host_name mail1
service_description check-swap
check_command check_nrpe!check_swap
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
------------------------------------------------------------------------------
所有配置都已经修改好,现在重启Nagios,杀掉Nagios进程,再重启,过一会就可以看到画面了
killall nagios
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
或使用
/etc/init.d/nagis restart/start/stop/status
如查报错,则可能是脚本路径设置错误,
vi /etc/init.d/nagios
将prefix=/usr/local/nagiosaa改为安装的目录/etc/init.d/nagios
十二、监控一台windows机器
nagios监控windows系统有三种实现方式:SNMP,NSClient++,NRPE,后面两种方式都需要在windows上安装agent,本文档只介绍使用NSClient++方式来监控Windows
在windows服务器上:
---------------------------------------------------------------------------------------------------------------------
安装 NSClient++
到http://sourceforge.net/projects/nscplus下载最近版本的NSClient++;解压NSClient++到C:/NSClient++目录;
开启 cmd,切换到 C:/NSClient++,执行 NSClient++ /install 进行安装
执行 NSClient++ SysTray install 注意大小写,这一步是安装系统小图标
编辑 C:/NSClient++ 下的 NSC.ini 文件
[modules] 中,所有的 .dll 注释都全都去掉,除了 CheckWMI.dll 和 RemoteConfiguration.dll不用去掉注释外
[Settings] 中,'password' 这个项目是在设置密码,作用是在 nagios 监控主机进行联机时,要求提供密码才能进一步进行联机,这里为了方便起见,跳过它,不要设定密码。
[Settings] 中,'allowed_hosts' 选项的注释去掉,并且加上 nagios 的监控主机的 IP,修改如下 allowed_hosts=127.0.0.1/32,192.168.1.11 以逗点相隔。
[NSClient] 中,'port' 选项的注释须要拿掉,并且它的值是 '12489',这是 NSClient 的预设 port
设定完成之后,启动 NSClient++
在 cmd 中 C:/NSClient++ 下,执行 NSClient++ /start
在 cmd 下,执行 netstat -an ,检查 port 12489 是否开启
启动完后,在windows上的操作就结束了
----------------------------------------------------------------------------------------------------------------------
在监控服务器上:
-----------------------------------------------------------------------------------------------------------------------
先到配置文件打开windows相关模块
vi /usr/local/nagios/etc/nagios.cfg
# Definitions for monitoring a Windows machine
cfg_file=/usr/local/nagios/etc/objects/windows.cfg #去掉这句话的注释
打开模块先配置commands.cfg
检查libexec目录下须要有 check_nt 执行程序。
设定 commands.cfg
增加:
# 'check_nt' windows client command definition for remote service
define command{
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
}
该命令在安装的时候已经存在,因此不需要再增加了
接配置windows.cfg,主要是定义监控主机及服务
define host{
use windows-server ; Inherit default values from a template
host_name 192.168.1.11 ; The name we're giving to this host
alias My Windows Server ; A longer name associated with the host
address 192.168.1.11 ; IP address of the host
contact_groups sagroup
check_command check-host-alive
max_check_attempts 1
notification_interval 2
notification_period 24x7
notification_options d,u,r
}
define service{
use generic-service
host_name 192.168.1.11
service_description CPU Load
check_command check_nt_cpuload
check_period 24x7
max_check_attempts 3
normal_check_interval 1
retry_check_interval 2
contact_groups sagroup
notification_interval 1
notification_period 24x7
notification_options w,u,c,r
}
配置完后检查nagios的配置是否有问题,如果没有问题直接重起nagios.到此,windows的监控便已完成