cronmon 定时任务执行状态监控

cronmon是一个计划任务(定时任务)监控系统,可以对循环执行的程序和脚本进行监控告警,当其未按照预期执行时,发送邮件到对应邮箱进行通知。同时可以将监控任务划分到不同业务下面,每个业务可以分配不同的通知人,建立业务、通知人和监控任务的多层级关系。
 
       通过以一定的间隔发送HTTPS请求到特定的URL实现监控。如果URL未按时接受到请求,对应的业务通知人则会收到告警。
 
       也就是说,你可以在你的计划任务或者程序脚本中,根据执行结果进行条件判断,如果成功则发送请求到cronmon,这样的任务可以包括数据库备份、安全扫描、数据同步等任何你认为重要的,需要保证其在指定时间间隔完成的任务。
   
   
主要功能介绍

  • 登录;

  • 登录之后,看到的是首页:包括业务、通知人、任务和日志相关汇总信息,以及图表展示一段时间API请求数据;

  • 任务管理相关操作:这里是系统最核心的功能,监控任务管理,包括新建,编辑,删除,监控日志查看。;

  • 系统管理相关操作:系统用户角色分为二种,拥有所有权限的系统管理员和绑定若干业务的业务管理员。在这里,你可以新建、编辑、删除用户以及业务权限分配;


  
API调用

目前API仅针对监控任务,包括获取所有监控任务和基于关键字进行的任务过滤,json格式返回。

  • 获取所有监控任务

  • 按指定关键字获取任务(业务名、任务名和任务URL)

公共参数包括page(显示第几页)和length(每页显示多少记录)
  
如何使用监控链接

在不同情况下调用任务监控URL的写法

  • crontab写法
# system status check
20 * * * * cd /path/to/systemStatusCheck && ./systemStatusCheck.sh > systemStatusCheck.sh.cron.log 2>&1 && curl -kfsS --retry 3 --connect-timeout 10 --ipv4 https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx >> systemStatusCheck.sh.cron.log 2>&1
  • bash写法
curl -kfsS --retry 3 --connect-timeout 10 --ipv4 https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • python写法
import requests
requests.get(‘https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx‘)

生产环境

本部分是针对生产环境一些额外的配置优化,包括日志表自动分区脚本、程序管理服务化(linux)、nginx配置和日志轮转配置。

  • 服务启停

以CentOS为例,首先编辑相关变量

然后将启动脚本(production/init.d/cronmon)放入/etc/init.d目录

$ service cronmon help
Usage: cronmon {start|stop|restart|reload|status|help}
$ chkconfig --level 35 cronmon on  # 加入开机启动
  • 日志分区

针对日志表数据,为了方便管理和提高效率,使用mysql分区,首先导入存储过程创建sql文件(production/cronmonPartition.sql),
脚本首先修改表结构,添加了复合主键(id+create_datetime),然后创建了所需的5个存储过程,脚本基于zabbix分区创建脚本进行修改,执行脚本后结果如下:

对应的shell脚本

对应的crontab配置

# cronmon mysql partition
15 0 * * * cd /path/to/cronmonMysqlPartition && ./cronmonMysqlPartition.sh > cronmonMysqlPartition.sh.cron.log 2>&1 && curl -kfsS --retry 3 --connect-timeout 10 --ipv4 https://cronmon.yoursite.io/api/monlink/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx >> cronmonMysqlPartition.sh.cron.log 2>&1
  • WebService配置

以nginx为例

  • 日志轮转

以logrotate为例


  
压力测试

本系统主要的压力是客户端对监控URL的请求,而网站本身操作的压力以及API请求的压力相对较小,有鉴于此,针对此部分进行了压力测试。

  • 配置调整

uwsgi相关配置

[uwsgi]
listen=10240
processes=8
gevent=100

系统相关配置

# echo ‘net.core.somaxconn=4096‘ >> /etc/sysctl.conf
  • 压测表现

使用ab对监控链接进行压力测试,10000并发无错误(目前只测试到10000并发,未测试更高并发),客户端和服务端网络延迟在11ms左右:

$ ab -n 50000 -c 10000 https://cronmon.yoursite.com/api/monlink/ba60afc4-f162-11e8-a56a-001b7872e686

获取帮助

如果想进一步了解安装配置,数据库变更和系统网站的功能可以点击github

原文地址:http://blog.51cto.com/14119308/2326447

时间: 2024-10-02 07:34:02

cronmon 定时任务执行状态监控的相关文章

[Shell] swoole_timer_tick 与 crontab 组合实现定时任务和监控

手动完成 "任务" 和 "监控" 主要有下面三步: 1. mission_cron.php(定时自动任务脚本): <?php /** * 自动任务 定时器 (5s 执行). * * swoole_timer_tick 解决秒级定时: * 如需调整,注意配置路径 和 mission_cron_monitor. * * Daemon Run: * ./mission_cron_monitor * * Foreground Run: * php mission_cr

[Shell] swoole_timer_tick 与 crontab 实现定时任务和监控

手动完成 "任务" 和 "监控" 主要有下面三步: 1. mission_cron.php(定时自动任务脚本): <?php /** * 自动任务 定时器 (5s 执行). * * swoole_timer_tick 解决秒级定时: * 如需调整,注意配置路径 和 mission_cron_monitor. * * Daemon Run: * ./mission_cron_monitor * * Foreground Run: * php mission_cr

支持万台服务器分布式监控系统原始手稿

作者:付炜超 如果你本来打算做一个特别牛的东西,最终不管什么原因没做到,但是你实现的也够cool了! 需求分析: 随着现在的企业不断的发展壮大,大多数的企业都出现了分公司.办事处这类的分支机构,由于总公司还要求对下面子公司的网络设备.主机等资源的状态有着相关的了解,所以就要求IT运维部门对不在同一地域的网络.主机等资源都要进行监控. 功能分析: 1.一个监控系统往往需要集成资产管理,可以从逻辑上展示业务和功能的信息,通过对其进行数据分析,做到对投资与回报的一个反馈展示,为资产的合理规划与使用提供

Django使用Celery异步任务队列

1  Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收的工作任务,这个功能依赖于消息队列(MQ.Redis). 1.1  Celery原理 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件:Celery本身不提供消息服务,但

分布式任务调度的解决方案

简介 随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务系统,每个业务系统都有定时任务的需求,如果都在自身系统中调度,一方面增加业务系统的复杂度,另一方面也不方便管理,因此需要有一个任务平台对分散的任务进行统一管理调度,基于目前的情况,任务平台需要支持以下几个方面: 1.任务统一管理,提供图形化界面对任务进行配置和调度. 2.任务并发控制,同一个任务在同一时间只能允许一个执行. 3.任务弹性扩容,可根据繁忙情况动态增减服务器分摊压力,对大任务进行分

spark内核揭秘-09-RDD的count操作 触发Job全生命周期-02

接着上一篇文章继续分析代码: 3.1.3.3.3.1.进入TaskSet 方法: 3.1.3.3.3.2.进入taskScheduler.submitTasks(new TaskSet(tasks.toArray, stage.id, stage.newAttemptId(), stage.jobId, properties)) 方法: 从源代码中可以看出DAGScheduler中向TaskScheduler以Stage为单位提交任务,Stage是以TaskSet为单位的,构建一个TaskSet

HDFS High Availability Using the Quorum Journal Manager

目的 本指南提供一个HDFS HA特性的综述,描述了如何使用QJM配置和管理一个HA HDFS集群.本文档假设读者对于HDFS中的通用组件和节点类型有一个大体的认识.请参考HDFS架构指南获取更多信息. 注意:使用QJM或者传统的共享存储 本文档讨论了如何用QJM配置和使用HDFS HA在Active NameNode和Standby NameNode共享edit日志文件.关于如何使用NFS代替QJM作为共享存储配置HDFS HA的信息,请看High Availability With NFS.

Linux学习之六-Linux系统的基础优化

Linux系统的基础优化 何谓'优化'.顾名思义,优化就是采取某些措施使某个东西或者某事物变得更加优异,出色.对于Linux而言,在初期安装好系统之后,也需要对其进行一定的基础优化,可分为安全上的优化,性能上的优化,安装常用软件包等. 1.selinux的优化 查看selinux状态getenforce 临时关闭setenforce 0 永久关闭selinux 需修改相应配置文件vi /etc/selinux/config 或者利用Linux命令中的sed替换 sed -i 's#SELINUX

EasyTrack项目管理软件的四大版本和相关组件介绍

蓝云EasyTrack项目管理软件,遵循PMBOK和PRINCE2等国际通用项目管理理论,产品特性涵盖个人空间.管理驾驶舱.项目管理.项目组合管理.知识管理等,提供全面的项目管理解决方案. 蓝云EasyTrack分为快捷版.专业版.企业版.战略版四个版本,客户可根据所在的领域和实际需求选择购买项目和项目组合管理领域.应用生命周期管理领域.商务管理领域的相关应用组件,选择更有针对性,性价比高. 以下为四个版本的功能和适用对象的比较: 快捷版--提供个人仪表板,支持消息和公告.评论和沟通.我的任务和