阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何使用Monit部署服务器监控系统

154次阅读
没有评论

共计 9561 个字符,预计需要花费 24 分钟才能阅读完成。

很多 Linux 系统管理员依赖一个集中式的远程监控系统(比如 Nagios 或者 Cacti)来检查他们网络基础设备的健康状况。虽然集中式监控让管理员的生活更简单了,然而处理很多机器和服务时,专用的监控中心显然成为了一个单点故障,如果监控中心挂了或者因为什么原因(比如硬件或者网络故障)不可访问了,你就会失去整个网络基础设备情况的任何信息。

一个给你的监控系统增加冗余度的方法是安装独立的监控软件(作为后备),至少在网络中的关键 / 核心服务器上。这样在集中式监控系统挂掉的情况,你还有能力通过后备的监控方式来获取核心服务器的运行状况。

Nagios 的详细介绍:请点这里
Nagios 的下载地址:请点这里

Monit 是什么?

如何使用 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.htm

Google Guava 中的 Monitor  http://www.linuxidc.com/Linux/2015-03/115526.htm

在 Linux 安装 Monit

Monit 已经被包含在多数 Linux 发行版的软件仓库中了。

Debian、Ubuntu 或者 Linux Mint:

  1. $ sudo aptitude install monit

Fedora 或者 CentOS/RHEL:

在 CentOS/RHEL 中,你必须首先启用 EPEL 或者 Repoforge 软件仓库.

  1. # 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):

  1. # mkdir /var/certs
  2. # cd /etc/pki/tls/certs
  3. # ./make-dummy-cert monit.pem
  4. # cp monit.pem /var/certs
  5. # chmod 0400 /var/certs/monit.pem

现在将下列代码片段放到 Monit 的主配置文件中。你可以创建一个空配置文件,或者基于自带的配置文件修改。

  1. set httpd port 1966and
  2. SSL ENABLE
  3. PEMFILE /var/certs/monit.pem
  4. allow monituser:romania
  5. allow localhost
  6. allow 192.168.0.0/16
  7. allow myhost.mydomain.ro

 

Global Configuration: Email Notification(全局配置:邮件通知)

然后,我们来设置 Monit 的邮件通知。我们至少需要一个可用的 SMTP 服务器来让 Monit 发送邮件。这样就可以(按照你的实际情况修改):

  • 邮件服务器的机器名:smtp.monit.ro
  • Monit 使用的发件人:monit@monit.ro
  • 邮件的收件人:guletz@monit.ro
  • 邮件服务器使用的 SMTP 端口:587(默认是 25)

有了以上信息,邮件通知就可以这样配置:

  1. set mailserver smtp.monit.ro port 587
  2. set mail-format {
  3. from: monit@monit.ro
  4. subject: $SERVICE $EVENT at $DATE on $HOST
  5. message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
  6. Yours sincerely,
  7. Monit
  8. }
  9. set alert guletz@monit.ro

就像你看到的,Monit 会提供几个内部变量($DATE$EVENT$HOST等),你可以按照你的需求自定义邮件内容。如果你想要从 Monit 所在机器发送邮件,就需要一个已经安装的与 sendmail 兼容的程序(如 postfix 或者 ssmtp)。

 

Global Configuration: Monit Daemon(全局配置:Monit 守护进程)

接下来就该配置 Monit 守护进程了。可以将其设置成这样:

  • 在 120 秒后进行第一次检测。
  • 每 3 分钟检测一次服务。
  • 使用 syslog 来记录日志。

如下代码段可以满足上述需求。

  1. set daemon 120
  2. with start delay 240
  3. set logfile syslog facility log_daemon

我们必须定义“idfile”,Monit 守护进程的一个独一无二的 ID 文件;以及“eventqueue”,当 monit 的邮件因为 SMTP 或者网络故障发不出去,邮件会暂存在这里;以及确保 /var/monit 路径是存在的。然后使用下边的配置就可以了。

  1. set idfile /var/monit/id
  2. set eventqueue
  3. basedir /var/monit

 

测试全局配置

现在“Global”部分就完成了。Monit 配置文件看起来像这样:

  1. # Global Section
  2. # status webpage and acl's
  3. set httpd port 1966and
  4. SSL ENABLE
  5. PEMFILE /var/certs/monit.pem
  6. allow monituser:romania
  7. allow localhost
  8. allow 192.168.0.0/16
  9. allow myhost.mydomain.ro
  10. # mail-server
  11. set mailserver smtp.monit.ro port 587
  12. # email-format
  13. set mail-format {
  14. from: monit@monit.ro
  15. subject: $SERVICE $EVENT at $DATE on $HOST
  16. message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
  17. Yours sincerely,
  18. Monit
  19. }
  20. set alert guletz@monit.ro
  21. # delay checks
  22. set daemon 120
  23. with start delay 240
  24. set logfile syslog facility log_daemon
  25. # idfile and mail queue path
  26. set idfile /var/monit/id
  27. set eventqueue
  28. basedir /var/monit

现在是时候验证我们的工作了,你可以通过运行如下命令来验证存在的配置文件(/etc/monit.conf):

  1. # monit -t
  2. Control file syntax OK

如果 monit 提示任何错误,请再检查下配置文件。幸运的是,错误 / 警告信息是可以帮助你发现问题的,比如:

  1. monit:Cannot stat the SSL server PEM file '/var/certs/monit.pem'--No such file or directory
  2. /etc/monit/monitrc:10:Warning: hostname did not resolve 'smtp.monit.ro'

一旦你确认配置文件没问题了,可以启动 monit 守护进程,然后等 2 到 3 分钟:

  1. # service monit start

如果你使用的是 systemd,运行:

  1. # systemctl start monit

现在打开一个浏览器窗口,然后访问 https://<monit_host>:1966。将<monit_host> 替换成 Monit 所在机器的机器名或者 IP 地址。

如果你使用的是自签名的 SSL 证书,你会在浏览器中看到一个警告信息。继续访问即可。

如何使用 Monit 部署服务器监控系统

你完成登录后,就会看到这个页面。

如何使用 Monit 部署服务器监控系统

 

 

在这个教程的其余部分,我们演示监控一个本地服务器和常见服务的方法。你会在官方 wiki 页面看到很多有用的例子。其中的多数是可以直接复制粘贴的!

 

Service Configuration: CPU/Memory Monitoring(服务配置:CPU、内存监控)

我们先来监控本地服务器的 CPU、内存占用。复制如下代码段到配置文件中。

  1. check system localhost
  2. if loadavg (1min)>10then alert
  3. if loadavg (5min)>6then alert
  4. if memory usage >75%then alert
  5. if cpu usage (user)>70%then alert
  6. if cpu usage (system)>60%then alert
  7. if cpu usage (wait)>75%then alert

你可以很容易理解上边的配置。最上边的 check 是指每个监控周期(全局配置里设置的 120 秒)都对本机进行下面的操作。如果满足了任何条件,monit 守护进程就会使用邮件发送一条报警。

如果某个监控项不需要每个周期都检查,可以使用如下格式,它会每 240 秒检查一次平均负载。

  1. if loadavg (1min)>10for2 cycles then alert

 

Service Configuration: SSH Service Monitoring(服务配置:SSH 服务监控)

先检查我们的 sshd 是否安装在 /usr/sbin/sshd:

  1. check file sshd_bin with path /usr/sbin/sshd

我们还想检查 sshd 的启动脚本是否存在:

  1. check file sshd_init with path /etc/init.d/sshd

最后,我们还想检查 sshd 守护进程是否存活,并且在监听 22 端口:

  1. check process sshd with pidfile /var/run/sshd.pid
  2. start program "/etc/init.d/sshd start"
  3. stop program "/etc/init.d/sshd stop"
  4. if failed port 22 protocol ssh then restart
  5. if5 restarts within 5 cycles then timeout

我们可以这样解释上述配置:我们检查是否存在名为 sshd 的进程,并且有一个保存其 pid 的文件存在(/var/run/sshd.pid)。如果任何一个不存在,我们就使用启动脚本重启 sshd。我们检查是否有进程在监听 22 端口,并且使用的是 SSH 协议。如果没有,我们还是重启 sshd。如果在最近的 5 个监控周期(5×120 秒)至少重启 5 次了,sshd 就被认为是不能用的,我们就不再检查了。

如何使用 Monit 部署服务器监控系统

 

Service Configuration: SMTP Service Monitoring(服务配置:SMTP 服务监控)

现在我们来设置一个检查远程 SMTP 服务器(如 192.168.111.102)的监控。假定 SMTP 服务器运行着 SMTP、IMAP、SSH 服务。

  1. check host MAIL with address 192.168.111.102
  2. if failed icmp type echo within 10 cycles then alert
  3. if failed port 25 protocol smtp then alert
  4. elseif recovered thenexec"/scripts/mail-script"
  5. if failed port 22 protocol ssh then alert
  6. 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 怎么样?

Monitorix 的详细介绍:请点这里
Monitorix 的下载地址:请点这里


via: http://xmodulo.com/server-monitoring-system-monit.html

作者:Iulian Murgulet 译者:goreliu 校对:wxy

本文由 LCTT 原创翻译,Linux 中国 荣誉推出

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/118237.htm

很多 Linux 系统管理员依赖一个集中式的远程监控系统(比如 Nagios 或者 Cacti)来检查他们网络基础设备的健康状况。虽然集中式监控让管理员的生活更简单了,然而处理很多机器和服务时,专用的监控中心显然成为了一个单点故障,如果监控中心挂了或者因为什么原因(比如硬件或者网络故障)不可访问了,你就会失去整个网络基础设备情况的任何信息。

一个给你的监控系统增加冗余度的方法是安装独立的监控软件(作为后备),至少在网络中的关键 / 核心服务器上。这样在集中式监控系统挂掉的情况,你还有能力通过后备的监控方式来获取核心服务器的运行状况。

Nagios 的详细介绍:请点这里
Nagios 的下载地址:请点这里

Monit 是什么?

如何使用 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.htm

Google Guava 中的 Monitor  http://www.linuxidc.com/Linux/2015-03/115526.htm

在 Linux 安装 Monit

Monit 已经被包含在多数 Linux 发行版的软件仓库中了。

Debian、Ubuntu 或者 Linux Mint:

  1. $ sudo aptitude install monit

Fedora 或者 CentOS/RHEL:

在 CentOS/RHEL 中,你必须首先启用 EPEL 或者 Repoforge 软件仓库.

  1. # 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):

  1. # mkdir /var/certs
  2. # cd /etc/pki/tls/certs
  3. # ./make-dummy-cert monit.pem
  4. # cp monit.pem /var/certs
  5. # chmod 0400 /var/certs/monit.pem

现在将下列代码片段放到 Monit 的主配置文件中。你可以创建一个空配置文件,或者基于自带的配置文件修改。

  1. set httpd port 1966and
  2. SSL ENABLE
  3. PEMFILE /var/certs/monit.pem
  4. allow monituser:romania
  5. allow localhost
  6. allow 192.168.0.0/16
  7. allow myhost.mydomain.ro

 

Global Configuration: Email Notification(全局配置:邮件通知)

然后,我们来设置 Monit 的邮件通知。我们至少需要一个可用的 SMTP 服务器来让 Monit 发送邮件。这样就可以(按照你的实际情况修改):

  • 邮件服务器的机器名:smtp.monit.ro
  • Monit 使用的发件人:monit@monit.ro
  • 邮件的收件人:guletz@monit.ro
  • 邮件服务器使用的 SMTP 端口:587(默认是 25)

有了以上信息,邮件通知就可以这样配置:

  1. set mailserver smtp.monit.ro port 587
  2. set mail-format {
  3. from: monit@monit.ro
  4. subject: $SERVICE $EVENT at $DATE on $HOST
  5. message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
  6. Yours sincerely,
  7. Monit
  8. }
  9. set alert guletz@monit.ro

就像你看到的,Monit 会提供几个内部变量($DATE$EVENT$HOST等),你可以按照你的需求自定义邮件内容。如果你想要从 Monit 所在机器发送邮件,就需要一个已经安装的与 sendmail 兼容的程序(如 postfix 或者 ssmtp)。

 

Global Configuration: Monit Daemon(全局配置:Monit 守护进程)

接下来就该配置 Monit 守护进程了。可以将其设置成这样:

  • 在 120 秒后进行第一次检测。
  • 每 3 分钟检测一次服务。
  • 使用 syslog 来记录日志。

如下代码段可以满足上述需求。

  1. set daemon 120
  2. with start delay 240
  3. set logfile syslog facility log_daemon

我们必须定义“idfile”,Monit 守护进程的一个独一无二的 ID 文件;以及“eventqueue”,当 monit 的邮件因为 SMTP 或者网络故障发不出去,邮件会暂存在这里;以及确保 /var/monit 路径是存在的。然后使用下边的配置就可以了。

  1. set idfile /var/monit/id
  2. set eventqueue
  3. basedir /var/monit

 

测试全局配置

现在“Global”部分就完成了。Monit 配置文件看起来像这样:

  1. # Global Section
  2. # status webpage and acl's
  3. set httpd port 1966and
  4. SSL ENABLE
  5. PEMFILE /var/certs/monit.pem
  6. allow monituser:romania
  7. allow localhost
  8. allow 192.168.0.0/16
  9. allow myhost.mydomain.ro
  10. # mail-server
  11. set mailserver smtp.monit.ro port 587
  12. # email-format
  13. set mail-format {
  14. from: monit@monit.ro
  15. subject: $SERVICE $EVENT at $DATE on $HOST
  16. message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
  17. Yours sincerely,
  18. Monit
  19. }
  20. set alert guletz@monit.ro
  21. # delay checks
  22. set daemon 120
  23. with start delay 240
  24. set logfile syslog facility log_daemon
  25. # idfile and mail queue path
  26. set idfile /var/monit/id
  27. set eventqueue
  28. basedir /var/monit

现在是时候验证我们的工作了,你可以通过运行如下命令来验证存在的配置文件(/etc/monit.conf):

  1. # monit -t
  2. Control file syntax OK

如果 monit 提示任何错误,请再检查下配置文件。幸运的是,错误 / 警告信息是可以帮助你发现问题的,比如:

  1. monit:Cannot stat the SSL server PEM file '/var/certs/monit.pem'--No such file or directory
  2. /etc/monit/monitrc:10:Warning: hostname did not resolve 'smtp.monit.ro'

一旦你确认配置文件没问题了,可以启动 monit 守护进程,然后等 2 到 3 分钟:

  1. # service monit start

如果你使用的是 systemd,运行:

  1. # systemctl start monit

现在打开一个浏览器窗口,然后访问 https://<monit_host>:1966。将<monit_host> 替换成 Monit 所在机器的机器名或者 IP 地址。

如果你使用的是自签名的 SSL 证书,你会在浏览器中看到一个警告信息。继续访问即可。

如何使用 Monit 部署服务器监控系统

你完成登录后,就会看到这个页面。

如何使用 Monit 部署服务器监控系统

 

 

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计9561字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中