#脚本用途:检测Activemq集群的端口监听情况及其队列通畅情况
#!/usr/bin/env python
#coding=utf-8 
import paramiko
import time
import sys
import stomp
Aip = ("第一台mq服务器")
Bip = ("第二台mq服务器")
Cip = ("第三台mq服务器")
list = []

def Checknetstat():
    for i in (Aip,Bip,Cip):
        hostname=i
        username="root"
        password="服务器密码"    #这里默认三台服务器的密码是一样的
        paramiko.util.log_to_file("syslogin.log")
        ssh=paramiko.SSHClient()
        ssh.load_system_host_keys()
        ssh.connect(hostname=hostname,username=username,password=password)
        stdin,stdout,stderr=ssh.exec_command("netstat -ntpl | grep 61613 | wc -l")
        word=str(stdout.read().strip('\n'))    #考虑一下这里为什么会有一个strip?
        list.append(word)   #把for循环的结果变成一个list
        ssh.close()
    print list
    
def GoListen(xip):
    class MyListener(object):
        def on_error(self, headers, message):
            print('received an error %s' % message)
        def on_message(self, headers, message):
            print('received a message %s' % message)
    conn = stomp.Connection([(xip,61613)])
    conn.set_listener('', MyListener())
    conn.start()
    conn.connect('mq的账户','mq的密码')
    conn.subscribe(destination='/queue/队列名称', id=1, ack='auto')
    conn.send(body='具体的消息内容', destination='/queue/队列名称')
    time.sleep(2)
    conn.disconnect()
    
def Remotecommand():
    if list == ['1', '0', '0']:
        print ("第一台机器的61613端口处于监听状态,现在尝试往里面发送消息...")
        try:
                GoListen(Aip)
        except stomp.exception.ConnectFailedException:
                print ("发送信息失败,请重启Activemq进程...")
    elif list == ['0', '1', '0']:
        print ("第二台机器的61613端口处于监听状态,现在尝试往里面发送消息...")
        try:
                GoListen(Bip)
        except stomp.exception.ConnectFailedException:
                print ("发送信息失败,请重启Activemq进程...")
    elif list == ['0', '0', '1']:
        print ("第三台机器的61613端口处于监听状态,现在尝试往里面发送消息...")
        try:
                GoLinten(Cip)
        except stomp.exception.ConnectFailedException:
                print ("发送信息失败,请重启Activemq进程...")
    else:
        print ("activemq的61613端口处于异常,现在重启这三台mq...")
        pass    #这里可以单独写一个远程activemq重启的脚本
        
if __name__ == "__main__":
        Checknetstat()
        Remotecommand()

print("整个脚本执行结束,感谢您的使用!")


基本上来说,整个脚本的结构就是这样的,里面汉字的内容可以依照实际情况填写进去。


远程重启activemq脚本这里就不写了,跟远程查询61613端口的脚本一模一样,就是里面的命令改一下,所以在正常情况下启动本脚本的效果就是这样的:

wKiom1hY_Q3xIV3jAAA-X3gEd9Y997.png


或者是:

wKioL1hbi37Te7BGAAB3mkNelF4640.png