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分区创建脚本进行修改 (链接https://www.zabbix.org/wiki/Docs/howto/mysql_partition#MySQL_Database_Partitioning),执行脚本后结果如下:

对应的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

cronmon 定时任务执行状态监控相关推荐

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

    手动完成 "任务" 和 "监控" 主要有下面三步: 1. mission_cron.php(定时自动任务脚本): <?php /*** 自动任务 定时器 ...

  2. 如何使用机器学习进行异常检测和状态监控?

    https://www.toutiao.com/a6653038876652732939/ 2019-02-01 22:28:43 本文将介绍机器学习和统计分析的几种不同技术和应用,然后展示如何应用这 ...

  3. 修改定时任务不重启项目,SpringBoot如何实现?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/chenping1993/article/ details/108274814 业务场景描述:定时任务的任务名称,cron(定时 ...

  4. 监控平台(J2EE)声音告警程序功能设计与实现

    平台简单介绍: 是一个监控平台,做一些定时任务监控.主机批处理运行监控.主机实时交易信息监控以及主机监控等等.后台抽数部分是用C实现的,前端展示.分析.报警等用J2EE实现.而我正是负责J2EE这一块 ...

  5. 考拉定时任务框架kSchedule

    此文已由作者杨凯明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.背景 目前项目中使用的定时任务框架存在下面这些问题 没有统一的定时任务管理平台 目前项目中使用定时任务的 ...

  6. 贼好用,冰河再次升级了这款开源的精准定时任务和延时队列框架!!

    写在前面 在实际工作中,很多小伙伴在开发定时任务时,会采取定时扫描数据表的方式实现.然而,这种方式存在着重大的缺陷:如果数据量大的话,频繁的扫描数据表会对数据库造成巨大的压力:难以支撑大规模的分布式定 ...

  7. 分布式定时任务技术选型

    1.目前的定时任务方案 Java中开发大多数使用Spring-Scheduler,只需要在Spring中的bean的对应方法加上@sheduler注解即可完成我们的定时任务,但是光是用这个注解还远远不 ...

  8. 关于系统运维监控的几点建议

    眼下非常多企业信息化系统都有自己的监控平台和监控手段,不管是採用哪种手段去实现对系统的实时监控和故障告警,大多採用的方式也仅仅有两种:集中式监控和分布式监控.本文作者依据自身公司监控存在的问题,总结了 ...

  9. xxl子任务_阿里面试官:聊一下分布式任务调度有那些解决方案?

    作者:黄兆平 来源:http://blog.freshfood.cn/article/39 # 简介 随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务 ...

  10. docker安装redis提示没有日记写入权限_浅析Linux下Redis的攻击面(一)

    文章转自先知社区:https://xz.aliyun.com/t/7974 0x0 前言   Redis在内网渗透中常常扮演着重要的角色,其攻击方式非常多样化,在内网复杂的环境架构中容易出现各种问题, ...

最新文章

  1. Composer使用
  2. SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
  3. 常用window cmd命令
  4. MMC 不能打开文件
  5. 证明创建runnable实例和普通类时间一样长
  6. jetbrains ide连接服务器上的docker
  7. Python3爬虫入门之selenium库的用法
  8. Redis实现计数器---接口防刷---升级版(Redis+Lua)
  9. Java 实现JSON字符串、JSON对象和Java对象的相互转换(fastjson)
  10. 计算机房设计规范2008,电子信息系统机房设计规范(GB50174-2008)(下)
  11. perl脚本基础总结(转)
  12. db2 数据库的常用命令
  13. 微信气泡主题设置_微信猫和老鼠主题皮肤怎么设置 华为手机设置气泡主题方法...
  14. 《裁梦为魂》 - 银临 :OI版
  15. react-native与phonegap入门-曾亮-专题视频课程
  16. 国家开放大学2021春1174水工钢筋混凝土结构(本)题目
  17. springboot的RestTemplate客户端模式取得uaa的token
  18. 您可能不需要Twitter客户端,只需在New Twitter中学习热键
  19. Win7遇到错误无法正常开机进桌面怎么解决?
  20. HanLP的自定义词典使用方式与注意事项介绍 1

热门文章

  1. cookie和session的区别及其原理
  2. 如何用纯 CSS 创作一个 3D 文字跑马灯特效
  3. 最短路 Dijkstra 算法详解与模板
  4. Python 线程 进程 协程
  5. SQL处理非常见空串
  6. Scrapy 中的 Request 对象和 Respionse 对象
  7. 《CoderXiaoban团队》第一次作业:团队亮相
  8. 洛谷 1984 [SDOI2008]烧水问题
  9. eclipse Tomcat 启动报错
  10. Linux netstat常用命令