Monit

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Monit and the translation is 91% complete.
Outdated translations are marked like this.
Other languages:
Resources

app-admin/monit 是一个管理和监控 UNIX 系统进程、程序、文件、目录和文件系统的工具。

配置

安装 monit

app-admin/monit 应用有以下 USE flags:

USE flags for app-admin/monit Monitoring and managing daemons or similar programs running on a Unix system

ipv6 Add support for IP version 6
pam Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
ssl Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security)

确定了 USE 标记后,可以通过 emerge 安装 app-admin/monit

root #emerge --ask app-admin/monit

Monit 配置文件

Monit 程序使用 /etc/monitrc 作为配置文件。

为了更方便地添加和删除监控选项,emerge 支持在配置文件中包含指定目录下的文件(通常是 /etc/monit.d)。若要启用此特性,可以像下面那样编辑 /etc/monitrc 文件:

文件 /etc/monitrc允许灵活的配置选项
## It is possible to include additional configuration parts from other files or
## directories.
include /etc/monit.d/*

当修改了 Monit 配置文件后,可以使用下面的命令让 emerge 重新读取配置设定:

root #monit reload

开机自动启动 Monit

推荐通过 /etc/inittab 启动 monit,这样的话 init 会启动 monit,并且会在 monit 突然死掉的时候自动重启。通过 init 脚本启动 monit 将不会提供这一功能。

文件 /etc/inittab在 monit 死掉的时候自动重启
# Run monit in standard runlevels
mo:2345:respawn:/usr/bin/monit -Ic /etc/monitrc

更新 /etc/inittab 之后, 可以通过 telinit q 立即启动 monit

用户管理

加入 monit 或者 users 用户组的用户可以通过 monit 的 web 界面进行操作。

使用 gpasswd 将用户添加到任一用户组:

root #gpasswd -a $USER monit
root #gpasswd -a $USER users

/etc/monitrc 文件中, allow 语句应当指向这些用户组,例如:

文件 /etc/monitrc对用户组授予 web 接口权限
set httpd port 2812
  allow @monit
  allow @users

也可以在 monitrc 文件中使用硬编码的用户名和密码,但是不推荐这样设置。检查 monitrc 文件中的默认密码,删除它们,或者替换成更强大的、唯一的密码。使用的语法是 allow <username>:<password>

Monit web 界面

默认的 web 界面的地址是 localhost:2812,用户名是 admin,默认密码是 monit。请确保修改密码!

通过 monit 监控应用

Monit 使用 PID 文件来检查应用是否运行。这意味着要监控的程序“必须”有 PID 文件,否则 monit 无法保护它。如果一个守护进程不会创建 PID 文件,使用 wrapper 创建一个。

附注
使用 PID 文件(以及通过 ps 这样的工具验证 PID 文件)进行监控通常被认为是不可靠的[1]。Monit 通过以足够频繁的频率检查 PID 文件来克服这一弱点。

通过使用 /etc/monit.d/ 目录,可以很方便的添加额外的监控规则。

例如,在 MySQL 死掉的时候自动重启:

文件 /etc/monit.d/mysql自动重启 mysql
check process mysql with pidfile /var/run/mysqld/mysqld.pid
    start program = "/bin/bash -c 'rc-service mysql start'"
    stop program  = "/bin/bash -c 'rc-service mysql stop'"

另一个例子是管理进程的内存使用量,在超过某一阈值的时候创建一个警告:

文件 /etc/monit.d/squid检查 squid 并在内存使用超过 512MByte 的时候警告
check process squid with pidfile /run/squid.pid
   start program = "/bin/bash -c 'rc-service squid start'"
   stop  program = "/bin/bash -c 'rc-service squid stop'"
   if totalmem > 512 MB then alert

调试 monit

前台运行 monit

使用 -Ivv 选项在前台运行 monit 并查看它检测到的一切反馈:

root #monit -Ivv
...
'squid' total mem amount of 525748kB matches resource limit [total mem amount>524288kB]

外部资源

关于 Monit 的更多信息,下面的资源会有所帮助。

参考

  1. Greg Wooledge. Process management, Retrieved on January 1st, 2015