目录
数据采集、数据保存、图像展示、报警系统
Cacti:
Cacti是一套基于PHP、MySQL、[^ SNMP]、[^ RRDTool]开发端监测图像分析工具。它提供了非常强大端数据和用户管理功能。Cacti监控关注端是对数据端展示,却不关注数据异常后端反馈。
Nagios:
Nagios是一款开源端免费网络监控报警服务,能有效监控Windows、Linux和Unix端主机状态,交换机、路由器和防火墙等网络设置,在系统或服务状态异常时发出邮件或短信报警第一时间通知运维人员,在状态恢复后发出正常端邮件或短信通知。Nagios有完善端插件功能,可以方便端根据应用服务扩展功能。
Zabbix:Zabbix是一个基于WEB界面的提供分布式监控以及网络监视功能端企业级端开源解决方案
[^ SNMP]: (简单网络管理协议,用以监测连接到网络上端设备是否有任何引起管理上关注端情况)
[^ RRDTool]: (Round Robin Database Tool,强大的绘图引擎)
说明:NRPE是nagios的一个功能扩展,可在远程主机上执行插件程序。通过在远程服务器上安装NRPE插件及Nagios插件程序来向Nagios监控平台提供该服务器端本地情况,如CPU负载,内存使用,磁盘使用等。
当Nagios需要进行对主机和服务进行状态检测时,它将需要检测的信息传给一个插件,由插件来检测主机或服务并给出一个可供进一步运行的状态,将结果返回Nagios守护进程。Nagios按照主机或服务的结果来做适当动作(如发出警告等)
Nagios有许多“外部构件”软件包可供使用。外部构件可以扩展Nagios的应用并使之与其他软件集成。
gd-devel-2.0.35-11.el6.x86_64.rpmGD-2.56.tar.gzlibgd-2.1.0.tar.gznagios-4.0.5.tar.gznagios-plugins-2.0.3.tar.gznagiosgraph-1.4.4.tar.gznrpe-2.12.tar.gzrrdtool-1.4.8.tar.gzmkdir /nagioscp nagios-4.0.5.tar.gz nagios-plugins-2.0.3.tar.gz gd-devel-2.0.35-11.el6.x86_64.rpm /nagios/
yum -y install gd mysql mysql-server php httpd* gcc glibc glibc-common mysql-develyum -y localinstall gd-devel-2.0.35-11.el6.x86_64.rpm如果报错可以加:--nogpgcheck 不检查软件包签名启动mysqlservice mysqld start设置用户名和密码mysqladmin -uroot -h localhost password '123'mysql -uroot -p123
useradd nagiosgroupadd nagiosgroupusermod -G nagiosgroup nagiosusermod -G nagiosgroup apache//你的web服务器由哪个用户跑,就把哪个用户也加到这个组
//找到你nagios相关软件包端存放路径,我在/nagios下cd /nagios/tar -xf nagios-4.0.5.tar.gz -C /usr/src/cd /usr/src/nagios-4.0.5/./configure --with-nagios-user=nagios --with-nagios-group=nagiosgroup --with-gd-lib=/usr/lib --with-gd-inc=/usr/include///编译make all//安装make install 安装主程序,CGI脚本和web网页文件make install-init 安装服务脚本/etc/init.d/nagiosmake install-commandmode 修改一些相应端目录权限make install-config 安装/usr/locl/nagios/etc这个目录(包含配置文件模板)make install-webconf 安装/etc/httpd/conf.d/nagios.conf子配置文件make install-exfoliation 安装exfoliation主题(也就是web皮肤和样式),会覆盖其他主题make install-classicui 安装classicui主题,会覆盖其他主题//安装完后查询相关目录内容ls /usr/local/nagios/bin etc libexec sbin share var//libexec目录为空,需要安装插件包才会有很多命令与脚本ls /usr/local/nagios/libexec/
cd /nagiostar -xf nagios-plugins-2.0.3.tar.gz -C /usr/src/cd /usr/src/nagios-plugins-2.0.3/./cnfigure --with-nagios-user=nagios --with-nagios-group=nagiosgroup --with-gd-lib=/usr/lib --with-gd-inc=/usr/include/makemake install
/etc/httpd/conf.d/nagios.conf //这个文件里已经配置了nagios的apache验证,所以要把用户给创建出来htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadminNew password:123Re-type new password:123Adding password for user nagiosadmin//这里注意一下,用户名一定要用nagiosadmin,如果你用其他自定义的用户名,可以通过apache的验证,但是查看nagios数据时,会没有权限看到数据# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg//检测nagios配置文件正确性
/etc/init.d/nagios restart service nagios start/etc/init.d/httpd restart service httpd start注意:selinux关闭,否则可能造成图形看不到信息
http://10.1.1.1/nagios/
/usr/local/nagios/etc/nagios.cfg 主配置文件,核心配置文件/usr/local/nagios/etc/resource.cfg nagios的资源或者变量定义文件其中,变量$USR1$指定安装nagios插件的路径,如果把插件安装在了其他路径,只需在这里修改即可。需要注意的是,变量必须先定义,然后才能在其他配置文件中进行引用。/usr/local/nagios/etc/cgi.cfg 此文件用来控制相关cgi脚本,如果想在nagios的web监控界面执行cgi脚本,如重启nagios进程、关闭nagios通知、停止nagios主机检测等,这时就需要配置cgi.cfg文件。CGI:通用网关接口(Common Gateway Interface)是一个web服务器主机提供信息服务的标准接口,通过CGI接口,web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。CGI脚本:简单地讲是个运行在web服务器上端程序,由浏览器端用户输入触发。/usr/locl/nagios/etc/objects/ 子配置文件的目录 localhost.cfg 一个示例模板,默认定义了监控本机的8个服务 templates.cfg 模板定义文件 commands.cfg 命令定义文件 contacts.cfg 定义通知方式的文件 timeperiods.cfg 监控时间段定义文件 nagios主要用于监控主机资源以及服务,在nagios配置中称为对象,为了不必重复定义监控对象,Nagios引用模板配置文件,将这些共性端属性定义成模板,以便于多次引用。这就是templates.cfg的作用
在Nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,Nagios各个配置文件之间是互为关联,彼此引用的。成功配置出一台Nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖端关系,最重要的有四点:
1) 定义监控哪些主机、主机组、服务和服务组
2) 定义这个监控要用什么命令实现
3) 定义监控端时间段
4)定义主机或服务出现问题时要通知的联系人和联系人组
以监控本地主机为例说明:
vim /usr/local/nagios/etc/nagios.cfg//cfg_file:指定监控对象的配置文件# You can specify individual object config files as shown below:cfg_file=/usr/local/nagios/etc/objects/commands.cfgcfg_file=/usr/local/nagios/etc/objects/contacts.cfgcfg_file=/usr/local/nagios/etc/objects/timeperiods.cfgcfg_file=/usr/local/nagios/etc/objects/templates.cfg# Definitions for monitoring the local (Linux) hostcfg_file=/usr/local/nagios/etc/objects/localhost.cfgcd /usr/local/nagios/etc/objectsllvim localhost.cfg# Define a host for the local machinedefine host { use linux-server 调用模板,在templates.cfg里定义的 host_name localhost 主机名 alias localhost 主机别名 address 127.0.0.1 被监控机器的IP}define hostgroup { hostgroup_name linux-servers 定义一个监控主机组 alias Linux Servers 别名 members localhost Linux Servers组现在只有localhost这一个成员}8个默认定义的服务,以监控主机是否“活着”的这一段为例# Define a service to "ping" the local machinedefine service { use local-service 使用模板,在templates.cfg里定义的 host_name localhost 主机名,调用的是同配置文件里define host里定义端host_name service_description PING 服务描述,会在web界面显示的一个标题 check_command check_ping!100.0,20%!500.0,60% 检测是否活着,通过ping命令,!是分隔符}...前6个是私有服务ssh和http公有服务define service { use local-service ; Name of service template to use host_name localhost service_description SSH check_command check_ssh notifications_enabled 0}vim /usr/local/nagios/etc/objects/templates.cfg 模板文件define host { name linux-server ; The name of this host template use generic-host ; This template inherits other values from the generic-host template check_period 24x7 ; By default, Linux hosts are checked round the clock check_interval 5 ; Actively check the host every 5 minutes //检测时间间隔 retry_interval 1 ; Schedule host check retries at 1 minute intervals //重试时间间隔 max_check_attempts 10 ; Check each Linux host 10 times (max) //最大检测次数 check_command check-host-alive ; Default command to check Linux hosts //在commands.cfg里定义的命令 notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day //通知时间在timeperiods.cfg里定义的 ; Note that the notification_period variable is being overridden from ; the value that is inherited from the generic-host template! notification_interval 120 ; Resend notifications every 2 hours //通知间隔 notification_options d,u,r ; Only send notifications for specific host states //通知选项 contact_groups admins ; Notifications get sent to the admins by default //通知组,在contacts.cfg里定义 register 0 ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE! //不注册,表示这只是一个模板,被调用,不会被nagios进程认为就是一台主机}其中,通知选项中,w即warn,表示警告状态,u即unknown,表示不明状态;c即critical,表示紧急状态;r即recover,表示恢复状态;d即down,表示宕机状态。vim /usr/local/nagios/etc/objects/commands.cfgdefine command { command_name check-host-alive command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5}解释说明:1.$USER1$表示resource.cfg文件中定义的插件的存放路径2.-H 表示check_ping插件的一个产生,代表主机地址,取自于主机定义里的address域3.$HOSTADDRESS$表示Nagios定义的一个宏,代表主机地址,取自于主机定义里端address域4.-w、-c和-p表示check_ping插件的参数-w,--warning=THRESHOLD,warning threshold pair-c,--critical=THRESHOLD,critical threshold pair-w:后面跟的是一对阀值,网络延迟平均3000ms(3s),包丢失率在80%会发出警告-c:后面跟的是一对阀值,网络延迟平均5000ms(5s),包丢失率在100%会发出错误-p,--packets=INTEGER 表示每次探测默认发送5个数据包 number of ICMP ECHO packets to send (Default:5)命令都在libexec下,用--help上查# /usr/local/nagios/libexec/check_ping --help
延伸:对于宏端概念理解
宏(Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义端规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。
Nagios中宏的理解http://nagios-cn.sourceforge.net/nagios-cn/advance.html
思路:1)看libexec/下是否有检测ftp的命令,如果没有,网上下载,或者自己开发2)在localhost.cfg里定义这个服务3)在command.cfg里定义命令
步骤:vim /usr/local/nagios/etc/objects/localhost.cfg 加上下面一段define service { use local-service ; Name of service template to use host_name localhost service_description FTP check_command check_ftp!2!5 notifications_enabled 1}在/usr/local/nagios/libexec/ 下 ./check_ftp --helpvim /usr/local/nagios/etc/objects/commands.cfgdefine command { command_name check_ftp command_line $USER1$/check_ftp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$}[root@ceshi objects]# vim commands.cfg [root@ceshi objects]# vim ../../etc/nagios.cfg 说明:$ARG1$代表上面设置的第一个值(2s);$ARG2$ 代表上面设置的第二个值(5s)-w:表示状态警告-c:表示状态严重总结:根据以上定义,当访问ftp的响应时间是2s时,nagios收集的状态为警告,当访问ftp端响应时间为5s时,nagios收集的状态为严重。测试[root@ceshi objects]# ../../libexec/check_ftp -H localhost -w 2 -c 5connect to address localhost and port 21: Connection refused[root@ceshi objects]# service nagios restartRunning configuration check... Stopping nagios: done.Starting nagios: Running configuration check... done.[root@ceshi objects]# service vsftpd startStarting vsftpd for vsftpd: [ OK ][root@ceshi objects]# ../../libexec/check_ftp -H localhost -w 2 -c 5FTP OK - 0.007 second response time on localhost port 21 [220 (vsFTPd 2.2.2)]|time=0.006735s;2.000000;5.000000;0.000000;10.000000手动调度一下,出现绿色ok
如果本机的ftp服务默认端口不是21,而是2121,该如何监控?
思路:1.更改ftp的默认端口为21212.在监控主机端配置文件localhost.cfg文件里加上监控命令3.如果命令没有在commands.cfg,就需要自己写
vim /etc/vsftpd/vsftpd.conflisten_port=2121 --加上这一句/etc/init.d/vsftpd restartnetstat -ntlup |grep ftp[root@ceshi objects]# vim /etc/vsftpd/vsftpd.conf [root@ceshi objects]# service vsftpd restartShutting down vsftpd: [ OK ]Starting vsftpd for vsftpd: [ OK ][root@ceshi objects]# netstat -nltup|grep vsftpdtcp 0 0 0.0.0.0:2121 0.0.0.0:* LISTEN 31853/vsftpd[root@ceshi objects]# vim localhost.cfg check_command check_ftp!2!5!2121[root@ceshi objects]# vim commands.cfg define command { command_name check_ftp command_line $USER1$/check_ftp -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p $ARG3$}重启nagios服务service nagios restart测试验证[root@ceshi objects]# ../../libexec/check_ftp -H localhost -w 2 -c 5 -p 2121FTP OK - 0.002 second response time on localhost port 2121 [220 (vsFTPd 2.2.2)]|time=0.001923s;2.000000;5.000000;0.000000;10.000000如下图,端口已经变为2121
需求:监控远程服务器10.1.1.2和10.1.1.3是否存活,并且再监控10.1.1.3上的http服务
思路:
示例:vim /usr/local/nagios/etc/objects/remote.cfg//先定义需要监控端对象主机define host{ use linux-werver host_name 10.1.1.2 //主机名,最好/etc/hosts里对应的IP alias 10.1.1.2 //显示到web上的名字 address 10.1.1.2 //实际监控的主机IP }
1.vim /usr/local/nagios/etc/objects/remote.cfgdefine host { use linux-server host_name 10.1.1.5 alias 10.1.1.5 address 10.1.1.5}define hostgroup { hostgroup_name remote linux-servers alias remote Linux Servers members 10.1.1.5}define service { use local-service hostgroup_name remote linux-servers service_description PING-alive check_command check_ping!100.0,20%!500.0,60%}define service { use local-service host_name 10.1.1.5 service_description HTTP check_command check_http}2.[root@nagios-server objects]# vim /usr/local/nagios/etc/nagios.cfg cfg_file=/usr/local/nagios/etc/objects/remote.cfg命令里有http和ping的3.测试验证先启动httpd服务[root@nagios-server objects]# service nagios restartRunning configuration check... Stopping nagios: No lock file found in /var/run/nagios.lockStarting nagios: Running configuration check... done.[root@nagios-server objects]# ../../libexec/check_ping -H 10.1.1.5 -w 1000,20% -c 2000,50%PING OK - Packet loss = 0%, RTA = 0.70 ms|rta=0.698000ms;1000.000000;2000.000000;0.000000 pl=0%;20;50;0
在被监控的主机上开启HTTP服务[root@lamp ~]# /usr/local/apache2/bin/apachectl start
[root@nagios-server nagios]# tar -xf nrpe-2.15.tar.gz -C /usr/src/[root@nagios-server nagios]# cd /usr/src/nrpe-2.15[root@nagios-server nrpe-2.15]# ./configure[root@nagios-server nrpe-2.15]# make[root@nagios-server nrpe-2.15]# make installNRPE port: 5666//可以查看check_nrpe命令说明安装成功ls /usr/local/nagios/libexec/check_nrpe
define command { command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$}说明:-c参数后接command,也就是数check_nrpe 可以调用别的check命令
说明:1.你可以重新编写一个xxx.cfg文件,也可以直接放到上面创建的remote.cfg文件里2.下面定义的命令比如check_remote_root,是被监控主机上的命令,监控机可以调用它。vim /usr/local/nagios/etc/objects/remote.cfgdefine service { use local-service host_name 10.1.1.5 service_description Root Partition check_command check_nrpe!check_remote_root}define service { use local-service host_name 10.1.1.5 service_description Current Users check_command check_nrpe!check_remote_users}define service { use local-service host_name 10.1.1.5 service_description Total Processes check_command check_nrpe!check_total_procs}define service { use local-service host_name 10.1.1.5 service_description Current Load check_command check_nrpe!check_remote_load}define service { use local-service host_name 10.1.1.5 service_description Swap Usage check_command check_nrpe!check_remote_swap}检测配置文件是否正确:/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
准备软件包[root@lamp nagios]# lsnagios-plugins-2.2.1.tar.gz nrpe-2.15.tar.gz1.新建用户[root@lamp nagios]# useradd nagios[root@lamp nagios]# groupadd nagiosgroup[root@lamp nagios]# usermod -G nagiosgroup nagios2.安装plugins插件,包含数据采集命令脚本tar -xf nagios-plugins-2.2.1.tar.gz -C /usr/src/cd /usr/src/nagios-plugins-2.2.1/./configure --with-nagios-user=nagios --with-nagios-group=nagiosgroupmake && make install3.安装nrpe注意:配置过程中可能出现如下错误checking for SSL headers... configure: error: Cannot find ssl headers原因:缺少openssl-devel软件包解决:安装它 yum -y install openssl-develtar xf nrpe-2.15.tar.gz -C /usr/srccd /usr/src/nrpe-2.15/./configure && make && make installyum -y install openssl-devel./configure && make && make installmake install-pluginmake install-daemonmake install-daemon-configmake install-xinetd4.修改nrpe的超级守护进程的配置文件vim /etc/xinetd.d/nrpeservice 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.75.136 //增加监控端主机IP} vim /etc/services //最后面加一行nrpe 5666/tcp # NRPE5.在nrpe配置文件里定义check命令,使nagios服务能调用vim /usr/local/nagios/etc/nrpe.cfgcommand[check_remote_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10command[check_remote_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20command[check_remote_root]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /command[check_remote_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200command[check_remote_swap]=/usr/local/nagios/libexec/check_swap -w 40%% -c 20%%下面这个是默认有的,但nagios服务器那边没加,这个在这里没有用(僵尸进程)command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z6.安装xinetd服务yum -y install xinetdservice xinetd start[root@lamp nrpe-2.15]# netstat -nltp|grep xinetdtcp 0 0 :::5666 :::* LISTEN 29000/xinetd7.在本地或nagios服务器测试在被监控端测试成功/usr/local/nagios/libexec/check_users -w 5 -c 10[root@lamp nrpe-2.15]# /usr/local/nagios/libexec/check_users -w 5 -c 10USERS OK - 2 users currently logged in |users=2;5;10;0在nagios服务器上测试成功/usr/local/nagios/libexec/check_nrpe -H 10.1.1.5 -c check_remote_users8.回到nagios服务器重启服务/etc/init.d/nagios restart
1.测试当前服务器是否可以发送邮件
ping www.baidu.comecho test nagios |mail -s 'nagios' 1206xxx4@qq.com
2.定义指定的收件人
vim /usr/local/nagios/etc/objects/contacts.cfgdefine contact { contact_name nagiosadmin use generic-contact alias Nagios Admin email xxxxx@qq.com}
3.测试验证
把几个服务关闭,再重启,等邮件通知。本人qq,亲测有效。