如何使用Monit部署服务器监控系统
Monit是什么?
Monit是
一个跨平台的用来监控Unix/linux系统(比如Linux、BSD、OSX、Solaris)的工具。Monit特别易于安装,而且非常轻量级(只
有500KB大小),并且不依赖任何第三方程序、插件或者库。然而,Monit可以胜任全面监控、进程状态监控、文件系统变动监控、邮件通知和对核心服务
的自定义动作等场景。易于安装、轻量级的实现以及强大的功能,让Monit成为一个理想的后备监控工具。
我
已经在一些机器使用Monit几年了,而且我对它的可靠性非常满意。甚至作为全面的监控系统,对任何Linux系统管理员来说Monit也是非常有用和强
大的。在这篇教程中,我会展示如何在一个本地服务器部署Monit(作为后备监控系统)来监控常见的服务。在部署过程中,我只会展示我们用到的部分。
在Linux安装Monit
Monit已经被包含在多数Linux发行版的软件仓库中了。
Debian、Ubuntu或者Linux Mint:
$ sudo aptitude install monit
Fedora或者CentOS/RHEL:
在CentOS/RHEL中,你必须首先启用EPEL或者Repoforge软件仓库
# yum install monit
Monit
自带一个文档完善的配置文件,其中包含了很多例子。主配置文件在/etc/monitconf(Fedora/CentOS/RHEL
中),或者/etc/monit/monitrc(Debian/Ubuntu/Mint
中)。Monit配置文件有两部分:“Global”(全局)和“Services”(服务)。
Global Configuration: Web Status Page (全局配置:Web状态页面)
Monit可以使用邮件服务来发送通知,也可以使用HTTP/HTTPS页面来展示。我们先使用如下配置的web状态页面吧:
Monit监听1966端口。
对web状态页面的访问是通过SSL加密的。
使用monituser/romania作为用户名/口令登录。
只允许通过localhost、myhostmydomainro和在局域网内部(19216800/16)访问。
Monit使用pem格式的SSL证书。
之后的步骤,我会使用一个基于Red Hat的系统。在基于Debian的系统中的步骤也是类似的。
首先,在/var/cert生成一个自签名的证书(monitpem):
# mkdir /var/certs # cd /etc/pki/tls/certs # /make-dummy-cert monitpem # cp monitpem /var/certs # chmod 0400 /var/certs/monitpem
现在将下列代码片段放到Monit的主配置文件中。你可以创建一个空配置文件,或者基于自带的配置文件修改。
set httpd port 1966 and SSL ENABLE PEMFILE /var/certs/monitpem allow monituser:romania allow localhost allow 19216800/16 allow myhostmydomainro
Global Configuration: Email Notification (全局配置:邮件通知)
然后,我们来设置Monit的邮件通知。我们至少需要一个可用的SMTP服务器来让Monit发送邮件。这样就可以(按照你的实际情况修改):
邮件服务器的机器名:smtpmonitro
Monit使用的发件人:monit@monitro
邮件的收件人:guletz@monitro
邮件服务器使用的SMTP端口:587(默认是25)
有了以上信息,邮件通知就可以这样配置:
set mailserver smtpmonitro port 587 set mail-format { from: monit@monitro subject: $SERVICE $EVENT at $DATE on $HOST message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION Yours sincerely, Monit } set alert guletz@monitro
就像你看到的,Monit会提供几个内部变量($DATE、$EVENT、$HOST等),你可以按照你的需求自定义邮件内容。如果你想要从Monit所在机器发送邮件,就需要一个已经安装的与sendmail兼容的程序(如postfix或者ssmtp)。
Global Configuration: Monit Daemon (全局配置:Monit守护进程)
接下来就该配置Monit守护进程了。可以将其设置成这样:
在120秒后进行第一次检测。
每3分钟检测一次服务。
使用syslog来记录日志。
如下代码段可以满足上述需求。
set daemon 120 with start delay 240 set logfile syslog facility log_daemon
我们必须定义“idfile”,Monit守护进程的一个独一无二的ID文件;以及“eventqueue”,当monit的邮件因为SMTP或者网络故障发不出去,邮件会暂存在这里;以及确保/var/monit路径是存在的。然后使用下边的配置就可以了。
set idfile /var/monit/id set eventqueue basedir /var/monit
测试全局配置
现在“Global”部分就完成了。Monit配置文件看起来像这样:
# Global Section # status webpage and acl's set httpd port 1966 and SSL ENABLE PEMFILE /var/certs/monitpem allow monituser:romania allow localhost allow 19216800/16 allow myhostmydomainro # mail-server set mailserver smtpmonitro port 587 # email-format set mail-format { from: monit@monitro subject: $SERVICE $EVENT at $DATE on $HOST message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION Yours sincerely, Monit } set alert guletz@monitro # delay checks set daemon 120 with start delay 240 set logfile syslog facility log_daemon # idfile and mail queue path set idfile /var/monit/id set eventqueue basedir /var/monit
现在是时候验证我们的工作了,你可以通过运行如下命令来验证存在的配置文件(/etc/monitconf):
# monit -t Control file syntax OK
如果monit提示任何错误,请再检查下配置文件。幸运的是,错误/警告信息是可以帮助你发现问题的,比如:
monit: Cannot stat the SSL server PEM file '/var/certs/monitpem' -- No such file or directory /etc/monit/monitrc:10: Warning: hostname did not resolve 'smtpmonitro'
一旦你确认配置文件没问题了,可以启动monit守护进程,然后等2到3分钟:
# service monit start
如果你使用的是systemd,运行:
# systemctl start monit
现在打开一个浏览器窗口,然后访问https://<monit_host>:1966。将<monit_host>替换成Monit所在机器的机器名或者IP地址。
如果你使用的是自签名的SSL证书,你会在浏览器中看到一个警告信息。继续访问即可。
你完成登录后,就会看到这个页面。
在这个教程的其余部分,我们演示监控一个本地服务器和常见服务的方法。你会在官方wiki页面看到很多有用的例子。其中的多数是可以直接复制粘贴的!
Service Configuration: CPU/Memory Monitoring (服务配置:CPU、内存监控)
我们先来监控本地服务器的CPU、内存占用。复制如下代码段到配置文件中。
check system localhost if loadavg (1min) > 10 then alert if loadavg (5min) > 6 then alert if memory usage > 75% then alert if cpu usage (user) > 70% then alert if cpu usage (system) > 60% then alert if cpu usage (wait) > 75% then alert
你可以很容易理解上边的配置。最上边的check是指每个监控周期(全局配置里设置的120秒)都对本机进行下面的操作。如果满足了任何条件,monit守护进程就会使用邮件发送一条报警。
如果某个监控项不需要每个周期都检查,可以使用如下格式,它会每240秒检查一次平均负载。
if loadavg (1min) > 10 for 2 cycles then alert
Service Configuration: SSH Service Monitoring (服务配置:SSH服务监控)
先检查我们的sshd是否安装在/usr/sbin/sshd:
check file sshd_bin with path /usr/sbin/sshd
我们还想检查sshd的启动脚本是否存在:
check file sshd_init with path /etc/initd/sshd
最后,我们还想检查sshd守护进程是否存活,并且在监听22端口:
check process sshd with pidfile /var/run/sshdpid start program "/etc/initd/sshd start" stop program "/etc/initd/sshd stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
我
们可以这样解释上述配置:我们检查是否存在名为sshd的进程,并且有一个保存其pid的文件存在(/var/run/sshdpid)。如果任何一个
不存在,我们就使用启动脚本重启sshd。我们检查是否有进程在监听22端口,并且使用的是SSH协议。如果没有,我们还是重启sshd。如果在最近的5
个监控周期(5x120秒)至少重启5次了,sshd就被认为是不能用的,我们就不再检查了。
Service Configuration: SMTP Service Monitoring (服务配置:SMTP服务监控)
现在我们来设置一个检查远程SMTP服务器(如192168111102)的监控。假定SMTP服务器运行着SMTP、IMAP、SSH服务。
check host MAIL with address 192168111102 if failed icmp type echo within 10 cycles then alert if failed port 25 protocol smtp then alert else if recovered then exec "/scripts/mail-script" if failed port 22 protocol ssh then alert if failed port 143 protocol imap then alert
我
们检查远程主机是否响应ICMP协议。如果我们在10个周期内没有收到ICMP回应,就发送一条报警。如果监测到25端口上的SMTP协议是异常的,就发
送一条报警。如果在一次监测失败后又监测成功了,就运行一个脚本(/scripts/mail-script)。如果检查22端口上的SSH或者143端
口上的IMAP协议不正常,同样发送报警。
一个完整的监控系统都包括云台、防护罩、支架、监视器、视频放大器、视频分配器、视频切换器、画面分割器、硬盘录像机、监控管理平台、磁盘阵列。具体如下:
1、云台
监控系统所说的云台是通过控制系统在远端可以控制其转动方向的。 云台有多种类型: 按使用环境分为室内型和室外型,主要区别是室外型密封性能好,防水、防尘,负载大。 按安装方式分为侧装和吊装,即云台是安装在天花板上还是安装在墙壁上。
2、防护罩
防护罩也是监控系统中最常用的设备之一,功能主要是防尘、防破坏。 室外防护罩密封性能一定要好,保证雨水不能进入防护罩内部侵蚀摄像机。有的室外防护罩还带有排风扇、加热板、雨刮器,可以更好的保护设备。
3、支架
普通摄像机支架安装简单,价格低廉,而且种类繁多。 根据不同的要求选择不同的型号。室外摄像机安装位置特殊,有的安装在电线杆上,有的立于塔吊上,有的安装在铁架上。现有的支架可能难以满足要求,需要另外加工或改进。
4、监视器
监视器是监控系统的标准输出,有了监视器才能观看前端送过来的图像。有些监视器还有音频输入、S-video输入、RGB分量输入等,除了音频输入监控系统用到外,其余功能大部分用于图像处理工作。
5、视频放大器
当视频传输距离比较远时,最好采用线径较粗的视频线,同时可以在线路内增加视频放大器增强信号强度达到远距离传输目的。视频放大器可以增强视频的亮度、色度和同步信号,但线路内干扰信号也会被放大,另外,回路中不能串接太多视频放大器,否则会出现饱和现象,导致图像失真。
6、视频分配器
一路视频信号对应一台监视器或录像机,若想一台摄像机的图像送给多个管理者看,最好选择视频分配器。视频分配器除了阻抗匹配,还有视频增益,使视频信号可以同时送给多个输出设备而不受影响。
7、视频切换器
多路视频信号要送到同一处监控,可以在监控室增设一台切换器,把摄像机输出信号接到切换器的输入端,切换器的输出端接监视器,切换器的输入端分为2、4、 6、8、12、16路,输出端分为单路和双路,而且还可以同步切换音频。
8、画面分割器
画面分割器有四分割、九分割、十六分割几种,可以在一台监视器上同时显示 4、9、16个摄像机的图像,也可以送到录像机上记录。
8、硬盘录像机
监控系统中最常用的记录设备是民用录像机和长延时录像机。延时录像机可以长时间工作,可以录制24小时(用普通VHS录像带)甚至上百小时的图像,可以联接报警器材,收到报警信号自动启动录像,可以叠加时间日期等。
9、监控管理平台
以网络集中管理和网络传输为核心,完成信息采集、传输、控制、管理和储存的全过程,能够架构在各种专网、局域网、城域网、广域网之上,真正实现了监控联网、集中管理,授权用户可在网络的任何计算机上对监控现场实时监控。
10、磁盘阵列
在大型监控系统中,由于监控录像多,储存大,则要用到磁盘阵列。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。
-监控系统
1、Ganglia
是一个集群监控软件,可以监视和显示集群中的节点的各种状态信息,比如:CPU、mem、硬盘利用率、I/O负载、网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈现,此软件主要是用来监控系统性能的软件,通过曲线可以很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。
它是分布式的监控系统,有两个Daemon,是一个Linux下图形化监控系统运行性能的软件,界面美观、丰富,功能强大。
RRDtool是系统存放和显示time-series (即网络带宽、温度、人数、服务器负载等) 。并且它提出有用的图表由处理数据强制执行有些数据密度。
2、Cacti
是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具,通过snmpget来获取数据,使用RRDTool绘画图形,提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结 构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。
cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。
3、Zenoss
是一款智能监控软件,允许IT管理员依靠单一的WEB控制台来监控网络架构的状态和健康度。Zenoss Core同时也是开源的网络与系统管理软件。
Zenoss提供功能丰富的产品,以监测整个IT基础设施:
网络 -路由器,交换机,防火墙,接入点;
服务器 -微软的Windows , Linux , Unix系统,惠普, NetApp,戴尔;
虚拟化 -完整虚拟机虚拟化基础架构( VI3 )管理, XenSource监测;
应用领域 -Process(程序),Port,网络应用服务, Web服务,数据库,中间件,商业企业应用方案 ;
4、Argus
是一个网络连接监控器,可以利用它来定制监控网络中符合某种条件的计算机,例如网络空闲、断开等。
5、Monit
是一款功能非常丰富的进程、文件、目录和设备的监测软件,用于UNIX平台,可以自动修复那些已经停止运行的程序,适合处理那些由于多种原因导致的软件错误。
6、Nagios
是一个监视系统运行状态和网络信息的监视系统,能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。
Nagios的主要功能特点:
监视网络服务(SMTP、POP3、HTTP、NNTP、PING等);
监视主机资源(进程、磁盘等);
简单的插件设计可以轻松扩展Nagios的监视功能;
服务等监视的并发处理;
错误通知功能(通过email、pager或其他用户自定义的方法)。
0条评论