如何借助Monit搭建服务器监控系统?(1)
许多Linux管理员依赖一种集中式远程监控系统(比如Nagios或Cacti),检查网络基础设施的健康状况。虽然集中式监控系统为管理员在处理许多主机和设备时简化了工作,但专用的监控设备显然成了单一故障点;要是监控设备出现故障或者由于其他原因(比如硬件坏掉或网络停运)而联系不上,你就失去了可见性,无法了解整个基础设施的状况。
想为监控系统增添冗余机制,一个办法就是起码在网络上任何关键/核心服务器上安装独立的监控软件(作为一条退路)。那样万一集中式监控系统坏掉,你仍能够通过备用的监控工具,保持可见性,了解核心服务器的状况。
Monit简介
Monit是一种跨平台的开源工具,可用于监控Unix/Linux系统(比如Linux、BSD、OSX和Solaris)。Monit安装起来极其容易,也非常轻型(大小只有500KB),并不需要任何第三方程序、插件或代码库。不过,Monit有助于提供成熟的监控功能,具有进程状态监控、文件系统变化监控、电子邮件通知、针对核心服务的可定制操作等功能。Monit集安装简易、轻量级实现和功能强大等优点于一身,因而是一款再理想不过的备用监控工具。
好几年来我一直在多个主机上使用Monit,对它一贯以来的可靠表现非常满意。即使作为一款成熟的监控系统,Monit对任何Linux管理员来说也非常实用、非常强大。我在本教程中将演示如何在本地服务器上搭建Monit(作为备用监控工具),以监控常见服务。该系统搭建起来后,我将仅仅介绍Monit强大功能的皮毛。
将Monit安装到Linux上
大多数Linux发行版已经在其软件库中含有Monit。
在Debian、Ubuntu或Linux Mint上:
$ sudo aptitude install monit
在Fedora或CentOS/RHEL上:
在CentOS/RHEL上,你必须先启用EPEL或Repoforge软件库。
# yum install monit
Monit随带一个文档很齐全的配置文件,有许多示例。主配置文件位于Fedora/CentOS/RHEL中的/etc/monit.conf,或位于Debian/Ubuntu/Mint中的/etc/monit/monitrc。Monit配置有两个部分:“全局”部分和“服务”部分。
全局配置:Web状态页面
Monit可以使用几种邮件服务器用于通知,以及/或者HTTP/HTTPS状态页面。不妨从满足下列要求的Web状态页面入手。
•Monit侦听端口1966。
•对Web状态页面的访问用SSL加密。
•登录需要monituser/romania作为用户/密码。
•只允许从本地主机、myhost.mydomain.ro和内部局域网(192.168.0.0/16)进行登录。
•Monit以pem格式存储SSL证书。
至于随后的步骤,我将使用基于红帽的系统。类似步骤适用于基于Debian的系统上。
首先,生成一个自签名的证书(monit.pem),并存储在/var/cert中。
# 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 1966 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow monituser:romania
allow localhost
allow 192.168.0.0/16
allow myhost.mydomain.ro
全局配置:电子邮件通知
下一步,不妨在Monit中建立电子邮件通知机制。我们至少需要一台活动的SMTP服务器,它能够从Monit主机发送邮件。类似下列的信息就可以了(针对你的具体情况稍作调整):
•邮件服务器主机名:smtp.monit.ro
•Monit所使用的发送者电子邮件地址:monit@monit.ro
•谁将收到来自monit守护程序的邮件:guletz@monit.ro
•邮件服务器使用的SMTP端口:587(默认端口是25)
有了上述信息,电子邮件通知可以配置成这样:
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)。
全局配置:Monit守护程序
下一个部分是设置monit守护程序。我们将按如下方式设置它。
•120秒过后执行首次检查。
•每隔3分钟检查一次服务。
•使用syslog用于记录日志。
放入下面这个代码片段,获得上述设置。
set daemon 120
with start delay 240
set logfile syslog facility log_daemon
我们还必须定义“idfile”和“eventqueue”,前者是monit守护程序使用的独特ID,后者是monit发送邮件的路径,但由于SMTP/网络错误而无法送达。证实路径(/var/monit)已经存在。下列配置就行。
set idfile /var/monit/id
set eventqueue
basedir /var/monit
测试全局配置
现在,“全局”部分已完成。Monit配置文件看起来就像这样:
# 全局部分
# status webpage and acl's
set httpd port 1966 and
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# 延迟检查
set daemon 120
with start delay 240
set logfile syslog facility log_daemon
# idfile和邮件队列路径
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守护程序,等两三分钟:
# service monit start
如果你使用systemd,运行:
# systemctl start monit
现在打开浏览器窗口,进入到https://<monit_host>:1966。把<monit_host>换成你的Monit主机名或IP地址。
请注意:如果你有一个自签名的SSL证书,会在浏览器中看到警告信息。

你完成登录后,肯定会看到下面这一页。

在教程的其余部分,我将介绍如何监控本地服务器和常见服务。你会在官方维基页面上看到许多有用的示例(http://mmonit.com/wiki/Monit/ConfigurationExamples)。大多数示例可以拷贝粘贴!
服务配置:处理器/内存监控
不妨先监控本地服务器的处理器/内存使用情况。将下列代码片段拷贝到配置文件。
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
很容易解读上述配置。每个监控周期(在全局部分中被设为120秒),针对本地主机执行上述检查。要是符合条件,monit守护程序就会通过电子邮件发送提醒。
如果某些属性不需要每个周期都加以监控,你可以使用下列格式。比如说,这将每隔一个周期(也就是每隔240秒)监控平均负载。
if loadavg (1min) > 10 for 2 cycles then alert
服务配置:SSH服务监控
不妨检查我们是否将sshd二进制文件安装在/usr/sbin/sshd中:
check file sshd_bin with path /usr/sbin/sshd
我们还想检查sshd的init脚本是否存在:
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
if 5 restarts within 5 cycles then timeout
更具体地说,我们可以解读上述配置,如下所示。我们检查一个名为sshd的进程和pidfile(/var/run/sshd.pid)是否存在。要是这其中一个都不存在,我们就使用init脚本重启sshd守护程序。我们检查侦听端口22的进程是否支持SSH协议。要是不支持,我们就重启sshd守护程序。要是在最近5个监控周期(即5 x 120秒)里面至少有5次重启,sshd守护程序就宣布失效,我们并不试图再次检查。

服务配置: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
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响应,就发送提醒。要是SMTP协议测试在端口25上失败,我们就发送提醒。要是测试失败后测试又成功了,我们就运行脚本(/scripts/mail-script)。要是SSH和IMAP协议测试分别在端口22和端口143上失败,我们就发送提醒。
结束语
我在本教程中演示了如何在本地服务器上搭建Monit。就Monit的功能而言,我在这里介绍的仅仅是冰山一角。不妨花点时间阅读关于Monit的参考手册页。Monit的语法非常通俗易懂,为任何Linux管理员提供了许多功能。如果你结合集中式远程监控工具和Monit为己所用,就会拥有一个更可靠的监控系统。你觉得Monit怎么样?
英文:How to set up server monitoring system with Monit
http://netsecurity.51cto.com/art/201504/471116_7.htm
如何借助Monit搭建服务器监控系统?(1)的更多相关文章
- 使用monit搭建一个监控系统
上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知 ...
- 搭建前端监控系统(三)NodeJs服务器部署篇
===================================================================== 监控系统预览地址: DEMO地址 GIT代码仓库地址 ...
- 搭建前端监控系统(四)Js截图上报篇
===================================================================== 前端监控系统: DEMO地址 GIT代码仓库地址 ==== ...
- 搭建前端监控系统(二)JS错误监控篇
===================================================================== 前端性能监控系统: DEMO地址 GIT代码仓库地址 ...
- 搭建前端监控系统(五)Nodejs怎么搭建消息队列
怎样定位前端线上问题,一直以来,都是很头疼的问题,因为它发生于用户的一系列操作之后.错误的原因可能源于机型,网络环境,接口请求,复杂的操作行为等等,在我们想要去解决的时候很难复现出来,自然也就无法解决 ...
- 搭建zabbix监控系统详解
搭建zabbix监控系统详解 文:warren 博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...
- Telegraf+InfluxDB+Grafana搭建服务器监控平台
Telegraf+InfluxDB+Grafana搭建服务器监控平台 tags:网站 个人网站:https://wanghualong.cn/ 效果展示 本站服务器状态监控:https://statu ...
- Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
- 从零开始搭建前端监控系统(三)——实现控制iframe前进后退
前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...
随机推荐
- Hiho---欧拉图
欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现 ...
- ucenter创始人密码忘记了,修改方法
简单的:1.在UCenter/data/下找到config.inc.php,打开找到下面2行代码: define('UC_FOUNDERPW', '3858cdf66b0794bfd435af8c0c ...
- ArcGIS Engine10.2与VS2017的环境设置
首先,在安装ArcGIS Engine 10.2之前,大家应该了解的事是:AE10.2推荐与VS2010或VS2012匹配使用,AE10.3推荐与VS2013匹配使用.除上述的推荐匹配版本之外的方法, ...
- 自动build服务器 CruiseControl.NET
<cruisecontrol xmlns:cb="urn:ccnet.config.builder"> <!-- This is your CruiseContr ...
- CDK上安装kube-dashboard
首先把addon的代码下载下来 git clone https://github.com/minishift/minishift-addons 然后进入相应的目录,运行 ericdeMacBook-P ...
- 对Emlog 6.0 Beta的完整代码审计过程
Emlog 6.0 beta版本,这可能是最后一篇关于PHP语言CMS的代码审计文章,此次将详细记录完整的审计过程. 文章基本上完整记录小东的对此CMS审计过程,或许显得繁琐,但代码审计的过程就是这样 ...
- Tomcat集群环境下session共享方案 通过memcached 方法实现
对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...
- Maven Web项目配置Mybatis出现SqlSessionFactory错误的解决方案
一.错误现象 严重: Context initialization failed org.springframework.beans.factory.BeanCreationException: Er ...
- 适合移动手机使用的js环形菜单特效插件
blooming-menu是一款适合在移动手机上使用的js环形菜单插件.该环形菜单提供了众多的參数,通过结合CSS3动画制作出效果很炫酷的圆形菜单展开和隐藏动画效果. 以下是这个圆形菜单菜价的可用參数 ...
- PHP Warning exec() has been disabled for security reasons怎么办
如果是PHPNOW,还是找到php-apache2handler.ini这个文件,把禁用的函数去掉即可. 注意是这个文件夹