Superlance是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信通知机制等。同样的,superlance本身也是使用python编写的。

官网资料:http://supervisord.org/index.html   https://superlance.readthedocs.io/en/latest/index.html

superlance的安装

由于superlance是一个python包,安装起来十分简单,通过easy_install或者pip就可以简单的安装:

easy_install superlance
pip install superlance

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

python setup.py install

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

superlance的组件

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

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

superlance是基于supervisor的,所以要利用Supervisord进行进程监控和报警需要利用Supervisord的Event特性,编写一个listener,监控进程状态的改变,然后执行指定的代码。event的发起方是supervisord进程,接收方是一个叫listener的东西。listener和program一样,都是supervisord的子进程。两者的在配置上,很多选项也都一样。

.当supervisord启动的时候,如果我们的listener配置为autostart=true的话,listener就会作为supervisor的子进程被启动。
.listener被启动之后,会向自己的stdout写一个"READY"的消息,此时父进程也就是supervisord读取到这条消息后,会认为listener处于就绪状态。
.listener处于就绪状态后,当supervisord产生的event在listener的配置的可接受的events中时,supervisord就会把该event发送给该listener。
.listener接收到event后,我们就可以根据event的head,body里面的数据,做一系列的处理了。我们根据event的内容,判断,提取,报警等等操作。
.该干的活都干完之后,listener需要向自己的stdout写一个消息"RESULTnOK",supervisord接受到这条消息后。就知道listener处理event完毕了。

Supervisord支持的Event

参考:http://supervisord.org/events.html

PROCESS_STATE           进程状态发生改变
PROCESS_STATE_STARTING 进程状态从其他状态转换为正在启动 (Supervisord的配置项中有startsecs配置项,是指程序启动时需要程序至少稳定运行x秒才认为程序运行正常,在这x秒中程序状态为正在启动)
PROCESS_STATE_RUNNING 进程状态由正在启动转换为正在运行
PROCESS_STATE_BACKOFF 进程状态由正在启动转换为失败
PROCESS_STATE_STOPPING 进程状态由正在运行转换为正在停止
PROCESS_STATE_EXITED 进程状态由正在运行转换为退出
PROCESS_STATE_STOPPED 进程状态由正在停止转换为已经停止(exited和stopped的区别是exited是程序自行退出,而stopped为人为控制其退出)
PROCESS_STATE_FATAL 进程状态由正在运行转换为失败
PROCESS_STATE_UNKNOWN 未知的进程状态
REMOTE_COMMUNICATION 使用Supervisord的RPC接口与Supervisord进行通信
PROCESS_LOG 进程产生日志输出,包括标准输出和标准错误输出
PROCESS_LOG_STDOUT 进程产生标准输出
PROCESS_LOG_STDERR 进程产生标准错误输出
PROCESS_COMMUNICATION 进程的日志输出包含 和
PROCESS_COMMUNICATION_STDOUT 进程的标准输出包含 和
PROCESS_COMMUNICATION_STDERR 进程的标准错误输出包含 和
SUPERVISOR_STATE_CHANGE_RUNNING Supervisord 启动
SUPERVISOR_STATE_CHANGE_STOPPING Supervisord 停止
TICK_5 每隔5秒触发
TICK_60 每隔60秒触发
TICK_3600 每隔3600触发
PROCESS_GROUP Supervisord的进程组发生变化
PROCESS_GROUP_ADDED 新增了Supervisord的进程组
PROCESS_GROUP_REMOVED 删除了Supervisord的进程组

Superlance监听配置

1、配置邮件发送(如果使用之前文章中提到的mail命令发送邮件的话可忽略此步)

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

# yum install sendemail -y

默认的时候crashmail使用的是linux系统的sendmail,发送出去的邮件很容易隐藏自己的信息,所以一般邮件服务商针对这些邮件会报错,大概是DSN, service unavailable, 貌似是你的ip地址和dns反解析不一致导致,所以无法发送邮件。所以本文采用的实际上是sendemail,一个非常强大的使用perl语言写的支持附件发送等诸多功能的脚本。

官网地址:http://caspian.dotconf.net/menu/Software/SendEmail/

# sendemail -f 发件人邮箱 -t 收件人邮箱 -s 发件人邮箱smtp服务器 -u "MyAlarmEmail" -m "wjoyxt" -xu 发件人用户名 -xp 发件人邮箱密码
-f 发件人
-t 收件人
-s 发件人smtp服务器
-u 主题
-o message-content-type=html 邮件内容的格式,html表示它是html格式,默认是text,可选 <auto|text|html>
-o message-charset=utf8 邮件内容编码,中文支持
-m 内容
-xu 发件人用户名
-xp 发件人密码

例如:echo "this is wjoyxt" | sendemail -f dataalarm@wjoyxt.com -t wang@wjoyxt.com -s smtp.mxhichina.com -u '进程警报'  -o message-charset=utf8 -xu dataalarm@wjoyxt.com -xp Bigdata@2019@ -m >/dev/null 2>&1

 2、配置事件监听器

[eventlistener:crashmail]
command=crashmail -a -s "sendemail -f dataalarm@wjoyxt.com -t alarm@wjoyxt.com -s smtp.mxhichina.com -u 'Process is crashed' -xu dataalarm@wjoyxt.com -xp Bigdata@2019@ -m >/dev/null 2>&1" -m alarm@wjoyxt.com
events=PROCESS_STATE_EXITED
redirect_stderr=false

[eventlistener:crashmail]
command=crashmail -a -s "mail -s 'Process is crashed' alarm@wjoyxt.com" -m alarm@wjoyxt.com
events=PROCESS_STATE_EXITED
redirect_stderr=false

command参数中 -p 参数配置了crashmail只会对名为redis的监控项作出响应,而 -m 参数中则配置了崩溃邮件会被发送到的地址,-a 监控所有项

crashmail是一个主管“事件监听器”,用于订阅PROCESS_STATE_EXITED事件。当crashmail 收到该事件并且转换是"意外的(not expected)"时,crashmail 会将电子邮件通知发送到已配置的地址

events=PROCESS_STATE_EXITED,PROCESS_STATE_STOPPED,PROCESS_STATE_FATAL,PROCESS_LOG_STDERR 多个事件时,用逗号隔开

PROCESS_STATE_EXITED是在一个supervisor的监控项对应的进程意外退出时会触发的事件,这就使得一个进程出现意外退出的情况下会通知到crashmail。

测试实例:

[program:tail]
command=tail -f /home/hottopic/test.log
user=root
autostart=true
autorestart=true
startretries=

# kill -9 tail 手动触发报警测试

利用Superlance监控Supervisor运行状态并实现报警的更多相关文章

  1. 利用superlance监控supervisor运行状态

    此文已由作者张家裕授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近开发问到supervisor管理下的进程重启了,有无办法做到主动通知,楼主最先想到的是superviso ...

  2. 利用shell监控cpu、磁盘、内存使用率

    利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ################################# ...

  3. Prometheus 监控目标运行状态并邮件通知

    Prometheus 监控目标运行状态并邮件通知 邮件服务安装:https://www.cnblogs.com/xiangsikai/p/9809654.html 告警规则示例:https://pro ...

  4. 监控MySQL运行状态:MySQLD Exporter

    具体监控配置详看这篇文章:https://www.cnblogs.com/sanduzxcvbnm/p/13094580.html 为了确保数据库的稳定运行,通常会关注一下四个与性能和资源利用率相关的 ...

  5. 一步步实现Nagios监控linux主机及飞信报警

    一步步实现Nagios监控linux主机及飞信报警 上篇文章介绍了在linux主机上架设nagios监控服务,并对windows主机进行服务状态变化的监控,这次我们继续上次内容.      首先实现n ...

  6. 使用Grafana 展示Docker容器的监控图表并设置邮件报警规则

    一.Docker 容器监控报警方式 接着上篇文章的记录,看到grafana的版本已经更新到4.2了,并且在4.0以后的版本中,加入了Alert Notifications 功能,这样在对容器 监控完, ...

  7. C#实现软件监控外部程序运行状态的方法

    本文实例讲述了C#实现软件监控外部程序运行状态的方法.分享给大家供大家参考.具体方法如下: 需要外挂一个程序,用于监控另一个程序运行状态,一旦检测到另一程序关闭,就触发一个事件做其他处理. using ...

  8. linux脚本监控应用且通过邮件报警异常

    一.背景 最近接到监控应用并通过邮件报警的任务,由于需求比较简单,故没有使用springboot那套,而是采用linux脚本的方式进行监控. 二.思路 通过linux自带的定时功能,定时执行一个lin ...

  9. linux下利用JMX监控Tomcat

    利用JMX监控Tomcat,就是相当于部署在tomcat上的应用作为服务端,也就是被管理资源的对象.然后通过程序或者jconsole远程连接到该应用上来.远程连接需要服务器端提供ip和port.如果需 ...

随机推荐

  1. Python3 import tensorflow 出现FutureWarning: Passing (type, 1) or '1type' 问题

    解决python调用TensorFlow时出现FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecate ...

  2. Linux中Nginx中添加自签证书TLS

    创建自签证书TLS openssl req \ -newkey rsa: \ -x509 \ -nodes \ -keyout test.com.key \ -new \ -out test.com. ...

  3. Pandas 之 描述性统计案例

    认识 jupyter地址: https://nbviewer.jupyter.org/github/chenjieyouge/jupyter_share/blob/master/share/panda ...

  4. postgresql源代码结构

    转载学习: 德哥培训! 源码下载: https://www.postgresql.org/ftp/source/ 1.postgressql源码目录结构 2.src目录结构

  5. Django 之 restframework 频率组件的使用

    Django 之 restframework 频率组件的使用以及源码分析 频率组件的使用 第一步,先写一个频率类,继承SimpleRateThrottle 一定要在这个类里面配置一个scop='字符串 ...

  6. 技术分享 | mysql 表数据校验

    1. checksum table. checksum table 会对表一行一行进行计算,直到计算出最终的 checksum 结果.比如对表 n4 进行校验(记录数 157W,大小为 4G) [yt ...

  7. 洛谷P2216 理想的正方形(单调队列)

    洛谷P2216 理想的正方形 题目链接 思路: 直接暴力显然不可行,可以发现每一个矩形向右边扩展时是一列一列增加,于是可以想到单调队列,用数组来维护当前每列的最大值.因为行也有限制,所以还要用一个单调 ...

  8. flask实战-个人博客-程序骨架、创建数据库模型、临接列表关系 --

    编写程序骨架 personalBlog的功能主要分为三部分:博客前台.用户认证.博客后台,其中包含的功能点如下图所示: 数据库 personalBlog一共需要使用四张表,分别存储管理员(Admin) ...

  9. 前段性能----repaint和reflow

    在前面小节,我们对网页渲染过程做了介绍,其中最后两步就是layout与paint,当渲染对象被创建并添加到树中,它们并没有位置和大小,计算这些值的过程称为layout或reflow.绘制阶段,遍历渲染 ...

  10. Spark常规性能调优

    1.1.1     常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行 ...