2018年08月14日 15:58:12 hakula007 阅读数:298linux
不少Linux系统管理员依赖一个集中式的远程监控系统(好比Nagios或者Cacti)来检查他们网络基础设备的健康情况。虽然集中式监控让管理员的生活更简单了,然而处理不少机器和服务时,专用的监控中心显然成为了一个单点故障,若是监控中心挂了或者由于什么缘由(好比硬件或者网络故障)不可访问了,你就会失去整个网络基础设备状况的任何信息。ios
一个给你的监控系统增长冗余度的方法是安装独立的监控软件(做为后备),至少在网络中的关键/核心服务器上。这样在集中式监控系统挂掉的状况,你还有能力经过后备的监控方式来获取核心服务器的运行情况。web
Monit是什么?浏览器
Monit是一个跨平台的用来监控Unix/linux系统(好比Linux、BSD、OSX、Solaris)的工具。Monit特别易于安装,并且很是轻量级(只有500KB大小),而且不依赖任何第三方程序、插件或者库。然而,Monit能够胜任全面监控、进程状态监控、文件系统变更监控、邮件通知和对核心服务的自定义动做等场景。易于安装、轻量级的实现以及强大的功能,让Monit成为一个理想的后备监控工具。服务器
我已经在一些机器使用Monit几年了,并且我对它的可靠性很是满意。甚至做为全面的监控系统,对任何Linux系统管理员来讲Monit也是很是有用和强大的。在这篇教程中,我会展现如何在一个本地服务器部署Monit(做为后备监控系统)来监控常见的服务。在部署过程当中,我只会展现咱们用到的部分。网络
使用HeartBeat+Monit实现主备双热备份系统 http://www.linuxidc.com/Linux/2014-12/110769.htmdom
Google Guava 中的Monitor http://www.linuxidc.com/Linux/2015-03/115526.htmssh
在Linux安装Monit工具
Monit已经被包含在多数Linux发行版的软件仓库中了。post
Debian、Ubuntu或者Linux Mint:
$ sudo aptitude install monit
在CentOS/RHEL中,你必须首先启用EPEL或者Repoforge软件仓库.
# yum install monit
Monit自带一个文档完善的配置文件,其中包含了不少例子。主配置文件在/etc/monit.conf(Fedora/CentOS/RHEL 中),或者/etc/monit/monitrc(Debian/Ubuntu/Mint 中)。Monit配置文件有两部分:“Global”(全局)和“Services”(服务)。
Global Configuration: Web Status Page (全局配置:Web状态页面)
Monit可使用邮件服务来发送通知,也可使用HTTP/HTTPS页面来展现。咱们先使用以下配置的web状态页面吧:
以后的步骤,我会使用一个基于Red Hat的系统。在基于Debian的系统中的步骤也是相似的。
首先,在/var/cert生成一个自签名的证书(monit.pem):
# mkdir /var/certs
# cd /etc/pki/tls/certs
# ./make-dummy-cert monit.pem
# cp monit.pem /var/certs
# chmod 0400 /var/certs/monit.pem
如今将下列代码片断放到Monit的主配置文件中。你能够建立一个空配置文件,或者基于自带的配置文件修改。
set httpd port 1966and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow monituser:romania
allow localhost
allow 192.168.0.0/16
allow myhost.mydomain.ro
Global Configuration: Email Notification (全局配置:邮件通知)
而后,咱们来设置Monit的邮件通知。咱们至少须要一个可用的SMTP服务器来让Monit发送邮件。这样就能够(按照你的实际状况修改):
有了以上信息,邮件通知就能够这样配置:
set mailserver smtp.monit.ro port 587
set mail-format {
from: monit@monit.ro
subject: $SERVICE $EVENT at $DATE on $HOST
message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
Yours sincerely,
Monit
}
set alert guletz@monit.ro
就像你看到的,Monit会提供几个内部变量($DATE
、$EVENT
、$HOST
等),你能够按照你的需求自定义邮件内容。若是你想要从Monit所在机器发送邮件,就须要一个已经安装的与sendmail兼容的程序(如postfix或者ssmtp)。
Global Configuration: Monit Daemon (全局配置:Monit守护进程)
接下来就该配置Monit守护进程了。能够将其设置成这样:
以下代码段能够知足上述需求。
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 1966and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow monituser:romania
allow localhost
allow 192.168.0.0/16
allow myhost.mydomain.ro
# mail-server
set mailserver smtp.monit.ro port 587
# email-format
set mail-format {
from: monit@monit.ro
subject: $SERVICE $EVENT at $DATE on $HOST
message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
Yours sincerely,
Monit
}
set alert guletz@monit.ro
# 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/monit.conf):
# monit -t
Control file syntax OK
若是monit提示任何错误,请再检查下配置文件。幸运的是,错误/警告信息是能够帮助你发现问题的,好比:
monit:Cannot stat the SSL server PEM file '/var/certs/monit.pem'--No such file or directory
/etc/monit/monitrc:10:Warning: hostname did not resolve 'smtp.monit.ro'
一旦你确认配置文件没问题了,能够启动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)>10then alert
if loadavg (5min)>6then 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)>10for2 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/init.d/sshd
最后,咱们还想检查sshd守护进程是否存活,而且在监听22端口:
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/sshd start"
stop program "/etc/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if5 restarts within 5 cycles then timeout
咱们能够这样解释上述配置:咱们检查是否存在名为sshd的进程,而且有一个保存其pid的文件存在(/var/run/sshd.pid)。若是任何一个不存在,咱们就使用启动脚本重启sshd。咱们检查是否有进程在监听22端口,而且使用的是SSH协议。若是没有,咱们仍是重启sshd。若是在最近的5个监控周期(5x120秒)至少重启5次了,sshd就被认为是不能用的,咱们就再也不检查了。
Service Configuration: SMTP Service Monitoring (服务配置:SMTP服务监控)
如今咱们来设置一个检查远程SMTP服务器(如192.168.111.102)的监控。假定SMTP服务器运行着SMTP、IMAP、SSH服务。
check host MAIL with address 192.168.111.102
if failed icmp type echo within 10 cycles then alert
if failed port 25 protocol smtp then alert
elseif recovered thenexec"/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协议不正常,一样发送报警。
总结
在这个教程,我演示了如何在本地服务器设置Monit,固然这只是Monit功能的冰山一角。你能够花些时间阅读Monit的man手册(写得很好)。Monit能够为任何Linux系统管理员作不少事情,而且具备很是优美和易于理解的语法。若是你将一个集中式的远程监控系统和Monit一同使用,你会获得一个更可靠的监控系统。你感受Monit怎么样?