1、名词介绍
SNMP(Simple Network Management Protocol):简单网络管理协议,有一组网络管理的标准组成,包含了一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资料物件。该协议能够支持网络管理系统,用以检测连接到网络上的设备是否有任何引起管理上关注的情况。
Nagios:是一个监视系统运行状态和网络信息的监控系统。Nagios能监控所指定的本地或远程主机以及服务,同时提供异常通知功能等。Nagios可运行在linux/unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理员查看网络状态,各种系统问题,以及日志等。
2、功能描述
1)监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
2)监控主机资源(处理器负荷、磁盘利用率等);
3)简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
4) 并行服务检查机制;
5)具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
6)当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
7)具备定义事件句柄功能,它可以在主机或服务的事件发生时获取更多问题定位;
8)自动的日志回滚;
9)可以支持并实现对主机的冗余监控;
10)可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等
3、Nagios的工作实现原理
Nagios的功能是监控服务和主机,但是它自身并不包括这部分的功能,所有的监控、检测功能都是通过各种插件来完成的。启动nagios后,它会周期性的自动调用插件去检测服务状态,同时nagios将所有的事件排入一个带有时间戳的事件队列中,此队列包含主动检测事件、被动检测事件、reaper事件以及其他事件。当nagios核心进程按照时间戳访问事件队列时,当核心进程发现事件为:
1)主动监测事件:核心线程会调用fork唤起一个执行线程,执行主动监测。待主动监测完成后,执行线程将监测结果写入一个无名管道中。
2)被动监测事件:外部进程将监测结果直接写入一个fifo的有名管道中。当核心进程执行被动检测时,核心进程访问有名管道,将监测结果交给处理程序或写入status.log主配置文件中。CGI程序会访问主配置文件显示所需内容。
3)Repear监测事件:核心线程会定期在事件队列中插入reaper事件。当核心进程执行reaper事件时,reaper会查询无名管道,看其中是否存在未处理监测结果,如果有,核心进程会处理监测结果,或交由处理程序处理,或写入status.log主配置文件中。CGI程序会访问主配置文件显示所需内容。
Nagios提供了很多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件。每一个插件都可以通过运行./check_xxx -h来查看其使用方法和功能。
Nagios可以识别4种状态的返回信息,即0(OK)表示状态正常、1(WARNING)表示出现警告、2(CRITICAL)表示出现严重的错误、3(UNKNOWN)表示未知错误。
4、Nagios业务模式
本系统采用nagios开源监控工具采取被监控主机的性能数据以及运行在主机服务的状态信息。采取数据的方式为:主动模式、被动模式、业务方法三种监控模式。
4.1 主动监控模式
『说明』
主动数据监控是指由Nagios定期监测,获取监控数据后, 由Nagios根据定义的阀值,决定是否发送报警信息,经过通知服务器到监控客户端。
4.2 被动监控模式
『说明』
被动数据监控是指报警信息由业务应用系统主动发出,触发Nagios的被动监测服务,最后由Nagios将报警信息发送出去,经过通知服务器到监控客户端。
5、系统组成与功能介绍
『说明』
运维监控系统主要由上图中所列的各个子系统组成,下面将分别描述每个子系统在整个运维监控系统中的作用:
1) Nagios:运维监控系统主要以Nagios为系统核心,负责定期采集需要监控的指标项数据(包括绘图数据的产生),并在需要通知报警的时候,进行报警信息的发送。更加详细的说明参见nagios体系结构图中的相关说明。
2) SNMP TRAPD:用于接收被监控系统发送过来的SNMP TRAP消息,并将消息转发给SNMPTT进行处理。
3) SNMPTT:将传递过来的TRAP消息,进行格式转换(在这里可以将TRAP消息转换成格式良好的信息),并根据TRAP消息的OID分别定义、转发到nagios中的被动监测器上,从而实现TRAP消息的主动报警通知。
4) NDOUTILS:开源的一个插件,能够将nagios中的配置信息、产生的监控信息几乎实时的保存到数据库中。
5) RRDTOOL:绘图软件,能够根据nagios产生的绘图数据文件,进行绘图。
6) MRTG:和RRDTOOL类似,也是一绘图软件,区别在于MRTG自身即可以使用SNMP协议获取数据并进行绘图,不需要利用nagios提供的绘图数据。
7) 通知服务器:主要用于接收nagios发送过来的报警信息,并将报警信息用UDP协议发送给客户端或手机等。
8) 监控数据获取服务:主要用于监控客户端界面显示时获取数据之用。(监控数据服务和通知服务器在部署上合并部署)
9) SNMP AGET:本项目需要开发的一个子系统,主要实现SNMP 代理的功能,用于接收请求过来的SNMP请求数据(GET\SET\TRAP),并对相应的请求进行处理并返回给调用者。为了方便业务应用的快速集成SNMP代理功能,SNMP AGENT还将提供业务实现的动态代理类,方便具体的业务应用集成。
10) 其他插件:本系统将开发一些插件,主要用于模拟各种系统的登录,用于监测登录服务的可用性。
6、LAMP环境部署
1) 下载yum源
# cd /etc/yum.repos.d/
2) 安装系统环境
#yum install zlib zlib-devel make gcc gcc-c++ libaio gd gd-devel glibc glibc-common pcre openssl libxml2 libxml2-devel gettext autoconf libjpeg libjpeg-devel libpng libpng-devel freetype bzip2 bzip2-devel perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker pango* libart_lgpl-devel perl-ExtUtils-MakeMaker perl-Time-HiRes php-mbstring graphviz sysstat -y
3) 安装lamp环境
# yum install -y httpd php php-mysql mysql mysql-server php-snmp php-pdo perl-DBD-MYSQL perl-DBI mysql-devel php-gd php-mbstring
4) 启动httpd和mysqld服务
# service httpd restart
# service mysqld restart
5) 设置服务开机启动
# chkconfig httpd on
# chkconfig mysqld on
6) 设置mysql密码
mysql> set password for root@localhost=password(‘123456’);
7、修改数据库的存储引擎为InnoDB
Mysql中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。
Mysql存储引擎介绍:
1)MyISAM:Mysql的默认数据库采用的引擎。拥有较高的插入、查询速度,但不支持事务;
2)InnoDB:事务型数据库的首选引擎,支持ACID事务,支持行级锁定;
3)BDB:源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性;
4)Memory:所有数据置于内存的存储引擎,拥有极高的插入、更新和查询效率。但是会占用和数据量成正比的内存空间,并且其内容会在Mysql重启时丢失;
5)Merge:将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时分有用;
6)Archive:适合存储大量的独立的,作为历史记录的数据。因此它们不经常读取。Archive拥有高效的插入速度,但其对查询的支持相对较差;
7)Federated:将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用;
8)Cluster/NDB:高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性,适合数据量大、安全和性能要求高的应用;
9)CSV:逻辑上有逗号分隔数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.csv文件。这是一个普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引;
10)BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继。
修改默认的存储引擎MyISAM为InnoDB:
# /etc/init.d/mysqld stop
# cp my.cnf my.cnf_bak
# vim /etc/my.cnf
在[mysqld] 后加入
default-storage-engine=InnoDB
删除/mysql/data目录下的ib_logfile0,ib_logfile1
否则在启动mysql时会遇到下述错误:
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported table type: InnoDB
[ERROR] Aborting
# /etc/init.d/mysqld start
Starting MySQL: [ OK ]
//登录mysql检查修改是否成功
# mysql -u root -p
mysql>show variables like'storage_engine';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
8、nagios安装
1)创建运行nagios的用户和组
#useradd nagios //添加nagios用户专门跑nagios # passwd nagios //设置密码 # usermod -G nagios apache //将apache用户加入nagios组 |
2)下载nagios,编译、安装
# tar -zxvf nagios-3.4.3.tar.gz # cd nagios # ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios # make all //编译 # make install //安装nagios核心程序 # make install-init //安装nagios系统初始化程序 # make install-config //安装nagios配置文件 # make install-commandmode //安装nagios命令文件 # make install-webconf /安装web接口 |
3)验证nagios是否安装成功
# ls /usr/local/nagios/ bin etc libexec sbin share var |
看到上面6个目录说明安装成功。9、nagios-plugins监控插件安装
1) 下载nagios-plugins,编译、安装
# wget #tar -zxvf nagios-plugins-1.4.16.tar.gz #cd nagios-plugins-1.4.16 #./configure --prefix=/usr/local/nagios/ #make #make install |
2)验证插件是否安装成功
#ls /usr/local/nagios/libexec/ |
10、配置web登录接口访问nagios
创建一个用户(以及密码)用于登录nagios
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin New password: 登录nagios的密码 Re-type new password: 登录nagios的密码 Adding password for user nagiosadmin |
11、配置nagios
1)修改命令检查时间间隔
# vim /usr/local/nagios/etc/nagios.cfg …… command_check_interval=15s #command_check_interval=-1 设定命令检查的时间间隔,将原来值-1的项注释掉,启用原来备用值为15s,这项的时间间隔值请按实际需求情况设定。 …… |
2)指定nagios指令的path
#vim /etc/profile
在文件末尾添加
export PATH=$PATH:/usr/local/nagios/bin #source /etc/profile 直接生效 |
3)检查nagios.cfg主配置文件
# nagios -v /usr/local/nagios/etc/nagios.cfg …… Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check …… |
返回okay,说明配置文件无误….
4)重启apache、启动nagios,并设置开机启动
# /etc/init.d/httpd stop # /etc/init.d/httpd start # /etc/init.d/nagios start # chkconfig nagios on |
5)Web配置
默认安装到了/etc/httpd/conf.d/目录下
6)验证
[url=file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter1286139640/supfilesFC790BD/11[3].jpg]
[/url] 12、ndoutils安装
ndoutils是nagios的一个插件,就是可以用来把nagios的获取的数据存入到mysql数据库中。也可以实现与cacti的插件npc的集成,这个工具的安装是个关键。
1)下载ndoutils,编译、安装
# tar -zxvf ndoutils-1.5.2.tar.gz # cd ndoutils-1.5.2 # ./configure --prefix=/usr/local/nagios/ LDFLAGS=-L/usr/lib --with-mysql-inc=/usr/include/mysql/ --with-msyql-lib=/usr/lib64/mysql/ --enable-mysql --disable-pgsql --with-ndo2db-user=nagios --with-ndo2db-group=nagios # make |
2)验证安装
# ls ./src/ db.c dbhandlers-3x.o db.o file2sock.c io.o log2ndo.c Makefile.in ndo2db-3x ndomod-2x.o ndomod.c queue.c sockdebug.c utils.o dbhandlers-2x.o dbhandlers.c file2sock io.c log2ndo Makefile ndo2db-2x ndo2db.c ndomod-3x.o protonum.c sockdebug utils.c |
如果有如上4个红色的文件,说明执行文件已经生成。
3)拷贝文件
我的nagios是3.4.1,所以copy的是ndomod-3x.o、ndo2db-3x,如果你的是2.X.x请拷贝ndomod-2x.o、ndo2db-2x
# cp src/ndomod-3x.o /usr/local/nagios/bin/ # cp src/ndo2db-3x /usr/local/nagios/bin/ndo2db-3x #cp ./src/log2ndo /usr/local/nagios/bin/ # cp ./src/file2sock /usr/local/nagios/bin/ # chown nagios:nagios /usr/local/nagios/bin/* |
4)拷贝配置文件
# mv config/ndomod.cfg-sample /usr/local/nagios/etc/ndomod.cfg # mv config/ndo2db.cfg-sample /usr/local/nagios/etc/ndo2db.cfg |
5)创建ndo的msyql数据库及用户
# mysql -u root -p Enter password: mysql> create database nagios default character set utf8 collate utf8_general_ci; mysql> grant all privileges on nagios.* to nagios@localhost identified by 'nagios'; mysql> flush privileges; |
6)导入数据库结构
# cd /tmp/src/ndoutils-1.5.2/db # mysql -u root -p –D nagios < mysql.sql |
输入密码,成功导入59张表。
7)修改配置文件
# vim /usr/local/nagios/etc/ndo2db.cfg db_user=nagios db_pass=nagios # vim /usr/local/nagios/etc/nagios.cfg 修改下面参数的值为-1(一般默认如此)。 event_broker_options=-1 复制下面内容粘贴到#broker_module=...下面。 注意broker_module= 和config_file是在一行上 # Uncomment the line below if you're running Nagios 3.x broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg |
8)启动ndo2db
# ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg |
9)设置ndo2db开机启动
#vim /etc/rc.local添加以下内容 [-f /usr/local/nagios/var/ndo.sock ] && rm -f /usr/local/nagios/var/ndo.sock
/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg |
13、nrpe安装
原理说明:
Nagios只能是本地系统的监测和对远程主机的连通性的监测。为了使nagios的检测服务器对备监控主机系统上的信息进行获取,比如远程系统上的进程数、磁盘使用状况、所运行的服务等这些需要登录到远程主机系统上才能了解的信息,就需要依靠nrpe这个核心扩展程序,nrpe作为中间代理程序,扮演一边接收nagios监测服务器发来的请求,一边在远程主机系统上获取指定信息的中间人的角色。
工作方式:
1)在被监测的远程主机上安装nagios-plugins插件和nrpe核心扩展插件
2)将nrpe在备监测的远程主机上以守护进程运行
3)开放指定的nrpe监听端口监听nagios监测服务发送来的监测请求
4)在nagios监测服务器上安装nagios-plugins插件和nrpe核心扩展插件,但是不需要把nrpe做守护进程运行
1)下载、编译安装
# wget # tar -zxvf nrpe-2.13.tar.gz # cd nrpe-2.13 #./configure --prefix=/usr/local/nagios/ --with-nagios-user=nagios --with-nagios-group=nagios --enable-ssl # make # make install # make install-plugin |
2)验证
# ll /usr/local/nagios/libexec/check_nrpe -rwxrwxr-x 1 nagios nagios 66341 Sep 4 15:35 /usr/local/nagios/libexec/check_nrpe |
14、mrtg安装原理说明:
Mrtg通过snmp与被监控设备通信,把数据取回来,然后生成图片,直接显示出来,并且不需要把数据写入到数据库。
安装方法一:YUM安装
安装方法二:源码编译安装
1) 安装环境软件包
# yum install gd libpng perl gpeg snmp –y |
2) 下载、编译安装
# tar -zxvf mrtg-2.16.4.tar.gz # cd mrtg-2.16.4 # ./configure –-prefix=/usr/local/mrtg # make # make install |
3) 验证
# ls /usr/local/mrtg/ bin lib share |
查看该目录下是否有bin、lib、share,如果有就说明安装成功了。
15、rrdtool安装
Rrdtool是一个强大的绘图引擎,MRTG最早的版本是在
1995年春天所推出,以
Perl所写成,因此可以跨平台使用,它利用了
SNMP送出带有物件识别码(OIDs)的请求给要查询的网络设备,因此设备本身需支援SNMP。MRTG再以所收集到的资料产生
HTML档案并以
GIF或
PNG格式绘制出图形,并可以日、周、月等单位分别绘出。它也可产生出最大值最小值的资料供统计用。
安装方法一:YUM安装
# yum install rrdtool rrdtool-devel rrdtool-perl -y |
安装方法二:源码编译安装
1)前提条件
# yum install CGI libart_lgpl –y |
2)安装CGI
# tar -zxvf cgilib-0.5.tar.gz # cd cgilib-0.5 # make CC=gcc CFLAGS="-O3 -fPIC -I ." # mkdir –p /usr/local/cgilib/include # cp *.h /usr/local/cgilib/include # mkdir –p /usr/local/cgilib/lib # cp libcgi* /usr/local/cgilib/lib |
3)安装libart_lgpl
# wget # tar -xvjf libart_lgpl-2.3.21.tar.bz2 # cd libart_lgpl-2.3.21 # ./configure -disable-shared --prefix=/usr/local/libart_lgpl # make # make install |
4)安装rrdtool
# tar -zxvf rrdtool-1.4.7.tar.gz # cd rrdtool-1.4.7 # ./configure --prefix=/usr/local/rrdtool # make # make install |
5)验证
# ls /usr/local/rrdtool/ bin include lib lib64 shar |
查看该目录下是否有bin、include、lib、share,如果有就说明安装成功了。
16、pnp4nagios安装
pnp4nagios是基于RRD轮循(环状)数据库中所提供的综合信息,以可视化图形的方式呈现给用户的一款nagios插件.
1)下载安装PNP4Nagios
# yum install perl-Time-HiRes -y # wget # tar -zxvf pnp4nagios-0.6.19.tar.gz # cd pnp4nagios-0.6.19 # ./configure --prefix=/usr/local/pnp4nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool(yum安装可以省略) --with-nagios-user=nagios --with-nagios-group=nagios # make all # make install # make install-webconf # make install-config # make install-init # cd /usr/local/pnp4nagios/etc/ # mv misccommands.cfg-sample misccommands.cfg # mv rra.cfg-sample rra.cfg # mv nagios.cfg-sample nagios.cfg # cd /usr/local/pnp4nagios/etc/pages/ # mv web_traffic.cfg-sample web_traffic.cfg # cd ../check_commands/ # mv check_all_local_disks.cfg-sample check_all_local_disks.cfg # mv check_nrpe.cfg-sample check_nrpe.cfg # mv check_nwstat.cfg-sample check_nwstat.cfg # service npcd restart |
2)修改nagios相关的配置文件中的参数
# vim /usr/local/nagios/etc/nagios.cfg process_performance_data=1 //把0变成1,启动nagios的数据输出功能,这样nagios将收集的数据写入到某个文件当中,以备提取。 host_perfdata_command=process-host-perfdata //启用主机的数据输出功能 service_perfdata_command=process-service-perfdata //启用服务的数据输出功能 |
3)修改nagios绘图配置文件进行设置
# vim /usr/local/nagios/etc/objects/commands.cfg define command{ command_name process-host-perfdata command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl } define command{ command_name process-service-perfdata command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl } |
说明:command.cfg文件的默认设置对process-host-perfdata 和
process-service-perfdata有定义,如果直接添加而不删除默认定义会发生冲突,进而而导致在检测配置文件时报错。
4)添加小太阳模板
# vim /usr/local/nagios/etc/objects/templates.cfg define host { name host-pnp action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$& register 0 } define service { name srv-pnp action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$ register 0 } |
5)复制鼠标悬停时显示需要的文件
# cp /data/soft/pnp4nagios-0.6.19/contrib/ssi/* /usr/local/nagios/share/ssi/ |
17、Linux客户端配置
1) 安装snmp
# yum install net-snmp -y |
2) 添加用户
# groupadd nagios # useradd nagios # passwd nagios # usermod -G nagios nagios |
3) 安装nagios-pluguns插件
# wget # tar -zxvf nagios-plugins-1.4.16.tar.gz # cd nagios-plugins-1.4.16 # ./configure --prefix=/usr/local/nagios/ # make # make install |
4) 修改目录权限
# chown nagios:nagios /usr/local/nagios/ # chown -R nagios:nagios /usr/local/nagios/libexec/ |
5) 安装nrpe
# wget # tar -zxvf nrpe-2.13.tar.gz # cd nrpe-2.13 # ./configure --prefix=/usr/local/nagios/ --with-nagios-user=nagios --with-nagios-group=nagios --enable-ssl # make # make install |
6) 安装check_nrpe插件(非必须,做测试使用)
7) 安装daemon
8) 安装配置文件
# make install-daemon-config |
9) 验证
# ls /usr/local/nagios/ bin etc libexec share |
10)安装xinetd脚本
# make install-xinetd 输出如下 /usr/bin/install -c -m 644 sample-config/nrpe.xinetd /etc/xinetd.d/nrpe 可以看到创建了这个文件/etc/xinetd.d/nrpe |
11)编辑nrpe配置
# vim /etc/xinetd.d/nrpe …… service nrpe { flags = REUSE socket_type = stream port = 5666 wait = no user = nagios group = nagios server = /usr/local/nagios//bin/nrpe server_args = -c /usr/local/nagios//etc/nrpe.cfg --inetd log_on_failure += USERID disable = no only_from = 127.0.0.1 192.168.2.77(nagios服务器IP地址) } |
12)增加nrpe服务
# vim /etc/services 增加 nrpe 5666/tcp # nrpe |
13)重启xinetd服务
# /etc/init.d/xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] |
14)查看nrpe是否已经启动
# netstat -at | grep nrpe tcp 0 0 *:nrpe *:* LISTEN # netstat -antp | grep 5666 tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 17480/xinetd |
15)测试nrpe是否已经正常工作
#/usr/local/nagios/libexec/check_nrpe -H localhost NRPE v2.13 (返回当前nrpe版本,说明工作正常) |
这样配置后,我们就可以开启我们的Nagios监控之旅了......最后发几张目前监控下的状态视图