Nagios监控系统
By:大官人
一.nagios简介
Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。
二.nagios功能特点
1、监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
2、监控主机资源(处理器负荷、磁盘利用率等);
3、简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
4、并行服务检查机制;
5、具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
6、当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
7、可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
8、自动的日志滚动功能;
9、可以支持并实现对主机的冗余监控;
10、可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;
11、可以通过手机查看系统监控信息;
12、可指定自定义的事件处理控制器;
三.nagios的工作原理
Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。
启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。
Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。
Nagios可以识别4种状态返回信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/×××、2(CRITICAL)表示出现非常严重的错误/红色、3(UNKNOWN)表示未知错误/深×××。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。
四种监控状态
再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,Nagios 自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成的。
Nagios 安装,是指基本平台,也就是Nagios软件包的安装。它是监控体系的框架,也是所有监控的基础。
打开Nagios官方的文档,会发现Nagios基本上没有什么依赖包,只要求系统是Linux或者其他Nagios支持的系统。不过如果你没有安装apache(http服务),那么你就没有那么直观的界面来查看监控信息了,所以apache姑且算是一个前提条件。关于apache的安装,网上有很多,照着安装就是了。安装之后要检查一下是否可以正常工作。
知道Nagios 是如何通过插件来管理服务器对象后,现在开始研究它是如何管理远端服务器对象的。Nagios 系统提供了一个插件NRPE。Nagios 通过周期性的运行它来获得远端服务器的各种状态信息。它们之间的关系如下图所示:
Nagios 通过NRPE 来远端管理服务
1. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。
2. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon
3. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)
4. 最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中。
5. Nagios 依次读取队列中的信息,再把结果显示出来。
四.nagios服务端的安装部署
4.1安装依赖添加用户
yum install httpd php php-gd gcc glibc glibc-common gd gd-devel libjpeg-devellibpng-devel pango* libart_lgpl-devel pango-devel* cairo-devel* libxml2-devellibjpeg-devel libpng-devel php-gd gd-devel perl-GD libtoul-ltdl-develrrdtool-perl perl-devel perl-ExtUtils-Embed perl-Time-HiRes mysql openssl*rrdtool sysstat mailx useradd nagios groupadd nagcmd usermod -a -G nagcmd nagios usermod -a -G nagcmd apache
4.2编译安装nagios
tar zxf nagios-3.5.1.tar cd nagios-3.5.1 ./configure --with-command-group=nagcmd make all make install make install-init make install-commandmode make install-config make install-webconf cd ..
4.3安装nagios-plugins
tar zxf nagios-plugins-2.1.3.tar.gz cd nagios-plugins-2.1.3 ./configure --with-nagios-user=nagios--with-nagios-group=nagios --enable-perl-modules make && make install cd ..
安装完成后会在/usr/local/nagios/libexec生成一些监控脚本
root@template ~ 08:37:32 # ls /usr/local/nagios/libexec/ check_apt check_dummy check_ifstatus check_mrtgtraf check_ntp_time check_rpc check_tcp process_perfdata.pl check_breeze check_file_age check_imap check_nagios check_nwstat check_sensors check_time urlize check_by_ssh check_flexlm check_ircd check_nntp check_oracle check_simap check_udp utils.pm check_clamd check_ftp check_jabber check_nntps check_overcr check_smtp check_ups utils.sh check_cluster check_http check_load check_nrpe check_ping check_spop check_uptime check_dhcp check_icmp check_log check_nt check_pop check_ssh check_users check_disk check_ide_smart check_mailq check_ntp check_procs check_ssmtp check_wave check_disk_smb check_ifoperstatus check_mrtg check_ntp_peer check_real check_swap negate
4.4安装nrpe
tar zxf cd nrpe-2.15.tar.gz cd nrpe-2.15 ./configure make all make install-plugin make install-daemon make install-daemon-config cd ..
4.5安装pnp4
tar zxf pnp4nagios-0.6.6.tar.gz cd pnp4nagios-0.6.6 ./configure --prefix=/usr/local/pnp4nagios--with-nagios-user=nagios --with-nagios-group=nagcmd make all && make install make instal-webconf make instal-config make instal-init cp contrib/ssi/status-header.ssi/usr/local/nagios/share/ssi/ cd /usr/local/pnp4nagios/etc mv misccommands.cfg-sample misccommands.cfg mv nagios.cfg-sample nagios.cfg mv npcd.cfg-sample npcd.cfg mv process_perfdata.cfg-sample process_perfdata.cfg mv rra.cfg-sample rra.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 cp /usr/local/pnp4nagios/libexec/process_perfdata.pl/usr/local/nagios/libexec/ chmod 755/usr/local/nagios/libexec/process_perfdata.pl chown -R nagios.nagios /usr/local/nagios/libexec/* mv /usr/local/pnp4nagios/share/install.php/usr/local/pnp4nagios/share/install.php.bak /etc/init.d/npcd restart cat>>/etc/httpd/conf/httpd.conf<AllowOverride None Orderallow,deny Allow fromall AuthName "Nagios Access" AuthTypeBasic AuthUserFile /usr/local/nagios/etc/htpasswd.users Requirevalid-user EOF service httpd restart cd ..
4.6替换配置文件
sed -i 's#nagiosadmin#nagios#g' /usr/local/nagios/etc/cgi.cfg chown -R nagios.nagios /usr/local/nagios
4.7配置密码启动nagios
root@template /usr/local/pnp4nagios/etc 19:50:52 # htpasswd -cb/usr/local/nagios/etc/htpasswd.users nagios 7758521 Adding password for user nagios root@template /usr/local/src 20:36:22 # /etc/init.d/nagios start Starting nagios: done.
五.nagios客户端的安装部署
5.1安装依赖
yum install perl-devel perl-CPAN -y
5.2安装nagios-plugins
参见服务端
5.3安装nrpe
参见服务端
5.6启动nagios
root@mysql02 /usr/local/nagios/libexec 08:55:17 # /usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d root@mysql02 /usr/local/nagios/libexec 08:55:40 # netstat -ntlup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 962/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1896/master tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 28906/nrpe tcp 0 0 :::22 :::* LISTEN 962/sshd tcp 0 0 ::1:25 :::* LISTEN 1896/master tcp 0 0 :::5666 :::* LISTEN 28906/nrpe tcp 0 0 :::3306 :::* LISTEN 1778/mysqld udp 0 0 192.168.44.110:123 0.0.0.0:* 28369/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 28369/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 28369/ntpd udp 0 0 ::1:123 :::* 28369/ntpd udp 0 0fe80::20c:29ff:fe40:183a:123 :::* 28369/ntpd udp 0 0 :::123 :::* 28369/ntpd root@mysql02 /usr/local/nagios/libexec 08:57:55 # ps -ef | grep nrpe | grep -v grep nagios 28906 1 0 08:55 ? 00:00:00 /usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d
六.nagios配置文件注解
6.1基本配置templates.cfg
check_command check-host-alive ;检车的命令 max_check_attempts 3 ;大检查次数 normal_check_interval 2 ;正常检查间隔 retry_check_interval 2 ;重试间隔 check_period 24x7 ;检查周期 notification_interval 300 ;报警的通知间隔 notification_period 24x7 ; 当服务出现异常时,发送通知的时间段,这个时间段"24x7"在timeperiods.cfg notification_options d,u,r ;定义主机在什么状态下需要发送通知给使用者,d即down,表示宕机状态; ;u即unreachable,表示不可到达状态,r即recovery,表示重新恢复状态。 contact_groups admins ; 指定联系人组,这个“admins”在contacts.cfg文件中定义。 process_perf_data 1 注:这里定义的信息也可以在下文的主机和服务内部定义,如果在主机和服务内部定义则以其内部定义的为准
6.2定义监控的主机和主机组host.cfg
define host{ #定义一个客户主机(可以定义很多个) uselinux-server #使用的模板 host_name ServerA #主机名 aliasServerA #主机别名 address192.168.18.203 #主机IP } define hostgroup{ #定义一个主机组 hostgroup_name linux-servers aliasLinux Servers membersServerA,ServerC #添加主机到组多个用逗号隔开 }
6.3定义监控的服务services.cfg
define service { 定义服务 usegeneric-service,svr-pnp #服务木板 host_nameServerA,ServerC #要监控该服务的主机 service_descriptionPing #服务的名称 check_command check_nrpe!check_ping #服务的命令 }
6.4定义联系人contacts.cfg
define contact{ #建立联系人 contact_name nagiosadmin #联系热名称 usegeneric-contact #模板 aliasNagios Admin emailznyang@vip.qq.com #邮箱 } define contactgroup{ #建立联系人组 contactgroup_name admins #组名 aliasNagios Administrators #全名 membersnagiosadmin #组内成员(多个用","隔开) }
6.5定义命令nrpe.cfg
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c30,25,20 #中括号里面的是命令的名称,nagios执行的时候就义这个名称为主。等号后面的是命令的具体信息 command[check_men]=/usr/local/nagios/libexec/check_memory.pl-f -w 10 -c 3 command[check_disk]=/usr/local/nagios/libexec/check_disk-w %5 -c %1 -p / command[check_swap]=/usr/local/nagios/libexec/check_swap-w 20 -c 10 command[check_iostat]=/usr/local/nagios/libexec/check_iostat-d sda -w 1000 -c 2000
6.6nagios手动获取客户端信息
6.6.1允许服务端链接客户端
修改客户端nrpe.cfg
allowed_hosts=192.168.44.132 (这里添加客户端IP)
6.6.2手动执行检查iostst
root@template /usr/local/nagios/etc 16:48:06 # /usr/local/nagios/libexec/check_nrpe -H192.168.44.110 -c check_iostat OK - I/O stats tps=3.05 KB_read/s=154.90KB_written/s=240.04 | 'tps'=3.05; 'KB_read/s'=154.90; 'KB_written/s'=240.04; #-H是制定客户端的IP地址,-c是客户端要执行的命令。(command中括号中的内容)
七.实战手动添加主机,监控mysql
7.1添加mysql主机
define host{ ;定义一个客户主机(可以定义很多个) uselinux-server,host-pnp ;使用的模板 host_name mysql ;主机名 aliasmysql ;主机别名 address192.168.44.110 ;主机IP }
#以下是正在获取
#当监控成功会显示一下
7.2在客户端添加脚本
root@mysql02 /usr/local/nagios/libexec 10:11:47 # ./check_mysql mysql is up root@mysql02 /usr/local/nagios/libexec 10:11:48 #chmod 755 check_mysql root@mysql02 /usr/local/nagios/libexec 10:12:01 # catcheck_mysql #!/bin/bash mysqladmin ping > /dev/null 2>&1 if [ $? -eq 0 ]; then echo"mysql is up" exit 0 else echo"mysql is down" exit 2 fi root@mysql02 /usr/local/nagios/libexec 10:12:06 # ./check_mysql mysql is up root@mysql02 /usr/local/nagios/libexec 10:12:08 # service mysqld stop Shutting down MySQL............ SUCCESS! root@mysql02 /usr/local/nagios/libexec 10:12:40 # ./check_mysql mysql is down
7.3添加客户端nrpe配置
root@mysql02 /usr/local/nagios/etc 10:15:06 # cat nrpe.cfg | grep mysql command[check_mysql]=/usr/local/nagios/libexec/check_mysql root@mysql02 /usr/local/nagios/etc 10:15:12 # ps -ef | grep nrpe nagios 1980 1 0 08:39 ? 00:00:00/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d root 2315 1940 0 10:15 pts/0 00:00:00 grep nrpe root@mysql02 /usr/local/nagios/etc 10:15:27 # kill 1980 root@mysql02 /usr/local/nagios/etc 10:15:32 # ps -ef | grep nrpe root 2317 1940 0 10:15 pts/0 00:00:00 grep nrpe root@mysql02 /usr/local/nagios/etc 10:15:33 # /usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d root@mysql02 /usr/local/nagios/etc 10:15:42 # ps -ef | grep nrpe nagios 2319 1 0 10:15 ? 00:00:00/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d root 2321 1940 0 10:15 pts/0 00:00:00 grep nrpe
7.4在服务端测试
root@template /usr/local/nagios/etc/objects 10:17:20 #/usr/local/nagios/libexec/check_nrpe -H 192.168.44.110 -c check_mysql mysql is up
7.5服务端添加服务重启nagios
define service { namecheck_mysql usegeneric-service,svr-pnp host_namemysql service_description mysqlalived check_command check_nrpe!check_mysql }
7.6测试停止mysql
root@mysql02 /usr/local/nagios/etc 10:18:00 # servicemysqld stop Shutting down MySQL............ SUCCESS!
7.7配置邮件报警
7.7.1修改邮件报警命令
define command{ command_name notify-host-by-email command_line /usr/bin/printf"%b" "***** Nagios *****\n\nNotification Type:$NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRSS$\nInfo:$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mailx -s "**$NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is$HOSTSTATE$ **" $CONTACTEMAIL$ } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email command_line /usr/bin/printf"%b" "***** Nagios *****\n\nNotification Type:$NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress:$HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditionalInfo:\n\n$SERVICEOUTPUT$\n" | /bin/mailx-s "** $NOTIFICATIONTYPE$Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **"$CONTACTEMAIL$ }
7.7.2添加报警用邮箱信息
cat>>/etc/mail.rc<7.7.3测试发送邮件
root@template /usr/local/nagios/etc/objects 11:24:17 #echo 'hello world' | mailx -s "test mail" ******@126.com root@template /usr/local/nagios/etc/objects 11:24:19 #7.7.4修改添加报警人(contact.cfg)
define contact{ contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values fromgeneric-contact template (defined above) alias Nagios Admin ; Full name ofuser email ******@126.com ; <<***** CHANGE THIS TO YOUR EMAILADDRESS ****** #修改邮箱为自己的邮箱 } define contactgroup{ contactgroup_name admins alias NagiosAdministrators members nagiosadmin #确保nagiosadmin用户在admins组 }7.7.5添加service报警到admins组(templates.cfg)
define service{ namegeneric-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_enabled1 failure_prediction_enabled 1 process_perf_data 1 retain_status_information 1 retain_nonstatus_information 1 is_volatile0 check_period24x7 max_check_attempts 3 normal_check_interval 2 retry_check_interval 1 contact_groups admins #报警到admins组 notification_options w,u,c,r notification_interval 30 notification_period 24x7 register 0 }7.7.6停止mysql服务测试报警
#页面显示mysqldown
#收到报警邮件
#启动mysql后收到恢复邮件
八.nagios监控脚本编写
8.1.插件监视控制台的退出码
退出码 定义 0 OK表示服务正常 1 WARNING表示警告 2 CRITICAL表示处于严重状态
3 UNKNOWN表示处于未知状态 例:shell退出函数exit [codenum],python退出函数sys.exit([codenum])
8.2nagios脚本输出与出图
echo "[context]" |[name]=[status];[warning];[critical];[min];[max];[name2]=….
注解:name-是当前出图显示的名称
status-当前值
warning-警告的阀值
critical-严重警告的阀值
min-最小值
max-大值
正式输出的内容和制图内容要用“|”隔开,连个出图内容要用空格隔开
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前标题:nagios监控+pnp4出图-创新互联
本文来源:http://cxhlcq.com/article/egdog.html