随着企业信息化建设的不断深入,各种后台服务如XXL-JOB等调度系统在企业中的应用越来越广泛。这些系统通常承载着企业关键业务的执行和调度,因此对其运行状态进行实时监控并在异常发生时及时通知相关人员,显得尤为重要。
下面将介绍如何使用Python来实现对XXL-JOB服务状态的监控,并在检测到异常时,将相关信息发送到企业微信群中。
一、XXL-JOB简介
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。它支持通过Web页面对任务进行动态管理,包括任务的增删改查、任务执行日志查看等功能。然而,对于服务状态的监控和异常通知,XXL-JOB本身并未提供完整的解决方案,这就需要我们结合其他工具和技术来实现。
二、Python监控xxl-job服务状态的优势
Python作为一种功能强大的编程语言,具有简单易学、扩展性强等特点。利用Python编写监控脚本,可以实现对xxl-job服务状态的实时监控,并通过自定义逻辑对异常信息进行处理。同时,Python丰富的第三方库支持,使得监控脚本的开发更加高效、便捷。
三、准备工作
1、准备环境
1)、安装Python环境(推荐Python 3.x版本)
2)、安装必要的Python库,requests(用于发起HTTP请求)、apscheduler(用于定时任务).
pip3 install apscheduler
pip3 install requests
2、配置企业微信
创建一个用于接收告警信息的企业微信群,把现有关注告警信息的同事拉到群里面。
在企业微信群组天添加一个群机器人,并获机器人的Webhook地址。
四、Python监控XXL-JOB服务状态
1、确定监控指标
在监控XXL-JOB服务状态时,我们需要关注一些关键指标,如服务是否在线、任务执行是否成功、任务执行时间是否异常等。这些指标可以通过访问XXL-JOB提供的API接口或查询数据库来获取。
2、编写Python监控脚本
使用Python编写一个监控脚本,定时访问XXL-JOB的API接口或查询数据库,获取服务状态和任务执行情况。对于获取到的数据,进行解析和判断,如果检测到异常,则记录异常信息并触发后续的通知操作。
下面是一个Python监控脚本示例:
#!/usr/bin/python
# -*- coding=utf-8
import os
import json
import time
import requests
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
class monitorInstance(object):
def __init__(self, ):
# 配置xxljob连接信息
self.xxljob_url = 'http://192.168.1.1:8060'
self.userName = 'xxljob'
self.password = 'xxljob'
# 企业微信 webhook 地址
self.webhook = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your-webhook-key'
print('xxljob ', datetime.datetime.now())
self.GiveAnAlarm()
def service_status(self, ):
service_list_params = {
"userName": self.userName,
"password": self.password,
"ifRemember": "on"
}
return service_list_params
def getActualService(self):
# 请求服务列表
service_list_url = self.xxljob_url + "/xxl-job-admin/login"
service_list_params = self.service_status()
try:
response = requests.post(service_list_url, data=service_list_params, timeout=5)
print(response.text)
if response.status_code == 200:
if response.json().get("accountId") == '1a1':
return '200'
elif response.status_code == 404:
return '404'
except requests.exceptions.ReadTimeout:
return 'ReadTimeout'
def alarm(self, msg):
if msg:
# 企业微信告警信息体,可以根据自己时间情况修改
MessageTitle = '重要告警信息\n>'
Messagedetails = ''
headers = {'Content-Type': 'application/json'}
message = '<font color=\"warning\"> %s</font>\n >%s \n' % (msg[0], msg[1])
Messagedetails = Messagedetails + message + str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
data = {
'msgtype': 'markdown',
'markdown': {
'content': MessageTitle + Messagedetails
}
}
requests.post(url=self.webhook, data=json.dumps(data), headers=headers)
else:
pass
def GiveAnAlarm(self):
not_exists_service = self.getActualService()
if not_exists_service == '200':
pass
elif not_exists_service == '404':
print('请求url错误,请检查配置.')
elif not_exists_service == 'ReadTimeout':
msg = ['xxlJob心跳检测超时了,清关注!', self.xxljob_url]
self.alarm(msg)
else:
msg = ['未知异常,需要关注', self.xxljob_url]
self.alarm(msg)
if __name__ == '__main__':
scheduler = BlockingScheduler()
# 监控频率,可以根据实际情况调整
scheduler.add_job(monitorInstance, 'cron', hour='6-21', minute='*/1')
print('Press--- Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
try:
scheduler.start()
except KeyboardInterrupt as SystemExit:
print(SystemExit)
scheduler.shutdown()
注意:上述示例中的self.xxljob_url、self.userName、self.password 需要替换为你实际部署的XXL-JOB服务器的连接信息,scheduler.add_job可以根据你的需求调整监控间隔时间,webhook调整为自己的webhook地址。
附上企业微信群组机器人官方开发文档:
群组机器人配置说明 - 文档 - 企业微信开发者中心https://developer.work.weixin.qq.com/document/path/91770
3、告警信息查看
在企业微信去就可以收到相关的告警信息了。
五、不重要的总结
通过Python监控xxl-job服务状态,并将异常信息实时发送到企业微信群,我们可以实现对xxl-job服务的全面监控和快速响应。
这不仅提高了企业运维的效率,也保障了企业业务的稳定运行。
在这个充满挑战的时代,让我们用科技的力量,为企业的发展保驾护航!