用monit监控系统关键进程

monit是一款功能强大的系统状态、进程、文件、目录和设备的监控软件,用于*nix平台, 它可以自动重启那些已经挂掉的程序,非常适合监控系统关键的进程和资源,如:nginx、apache、mysql和cpu占有率等。而监控管理Python进程,常用的是supervisor,后续会另外撰文介绍。

下面分别介绍monit的安装、配置和启动。

安装

在debian或ubuntu上安装monit非常方便,通过下面的命令

sudoapt-getinstall monit

即可,其它*nix上也很简单,下载源码走一遍安装三步就OK了。

./configure
make
makeinstall

安装后,默认的配置文件为/etc/monit/monitrc。

配置

添加需要监控的进程等信息至monit的配置文件,monit的配置详见下面的示例文件,为了便于理解,关键的配置我都给出了中文的注释。

##
## 飞龙日志 示例monit配置文件,说明:
## 1. 域名以example.com为例。
## 2.
后面带xxx的均是举例用的名字,需要根据自己的需要修改。
##
###############################################################################
## Monit control file
###############################################################################
#
# 检查周期,默认为2分钟,对于网站来说有点长,可以根据需要自行调节,这改成30秒。
set daemon  30

# 日志文件
set logfile /var/log/monit.log

#
# 邮件通知服务器
#
#set mailserver mail.example.com
set mailserver localhost

#
# 通知邮件的格式设置,下面是默认格式供参考
#
## Monit by default uses the following alert mail format:
##
## --8<--
## From: [email protected]$HOST                        
# sender
## Subject: monit alert --  $EVENT
$SERVICE  # subject
##
## $EVENT Service $SERVICE                  
#
##                                          
#
##         Date:        $DATE                   #
##         Action:      $ACTION                 #
##         Host:        $HOST                   # body
##         Description:
$DESCRIPTION            #
##                                          
#
## Your faithful employee,                  
#
## monit                                    
#
## --8<--
##
## You can override the alert message format or its parts such as
subject
## or sender using the MAIL-FORMAT statement. Macros such as $DATE,
etc.
## are expanded on runtime. For example to override the sender:
#
# 简单的,这只改了一下发送人,有需要可以自己修改其它内容。
set mail-format { from: [email protected] }

# 设置邮件通知接收者。建议发到gmail,方便邮件过滤。
set alert [email protected]

set httpd port 2812
and            # 设置http监控页面的端口
     use address www.example.com   # http监控页面的IP或域名
     allow localhost               # 允许本地访问
     allow 58.68.78.0/24           # 允许此IP段访问
     ##allow 0.0.0.0/0.0.0.0       # 允许任何IP段,不建议这样干
     allow userxxx:passwordxxx     # 访问用户名密码

###############################################################################
##
Services
###############################################################################
#
# 系统整体运行状况监控,默认的就可以,可以自己去微调
#
# 系统名称,可以是IP或域名
check system www.example.com
    if loadavg (1min) > 4 then
alert
    if loadavg (5min) > 2 then
alert
    if memory usage > 75% then alert
    if cpu usage (user) > 70% then
alert
    if cpu usage (system) > 30% then
alert
    if cpu usage (wait) > 20% then
alert

#
# 监控nginx
#
# 需要提供进程pid文件信息
check process nginx with pidfile /var/run/nginx.pid
    # 进程启动命令行,注:必须是命令全路径
    start program =
"/etc/init.d/nginx start"
    # 进程关闭命令行
    stop program  = "/etc/init.d/nginx
stop"
    # nginx进程状态测试,监测到nginx连不上了,则自动重启
    if failed host www.example.com port 80 protocol http then restart
    # 多次重启失败将不再尝试重启,这种就是系统出现严重错误的情况
    if 3 restarts within 5 cycles then
timeout
    # 可选,设置分组信息
    group server

#   可选的ssl端口的监控,如果有的话
#    if failed port 443 type tcpssl
protocol http
#       with timeout 15
seconds
#       then restart

#
# 监控apache
#
check process apache with pidfile /var/run/apache2.pid
    start program =
"/etc/init.d/apache2 start"
    stop program  = "/etc/init.d/apache2
stop"
    # apache吃cpu和内存比较厉害,额外添加一些关于这方面的监控设置
    if cpu > 50% for 2 cycles then
alert
    if cpu > 70% for 5 cycles then
restart
    if totalmem > 1500 MB for 10
cycles then restart
    if children > 250 then
restart
    if loadavg(5min) greater than 10 for
20 cycles then stop
    if failed host www.example.com port 8080 protocol http then restart
    if 3 restarts within 5 cycles then
timeout
    group server
    # 可选,依赖于nginx
    depends on nginx

#
# 监控spawn-fcgi进程(其实就是fast-cgi进程)
#
check process spawn-fcgi with pidfile /var/run/spawn-fcgi.pid
    # spawn-fcgi一定要带-P参数才会生成pid文件,默认是没有的
    start program =
"/usr/bin/spawn-fcgi -a 127.0.0.1 -p 8081 -C 10 -u userxxx -g groupxxx -P
/var/run/spawn-fcgi.pid -f /usr/bin/php-cgi"
    stop program = "/usr/bin/killall
/usr/bin/php-cgi"
    # fast-cgi走的不是http协议,monit的protocol参数也没有cgi对应的设置,这里去掉protocol http即可。
    if failed host 127.0.0.1 port 8081
then restart
    if 3 restarts within 5 cycles then
timeout
    group server
    depends on nginx

虽然在注释里有详细说明,但是我还是要再强调说明几点:

  1. start和stop的program参数里的命令必须是全路径,否则monit不能正常启动,比如killall应该是/usr/bin/killall。
  1. 对于spawn-fcgi,很多人会用它来管理PHP的fast-cgi进程,但spawn-fcgi本身也是有可能挂掉的,所以还是需要用monit来监控spawn-fcgi。spawn-fcgi必须带-P参数才会有pid文件,而且fast-cgi走的不是http协议,monit的protocol参数也没有cgi对应的设置,一定要去掉protocol http这项设置才管用。
  2. 进程多次重启失败monit将不再尝试重启,收到这样的通知邮件表明系统出现了严重的问题,要引起足够的重视,需要赶紧人工处理。

当然monit除了管理进程之外,还可以监控文件、目录、设备等,本文不做讨论,具体配置方式可以去参考monit的官方文档

启动、停止、重启

标准的start、stop、restart

sudo/etc/init.d/monit start
sudo/etc/init.d/monit stop
sudo/etc/init.d/monit restart

看到正确的提示信息即可,若遇到问题可以去查看配置里指定的日志文件,如/var/log/monit.log。

从我的服务器这几年的运行情况(monit发了的通知邮件)来看,nginx挂掉的事几乎没有,但apache或fast-cgi出问题的情况还是比较多见,赶快用上monit来管理你的服务器以提高服务器稳定性,跟502 Bad Gateway之类错误说拜拜吧。

上面基本都是从网上转的啦。但安装后如果想用gmail发邮件:配置如下

先monit -V 查看你的版本,不过如果你是新安装的。应该都木问题的。 支持的版本是 monit version >= 4.10

然后配置如下:

set mailserver smtp.gmail.com port 587
    username "[email protected]" password "password"
    using tlsv1
    with timeout 30 seconds

  要注意的是: using 的是 tlsv1  大写(TLSV1)。 前面是字母L后面是数字1  。

[[email protected]_node_1 upgrade]# egrep -v "^$|^#" /etc/monit.conf
set daemon  10              # check services at 1-minute intervals
set logfile /var/log/monit.log
set idfile /var/monit/id
set statefile /var/monit/state
set httpd port 2812 and
    use address localhost  # only accept connection from localhost
    allow localhost        # allow localhost to connect to the server and
    allow admin:monit      # require user 'admin' with password 'monit'
    allow @monit           # allow users of group 'monit' to connect (rw)
    allow @users readonly  # allow users of group 'users' to connect readonly
check process jetty with pidfile /xor/data0/aqua/bin/jetty.pid
    start program = "/etc/init.d/jetty start"
    stop program = "/etc/init.d/jetty stop"
    if 9 restarts within 10 cycles then timeout
    group server
include /etc/monit.d/*

原文地址:http://blog.51cto.com/svsky/2130511

时间: 2024-10-10 23:43:29

用monit监控系统关键进程的相关文章

Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python

作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G fdisk -l /dev/sdb       查看新增加硬盘sdb的详细信息     第一个硬盘叫sda,新建的第二个就叫sdb,再增加一个就叫sdc,依此类推 fdisk /dev/sdb      给/dev目录下的sdb硬盘座磁盘分区      m  查看帮助 n  添加一个新

使用monit搭建一个监控系统

上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知道,平时可从web UI上看到整个系统的状况,同时它本身要轻量级,不要影响性能.当然了类似的产品很多了,比如Ganglia,我在老科长波哥曾经搭建过一个Ganglia系统监控科室十几台服务器,让我很是崇拜.本文重点介绍monit.                      monit是一个可以监控系

如何借助Monit搭建服务器监控系统?(1)

许多Linux管理员依赖一种集中式远程监控系统(比如Nagios或Cacti),检查网络基础设施的健康状况.虽然集中式监控系统为管理员在处理许多主机和设备时简化了工作,但专用的监控设备显然成了单一故障点;要是监控设备出现故障或者由于其他原因(比如硬件坏掉或网络停运)而联系不上,你就失去了可见性,无法了解整个基础设施的状况. 想为监控系统增添冗余机制,一个办法就是起码在网络上任何关键/核心服务器上安装独立的监控软件(作为一条退路).那样万一集中式监控系统坏掉,你仍能够通过备用的监控工具,保持可见性

使用Shell脚本对Linux系统和进程资源进行监控

ShellLinux脚本 摘要:Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.本文我们以Bash做为实例总结了使用Shell对系统和进程资源进行监控的一些内容,希望对您能有帮助. Shell语言对于接触Linux的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命 令并把它送入内核去执行.实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.它没有一般编程语言的“

使用 shell 脚本对 Linux 系统和进程资源进行监控

Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.它没有一般编程语言的“编译 - 链接 - 运行”过程.不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序.Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用

分布式监控系统Zabbix-3.0.3-完整安装记录 -添加进程与端口监控

对于进程和端口的监控,可以使用zabbix自带的key进行监控,只需要在server端维护就可以了,相比于nagios使用插件去监控的方式更为简单.下面简单介绍配置:1)监控端口zabbix监控端口使用如下key:key:net.tcp.listen[port]Checks if this port is in LISTEN state. 0 - it is not, 1 - it is inLISTEN state.解释:监听端口状态,返回结果为1,则运行:返回结果为0,则没有运行.比如监控s

庖丁解牛(一):监控系统

好朋友"雪糕"是前Baidu的高工,当年我们一起参与构建了一个庞大的运维自动化系统Noah.转载一些他的关于监控系统的感悟,我也深有同感. 我们在后来也用Python写了个简易版:51reboot/rebootMon-4 · GitHub 最近借着出去分享的机会,画了张简化的监控系统架构图: 写在前面 我从事运维自动化相关的工作,也已经8年了.当初刚开始做的时候,运维开发(devops)这词还不火.很少人知道.国内对运维的理解,也就是机房.服务器.苦逼的7*24小时值班.甚至当时还流传

开源IT监控系统对比

应邀对开源IT监控系统进行对比,选取了Nagios.Cacti.Zenoss.Zabbix.Hyperic HQ做为对比样本,帮助读者选择开源的IT监控系统作为底层,开发所需的监控运维工具. 1 背景和目标 1.1 前言 随着SaaS.P2P等各类在线应用的兴起,使得各类在线应用服务公司采购了大量的服务器等IT设施.而如何对庞大的IT设施进行有效的监控和管理,一直是很头疼的问题.以往,网络监控软件都是商业软件的天下,主要是BMC Patrol.CA Unicenter.HP OpenView或I

监控系统状态

10.1 使用w查看系统负载 监控系统状态 w/uptime 查看系统负载 cat /proc/cpuinfo 查看cpu核数 vmstat 监控系统状态 用法 vmstat 1 关键的几列:r,b,swpd,si,so,bi,bo,us,wa top查看进程使用资源情况 top -c 显示详细的进程信息 top -bn1 静态显示所有进程 q退出,数字1显示所有核cpu,大写字母M按内存使用排序 大写字母P按cpu使用排序 [[email protected] ~]# w 10:51:26 u