supervisor与superlance简介

supervisor是一款用python编写的进程监控、进程守护和进程管理的工具,可以工作在各种UNIX-like的操作系统上,通过简单的配置就可以启动、监控和管理大量的进程,并且可以守护这些进程的运行,同时其还提供了一套自带的事件机制与XML-RPC API,可以很方便的在其之上扩展各种功能满足各类需要。 
而superlance就是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信通知机制等。同样的,superlance本身也是使用python编写的。

superlance的安装

由于本文主要介绍superlance插件,对supervisor本身的介绍不予以赘述。 
由于superlance是一个python包,安装起来十分简单,通过easy_install或者pip就可以简单的安装:

easy_install superlance
pip install superlance

当然也可以到github上获得最新的源码(https://github.com/Supervisor/superlance)并通过

python setup.py install

的方式安装。

安装后执行以下httpok命令,如果该命令存在,则说明superlance已经正常安装了。

superlance的组件

superlance是一系列命令行工具的集合,其包括以下这些命令:

  • httpok 
    通过定时对一个HTTP接口进行GET请求,根据请求是否成功来判定一个进程是否处于正常状态,如果不正常则对进程进行重启。
  • crashmail 
    当一个进程意外退出时,发送邮件告警。
  • memmon 
    当一个进程的内存占用超过了设定阈值时,发送邮件告警。
  • crashmailbatch 
    类似于crashmail的告警,但是一段时间内的邮件将会被合成起来发送,以避免邮件轰炸。
  • fatalmailbatch 
    当一个进程没有成功启动多次后会进入FATAL状态,此时发送邮件告警。与crashmailbatch一样会进行合成报警。
  • crashsms 
    当一个进程意外退出时发送短信告警,这个短信也是通过email网关来发送的。

superlance实战

在实际配置supervisor使用superlance之前,首先要安装sendmail,superlance使用这个命令行工具来发送email,利用各种包管理工具都可以简单的安装:

sudo apt-get install sendmail

(1)crashmail 
supervisor的配置内容如下:

[program:top]
command=top -b
process_name=%(program_name)s
numprocs=
directory=/tmp
umask=
priority=
autostart=false
autorestart=false
startsecs=
startretries=
exitcodes=,
stopsignal=TERM
stopwaitsecs=
redirect_stderr=true [eventlistener:crashmail]
command=crashmail -p top -m xmxjq01@gmail.com
events=PROCESS_STATE_EXITED
redirect_stderr=true

首先配置了一个名为top的进程监控项,其内容就是很简单的重复执行top -b,持续地输出当前系统的进程信息。 
随后配置了一个名为crashmail的事件监听器,它接受来自supervisor的PROCESS_STATE_EXITED事件,并且会触发crashmail的命令行调用。 
PROCESS_STATE_EXITED事件是在一个supervisor的监控项对应的进程意外退出时会触发的事件,这就使得一个进程出现意外退出的情况下会通知到crashmail。 
而在command参数中-p参数配置了crashmail只会对名为top的监控项作出响应,而-m参数中则配置了崩溃邮件会被发送到的地址。

上线了这些配置,就可以在supervisor的web端看到配置的两条内容,一条是top监控项,另外一条则是事件监听器crashmail: 

启动top,可以看到正常的top输出: 

通过shell的ps指令找到top对应的进程id,使用kill -9的方式强行结束进程,这使得supervisor可以判定top进程异常退出: 

最后收到了崩溃报警的邮件: 

通过这样的配置,就可以以邮件的方式来提醒你一个需要长期跑的进程挂掉的事实了。

(2)memmon 
与crashmail类似,只不过memmon监控的不是进程是否还活着而是监控进程的内存占用情况,这里首先先给出一段测试脚本:

#!/usr/bin/python
# -*- coding: utf- -*-
# Filename : memoryleak.py
import time class LeakTest(object):
def __init__(self):
print 'Object with id %d born here.' % id(self) def __del__(self):
print 'Object with id %d dead here.' % id(self) def doLeak():
A = LeakTest()
B = LeakTest()
A.b = B
B.a = A if __name__ == '__main__':
while True:
for i in range(, ):
doLeak()
time.sleep()

这段脚本在执行的过程中会出现内存泄露的情况,导致内存占用越来越大,直至无法系统无法再分配内存导致程序异常退出,利用这段脚本我们可以配置一个memmon的事件监听来发出内存泄露的告警。 
supervisor的配置如下:

[program:memoryleak]
command=python /home/xmxjq/supervisord/samples/memoryleak.py
process_name=%(program_name)s
numprocs=
directory=/tmp
umask=
priority=
autostart=false
autorestart=false
startsecs=
startretries=
exitcodes=,
stopsignal=TERM
stopwaitsecs=
redirect_stderr=true [eventlistener:memmon]
command=memmon -p memoryleak=1MB -m xmxjq01@gmail.com
events=TICK_60
redirect_stderr=true

这里memmon事件监听器监听的是TICK_60事件,也就是每60秒间隔触发一次的事件,这使得memmon会每60秒检测一次对应的监控项的占用内存情况,这里设置的是监控memoryleak监控项,如果其内存占用超过1MB,则会重启进程,并发送邮件进行告警。 
同样地上线这些配置,并启用memoryleak进程: 

运行60s后,memoryleak进程的内存占用已经达到了21M,超过了1MB的告警值,可以看到邮箱中收到了告警邮件: 

同时memoryleak的uptime也重置了,说明该进程已经被重启了,使得该进程可以保持正常运行,同时也达到了内存泄露告警的目的。

利用superlance插件提供的其他工具也可以完成各种各样的告警需求,扩展了supervisor的功能,这些工具的具体使用方法可以参考官方文档:https://superlance.readthedocs.org/en/latest/index.html

使用superlance插件增强supervisor的监控能力的更多相关文章

  1. 使用Hamcrest增强JUnit的测试能力

    package com.jadyer.service; import java.util.HashMap; import java.util.Map; import org.hamcrest.Matc ...

  2. jmeter使用笔记——脚本录制,JMeter使用plugins插件进行服务器性能监控

    脚本录制: 1.badboy录制 2.代理服务器录制 ①工作台添加HTTP代理服务器 ②设置目标控制器,分组,排除模式,包含模式(使用正则表达式筛选) ③设置浏览器,手动设置代理服务器,localho ...

  3. Mac下Supervisor进程监控管理工具的安装与配置

    Supervisor是一个类 unix 操作系统下的进程监控管理工具. Supervisor是由 Python 写成,可用 Python 的包安装管理工具 pip(Python Package Ind ...

  4. JMeter使用plugins插件进行服务器性能监控

    JMeter使用plugins插件进行服务器性能监控 性能测试时,我们的关注点有两部分 1 服务本身:并发响应时间 QPS 2 服务器的资源使用情况:cpu memory I/O disk等 JMet ...

  5. Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力

    阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito.Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixe ...

  6. 【JMeter】JMeter使用plugins插件进行服务器性能监控

    性能测试时,我们的关注点有两部分 1 服务本身:并发 响应时间 QPS 2 服务器的资源使用情况:cpu memory I/O disk等 JMeter的plugins插件可以实现对"二&q ...

  7. JMeter Plugin插件配置及远程监控

    下载jmeter plugins 插件: https://jmeter-plugins.org/downloads/all/ 官网建议我们直接下载plugins-manager.jar,然后进行可选择 ...

  8. sublime text3插件增强侧边栏的功能文件的复制粘贴

    快捷键ctrl + shift +p 输入  install package 回车,调出插件搜索器, 在搜索栏中输入 SideBarEnhancements 回车安装插件. 在侧边栏中的各种操作功能增 ...

  9. Fundebug发布Vue插件,简化BUG监控接入代码

    摘要: 代码越短越好! 我们发布了fundebug-vue插件,可以简化Vue框架接入Fundebug的代码. Vue如何接入Fundebug 1. 安装fundebug-javascript与fun ...

随机推荐

  1. C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 2 ...

  2. Android--使用Camera拍照

    前言 在开发Android应用的时候,如果需要调用摄像头获取拍摄的照片,除了通过Intent调用系统现有相机应用拍摄照片之外,还可以通过直接调用Camera硬件去去获取摄像头拍摄的照片.本篇博客将讲解 ...

  3. Android_ FragmentTabHost切换Fragment时避免重复加载UI

    使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Frag ...

  4. ELK-安装kibana

    注意:在下载tar包的时候需要注意下安装的es版本号,按照官网的说明版本是对应一致的. #下载tar包$ wget https://artifacts.elastic.co/downloads/kib ...

  5. Asp.Net路由重写为用户名或者ID

    有一个需求如下:指定某个Area的路由(Area:Wx)在其后面添加用户名或者ID作为URL参数,即像下面的样子: /Wx/xiaoming/ /Wx/xiaoming/photo /Wx/xiaom ...

  6. MySQL 笔记整理(7) --行锁功能:怎么减少行锁对性能的影响?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 7) --行锁功能:怎么减少行锁对性能的影响? MySQL的行锁是在引擎层由各个引擎自己实现的.因此,并不是所有的引擎都支持行锁,如 ...

  7. Java开发笔记(二十一)二维数组的扩展

    前面介绍的数组容纳的是一串数字,仿佛一根线把这组数字串了起来,故而它只是一维数组.一维数组用来表示简单的数列尚可,要是表达复杂的平面坐标系,那就力不从心了.由于平面坐标系存在水平和垂直两个方向,因此可 ...

  8. Android开发——Drawable与Bitmap知识

    从资源中获得drawable Drawable drawable = getResources().getDrawable(R.drawable.xxx); drawable转换bitmapdrawb ...

  9. jsp内置对象的作用范围

    内置对象的作用范围是指每个内置对象的某个实例在多长时间和多大的范围中有效,即在什么样的范围内可以有效地访问同一个对象实例. 在javax.servlet.jsp.PageContext的类中定义了4个 ...

  10. 免费开源ERP-成功案例分析(2)

    Odoo用户案例 Odoo用户概要 关于Odoo全球的用户,我们来看一些数据: Odoo目前全球有300万使用者 Odoo系统上每天新创建的数据库超过1000个 Odoo和Word.Excel.Pow ...