前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0基础上手python、PHP编程,ActiveMQ监控、报警、查询系统

0基础上手python、PHP编程,ActiveMQ监控、报警、查询系统

作者头像
王忘杰
发布2023-08-21 19:41:56
1520
发布2023-08-21 19:41:56
举报
文章被收录于专栏:王忘杰的小屋王忘杰的小屋

架构图 通过定时任务采集解析MQ XML数据存储到MYSQL数据库中,当前MQ积累值超过100时,说明消费异常,通过企业微信报警,MQ.php可查询历史记录。

预览 告警页面

查询页面,显示最后1000行数据

系统组成 MQchecktouch.py 初始化数据库 MQcheck.py 监控主程序 MQ.php 历史记录查询程序

初始化数据库 首先手动创建库和用户,通过MQchecktouch.py初始化,生成表

代码语言:javascript
复制
import mysql.connector
mqdb = mysql.connector.connect(
    host="127.0.0.1",
    user="mquser",
    passwd="mqpasswd",
    database="mq"
)
mqcursor = mqdb.cursor()
mqcursor.execute("CREATE TABLE mqdata (id INT AUTO_INCREMENT PRIMARY KEY,time VARCHAR(255), name VARCHAR(255), number VARCHAR(255))")
mqcursor.execute("CREATE TABLE configkey (name VARCHAR(255), config VARCHAR(255))")
insert_sql = "INSERT INTO configkey (name, config) VALUES ('config','1')"
mqcursor.execute(insert_sql)
mqdb.commit()
mqcursor.close()

初始化后的数据库

监控主程序 通过定时任务运行主程序

代码语言:javascript
复制
import requests,time
import xml.etree.cElementTree as ET
import mysql.connector

def get_mqxml():
    mqreq = requests.post(url='http://你的MQ地址:8161/admin/xml/queues.jsp', auth=('admin', 'admin'))
    mqxml = ET.fromstring(mqreq.content.decode())
    mqname_list = []
    mqnumbers_list = []
    for queue in mqxml.iter('queue'):
        mqname_list.append(queue.get("name"))
        mqnumbers_list.append(queue.find('stats').get("size"))
    return mqname_list,mqnumbers_list

def post_weixin(num,mqnumber):
    if num == 0:
        data = "6啊,MQ恢复了,当前累计值:"
    else:
        data = "G了,MQ当前累计值:"

    url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你自己的企业微信机器人'
    body = {
        "msgtype": "news",
        "news": {
            "articles": [
                {
                    "title": "MQ监控机器人",
                    "description": data+str(mqnumber),
                    "url": "90apt.com",
                    "picurl": "你自己的图片"
                }
            ]
        }
    }
    headers = {"Content-Type": "application/json"}
    response = requests.post(url, json=body)
    print(response.text)
    print(response.status_code)


def save_mysql():
    total = 0
    mqdb = mysql.connector.connect(
        host="127.0.0.1",
        user="mquser",
        passwd="mqpasswd",
        database="mq"
    )
    mqcursor = mqdb.cursor()
    nowtime = time.asctime()
    for ele in range(0, len(mqnumbers_list)):
        sql = "INSERT INTO mqdata (time ,name, number) VALUES (%s, %s, %s)"
        val = (nowtime, mqname_list[ele], mqnumbers_list[ele])
        mqcursor.execute(sql, val)
        total = total + int(mqnumbers_list[ele])
        mqdb.commit()
    print(total)
    if total > 10:
        getconfig_sql = "SELECT * FROM configkey WHERE name ='config'"
        mqcursor.execute(getconfig_sql)
        mqconfig = mqcursor.fetchall()[0][1]
        if mqconfig == "0":
            updateconfig_sql = "UPDATE configkey SET config = '1' WHERE name = 'config'"
            mqcursor.execute(updateconfig_sql)
            mqdb.commit()
            mqcursor.close()
            post_weixin(1,total)
        else:
            None
    else:
        getconfig_sql = "SELECT * FROM configkey WHERE name ='config'"
        mqcursor.execute(getconfig_sql)
        mqconfig = mqcursor.fetchall()[0][1]
        if mqconfig == "1":
            updateconfig_sql = "UPDATE configkey SET config = '0' WHERE name = 'config'"
            mqcursor.execute(updateconfig_sql)
            post_weixin(0, total)
            mqdb.commit()
            mqcursor.close()
        else:
            None

mqname_list = get_mqxml()[0]
mqnumbers_list = get_mqxml()[1]
save_mysql()


历史记录查询程序

代码语言:javascript
复制
<?php

$con=mysqli_connect("localhost","mquser","mqpasswd","mq");
// 检测连接
if (mysqli_connect_errno())
{
    echo "连接失败: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM mqdata order by time desc limit 1,1000");
while($row = mysqli_fetch_array($result))
{
    echo $row['time'] . " " . $row['name'] . " " . $row['number'];
    echo "<br>";
}
$conn = null;
?>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王忘杰的小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档