curl循环监控_cronmon: cronmon 是一个计划任务(定时任务)监控系统,可以对循环执行的程序和脚本进行监控告警,当其未按照预期执行时,发送邮件到对应邮箱进行通知...

cronmon

cronmon 是一个计划任务(定时任务)监控系统,可以对循环执行的程序和脚本进行监控告警,当其未按照预期执行时,发送邮件到对应邮箱进行通知。

同时可以将监控任务划分到不同业务下面,每个业务可以分配不同的通知人,建立业务、通知人和监控任务的多层级关系。

通过以一定的间隔发送HTTPS请求到特定的URL实现监控。如果URL未按时接受到请求,对应的业务通知人则会收到告警。

你可以监控你的数据库备份和安全扫描等关键性任务。

cronmon.svg?branch=master

badge.svg?branch=master

cronmonweb.svg

cronmonweb.svg

安装

从github下载安装

$ git clone git@github.com:bruceye777/cronmon.git

$ python setup.py install # 如果无需安装到site-packages目录,此步可省略。

初始化

解压缩/安装之后,需要进行初始化工作,包括全局配置修改、系统表初始化和样例数据插入。

$ vim cronmon/conf/config.py # 全局配置修改

globalConfig.png

$ python migrate.py init # 系统表初始化,初始用户名和密码均为cronadmin

$ python migrate.py sample # 样例数据插入

init.png

启停程序

$ uwsgi cronmon.ini& # 启动程序

$ uwsgi --stop /var/run/uwsgi_cronmon.pid # 停止程序

如果将cronmon安装成服务(使用production/cronmon文件)

$ service cronmon start # 启动程序

$ service cronmon stop # 停止程序

使用

登录;

login.png

登录之后,看到的首页;

home.png

业务管理相关操作;

businesslist.png

businessedit.png

通知人管理相关操作;

notifylist.png

notifyedit.png

业务通知人管理相关操作;

businessnotifylist.png

businessnotifyedit.png

任务管理相关操作;

tasklist.png

taskedit.png

taskloglist.png

系统管理相关操作;

permlist.png

permedit.png

passwordreset.png

permbizedit.png

用户相关操作;

user.png

passwordchange.png

业务管理员(普通用户)操作界面,业务通知人和任务可以查询编辑,通知人仅限查询;

normalUser.png

API调用

获取所有监控任务

apiTasksAll.png

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

apiTasksTaskname.png

apiTasksBizname.png

apiTasksUrl.png

公共参数包括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')

生产环境

服务启停

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

serviceManageConfig.png

然后将启动脚本(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),执行脚本后结果如下:

mysqlPartitionTableStructure.png

mysqlPartitionProcedures.png

对应的shell脚本

mysqlPartitionShellScript.png

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

nginxConfig.png

日志轮转

以logrotate为例

logRotate.png

数据库结构变更

如果要新增表或者修改表结构,通过如下方式进行:

$ vim migrate.py # 修改表结构定义文件

createNewTable.png

alterCurrentTable.png

压力测试

配置调整

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

abStressTest.png

贡献

如果您想贡献代码,只需fork本仓库,然后push您的更改并发送pull请求。

获取帮助

如果您有任何问题或建议,请在此仓库中打开一个issue,我会尽力提供帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值