MQ狀態監控


mq為我們提供豐富的API,我們可以通過對其api的訪問來監控mq的狀態。例如:消息堆積情況,鏈接情況等。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
import httplib
import base64
import socket
import time
import logging
import logging.config
import requests

# rabbitmq服務器
useServerList = []
prodServerList = []
#betaServerList = []

# mq連接信息
port = 15672
username = "userName"
password = "yourPasswd"


# 構建api路徑
path = "/api/overview"
method = "GET"

# udp monintor url
HOST = "http://localhost:1988/metrics"

# log_format
LOG_FILENAME = "error.log"
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"
DATE_FORMAT = "%m-%d-%Y %H:%M:%S %p"
logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT, filemode='a')


# 獲取線上在用的mq主機
def getUsingMq(serverList):
    for server in serverList:
        sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sk.settimeout(2)
        try:
            sk.connect((server, port))
            useServerList.append(server)
        except Exception:
            logging.error("\033[1;31;mServer port is not in use\033[0m")
        sk.close()


# 獲取mq連接數及消息堆積數
def getConnNum(mqServer, mqPort):
    # authorize
    credentials = base64.b64encode("%s:%s" % (username, password))

    # 連接mq服務器
    conn = httplib.HTTPConnection(mqServer, mqPort)
    try:
        conn.request(method, path, "", {"Content-Type": "application/json", "Authorization": "Basic " + credentials})
    except socket.error:
        logging.error("UNKNOWN: Could not connect to %s:%s" % (mqServer, mqPort))
    response = conn.getresponse().read()
    conn.close()
    return response


if __name__ == "__main__":
    # getUsingMq(betaServerList)
    while True:
        getUsingMq(prodServerList)
        for s in useServerList:
            res = getConnNum(s, port)
            djson = json.loads(res)
            connectionsTotal = djson["object_totals"]["connections"]
            messagesTotal = djson["queue_totals"]["messages_unacknowledged"]
            if s.split('-')[0] == "wg":
                ezone = "wg1"
            else:
                ezone = s.split('-')[0]
            points = [{"name": "mqMonitor",
                       "tags": {"ezone": ezone, "host": s},
                       "timestamp": int(1000 * time.time()),
                       "fields": [
                           {"name": "rabbitmq_connections_total", "type": "gauge", "value": connectionsTotal},
                           {"name": "rabbitmq_queue_messages_total", "type": "gauge", "value": messagesTotal}]
                       }]
            print(points)
            r = requests.post(HOST, params={"key": "system"}, json=points)
            #assert r.text == "OK"
            r.close()
        time.sleep(5)
        useServerList = []


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM