Python监控xxljob服务状态,异常信息发送到企业微信群

随着企业信息化建设的不断深入,各种后台服务如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地址。

附上企业微信群组机器人官方开发文档:

群组机器人配置说明 - 文档 - 企业微信开发者中心icon-default.png?t=N7T8https://developer.work.weixin.qq.com/document/path/91770

3、告警信息查看

在企业微信去就可以收到相关的告警信息了。

五、不重要的总结

通过Python监控xxl-job服务状态,并将异常信息实时发送到企业微信群,我们可以实现对xxl-job服务的全面监控和快速响应。

这不仅提高了企业运维的效率,也保障了企业业务的稳定运行。

在这个充满挑战的时代,让我们用科技的力量,为企业的发展保驾护航!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tw.Src

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值