蚊章汇 - Monit
type: channel
link: https://linuxcn.bwsl.wang/tag/Monit/
items: 如何使用Monit部署服务器监控系统

如何使用Monit部署服务器监控系统
type: item
date: 2015-05-31T07:14:34+08:00
description: 很多Linux系统管理员依赖一个集中式的远程监控系统（比如Nagios或者Cacti）来检查他们网络基础设备的健康状况。虽然集中式监控让管理员的生活更简单了，然而处理很多机器和服务时，专用的监控中心显然成为了一个单点故障，如果监控中心挂了或者因为什么原因（比如硬件或者网络故障）不可访问了，你就会失去整个网络基础设备情况的任何信息。一个给你的监控系统增加冗余度的方法是安装独立的监控软件（作为后备），至少在网络中的关键/核心服务器上。这样在集中式监控系统挂掉的情况，你还有能力通过后备的监控方式来获取核心服务器的运行状况。Monit是什么？Monit是一个跨平台的用来监控Unix/linux系统（比如Linux、BSD、OSX、Solaris）的工具。Monit特别易于安装，而且非常轻量级（只有500KB大小），并且不依赖任何第三方程序、插件或者库。然而，Monit可以胜任全面监控、进程状态监控、文件系统变动监控、邮件通知和对核心服务的自定义动作等场景。易于安装、轻量级的实现以及强大的功能，让Monit成为一个理想的后备监控工具。我已经在一些机器使用Monit几年了，而且我对它的可靠性非常满意。甚至作为全面的监控系统，对任何Linux系统管理员来说Monit也是非常有用和强大的。在这篇教程中，我会展示如何在一个本地服务器部署Monit（作为后备监控系统）来监控常见的服务。在部署过程中，我只会展示我们用到的部分。在Linux安装MonitMonit已经被包含在多数Linux发行版的软件仓库中了。Debian、Ubuntu或者Linux Mint：$ sudo aptitude install monit Fedora或者CentOS/RHEL：在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状态页面吧：Monit监听1966端口。对web状态页面的访问是通过SSL加密的。使用monituser/romania作为用户名/口令登录。只允许通过localhost、myhost.mydomain.ro和在局域网内部（192.168.0.0/16）访问。Monit使用pem格式的SSL证书。之后的步骤，我会使用一个基于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 1966 and 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发送邮件。这样就可以（按照你的实际情况修改）：邮件服务器的机器名：smtp.monit.roMonit使用的发件人：monit@monit.ro邮件的收件人：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 $SER…