Zabbix监控ActiveMQ

当我们在线上使用了ActiveMQ 后,我们需要对一些参数进行监控,比如 消息是否有阻塞,哪个消息队列阻塞了,总的消息数是多少等等。下面我们就通过 Zabbix 结合 Python 脚本来实现对 ActiveMQ的监控。

一、创建 Activemq Python 监控脚本

因为 CentOS 系统默认安装的是 Python2.7,为了避免麻烦,我们这里的脚本也是对应的 Python2

Python2 监控脚本

# -*- coding: utf-8 -*-
# @Time    : 2019/6/25 9:26
# @Author  : djx
# @Email   : djxlsp@163.com
# @File    : mointer_mq_python2.py
# @Software: PyCharm
# @Python_version: python2.7import base64
import urllib2
import json
import logging
import sysdef activemq_mointer(userinfo_encode):# 总的消息阻塞数pending_queue_sum = 0# 阻塞消息的队列名称pending_queue_lists = ''# 总的消息数mq_sum = 0headers = {'Authorization': 'Basic {}'.format(userinfo_encode),'ua': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36'}url = 'http://' + ip + ':' + port + \'/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/Queues/'request = urllib2.Request(url=url, headers=headers)try:response = urllib2.urlopen(request)except Exception as e:logging.error(e)return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}  # 当服务不可用时,返回预警数字,用于预警。activemq_info = response.read()activemq_info_json = json.loads(activemq_info)activemq_queues = activemq_info_json['value']for i in activemq_queues:queue_url = 'http://' + ip + ':' + port + \'/api/jolokia/read/' + i['objectName']queue_request = urllib2.Request(url=queue_url, headers=headers)try:queue_response = urllib2.urlopen(queue_request)except Exception as e:logging.error(e)return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}queue_info = queue_response.read()info_dict = json.loads(queue_info)mq_sum += info_dict['value']['EnqueueCount']if int(info_dict['value']['QueueSize']) > 0:  # 取值 QueueSize ,就是未消费的消息数量pending_queue_sum += info_dict['value']['QueueSize']pending_queue_lists += info_dict['value']['Name']pending_queue_lists += ' and 'logging.info("消息队列--{}--有阻塞消息--{} 条".format(info_dict['value']['Name'],info_dict['value']['QueueSize']))return {'pending_queue_sum': pending_queue_sum, 'pending_queue_lists': pending_queue_lists, 'mq_sum': mq_sum}if __name__ == '__main__':# ActiveMQ 服务器信息username = 'admin'password = 'admin'ip = '127.0.0.1'port = '8161'userinfo = username + ':' + passworduserinfo_encode = base64.b64encode(userinfo.encode('utf8'))# 日志配置,注意下面日志文件的路径是采用相对路径的。logging.basicConfig(filename="/var/log/activemq_mointer.log",filemode="a",format="%(asctime)s %(name)s:%(levelname)s:%(message)s",datefmt="%d-%M-%Y %H:%M:%S",level=logging.DEBUG)if len(sys.argv) == 2:mointer_argv = sys.argv[1]if mointer_argv in ('pending', 'pending_lists', 'queue_sum'):mq_re = activemq_mointer(userinfo_encode)if mointer_argv == 'pending':print(mq_re['pending_queue_sum'])elif mointer_argv == 'pending_lists':print(mq_re['pending_queue_lists'])else:print(mq_re['mq_sum'])else:# 错误提示print("Please enter the correct parameters pending|pending_lists|queue_sum")else:# 错误提示print("Please enter the correct parameters pending|pending_lists|queue_sum")

使用该脚本注意事项:

  1. 传入参数只能一个 ,而且只能是 pending, pending_lists, queue_sum ,分别代表阻塞消息数、阻塞消息队列名称、总的消息数。

  2. 脚本有日志记录和异常记录,注意设置 日志文件路径,假设脚本路径位于 /opt/scripts/,我们在该目录下进行执行脚本的话,activemq_mointer.log 日志文件也就会产生在当前目录下。我们可以在路径中通过绝对路径来指定文件夹 形如 /var/log/activemq_mointer.log

  3. 该脚本是由 zabbix agent 进行使用 ,所以我们需要设置该 脚本的权限,以及保证该脚本的用户有创建日志文件的权限(或者我们先前创建好对应权限日志文件)

    sudo chown  zabbix:zabbix  mointer_mq_python2.py
    sudo  chmod 744 mointer_mq_python2.py
    sudo  touch /var/log/activemq_mointer.log
    sudo chown  zabbix:zabbix  /var/log/activemq_mointer.log
    

Python3 脚本

# -*- coding: utf-8 -*-
# @Time    : 2019/6/25 9:20
# @Author  : djx
# @Email   : djxlsp@163.com
# @File    : mointer_mq.py.py
# @Software: PyCharm
# @Python_version: python3import  base64
import  requests
import  logging
import  sysdef activemq_mointer(userinfo_encode):# 总的消息阻塞数pending_queue_sum = 0# 阻塞消息的队列名称pending_queue_lists = ''# 总的消息数mq_sum = 0headers = {'Authorization': 'Basic {}'.format(str(userinfo_encode,'utf-8')),'ua': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36'}url = 'http://' + ip + ':' + port + '/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/Queues/'try:response = requests.get(url=url, headers=headers)except Exception as e:logging.error(e)return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}  # 当服务不可用时,返回预警数字,用于预警。activemq_info = response.json()activemq_queues = activemq_info['value']for i in activemq_queues:queue_url = 'http://' + ip + ':' + port + '/api/jolokia/read/' + i['objectName']try:queue_info = requests.get(url=queue_url, headers=headers)except Exception as e:logging.error(e)return {'pending_queue_sum': 110, 'pending_queue_lists': '110', 'mq_sum': 0}info_dict = queue_info.json()mq_sum += info_dict['value']['EnqueueCount']if int(info_dict['value']['QueueSize']) > 0:  # 取值 QueueSize ,就是未消费的消息数量pending_queue_sum += info_dict['value']['QueueSize']pending_queue_lists += info_dict['value']['Name']pending_queue_lists += ' and 'logging.info("Queues--{}--peding msg --{}".format(info_dict['value']['Name'],info_dict['value']['QueueSize']))return {'pending_queue_sum': pending_queue_sum, 'pending_queue_lists': pending_queue_lists, 'mq_sum': mq_sum}if __name__ == '__main__':# ActiveMQ 服务器信息username = 'admin'password = 'admin'ip = '127.0.0.1'port = '8161'userinfo = username + ':' + passworduserinfo_encode = base64.b64encode(userinfo.encode('utf8'))# 日志配置logging.basicConfig(filename="/var/log/activemq_mointer.log",filemode="a",format="%(asctime)s %(name)s:%(levelname)s:%(message)s",datefmt="%Y-%m-%d %H:%M:%S",level=logging.INFO)if len(sys.argv) == 2:mointer_argv = sys.argv[1]if mointer_argv in ('pending', 'pending_lists', 'queue_sum'):mq_re = activemq_mointer(userinfo_encode)if mointer_argv == 'pending':print(mq_re['pending_queue_sum'])elif mointer_argv == 'pending_lists':print(mq_re['pending_queue_lists'])else:print(mq_re['mq_sum'])else:# 错误提示print("Please enter the correct parameters pending|pending_lists|queue_sum")else:# 错误提示print("Please enter the correct parameters pending|pending_lists|queue_sum")

二 、设置 zabbix agent

设置 zabbix agent

# 将监控项配置写入配置文件
sudo echo "UserParameter=activemq.mointer[*],python /opt/scripts/mointer_mq_python2.py \$1 " >> /opt/zabbix-agent/etc/zabbix_agentd.conf
# 重启zabbix agent
sudo systemctl restart  zabbix-agent 

三、导入监控项:

监控模板 xml 文件。(该监控模板包含三个监控项,一个触发器)

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export><version>4.0</version><date>2019-06-26T03:49:47Z</date><groups><group><name>AWS-1688</name></group><group><name>Fy-hbg</name></group></groups><templates><template><template>Template App ActiveMQ</template><name>Template App ActiveMQ</name><description/><groups><group><name>AWS-1688</name></group><group><name>Fy-hbg</name></group></groups><applications><application><name>ActiveMQ</name></application></applications><items><item><name>activemq pending amount</name><type>0</type><snmp_community/><snmp_oid/><key>activemq.mointer[pending]</key><delay>1m</delay><history>90d</history><trends>365d</trends><status>0</status><value_type>3</value_type><allowed_hosts/><units></units><snmpv3_contextname/><snmpv3_securityname/><snmpv3_securitylevel>0</snmpv3_securitylevel><snmpv3_authprotocol>0</snmpv3_authprotocol><snmpv3_authpassphrase/><snmpv3_privprotocol>0</snmpv3_privprotocol><snmpv3_privpassphrase/><params/><ipmi_sensor/><authtype>0</authtype><username/><password/><publickey/><privatekey/><port/><description/><inventory_link>0</inventory_link><applications><application><name>ActiveMQ</name></application></applications><valuemap/><logtimefmt/><preprocessing/><jmx_endpoint/><timeout>3s</timeout><url/><query_fields/><posts/><status_codes>200</status_codes><follow_redirects>1</follow_redirects><post_type>0</post_type><http_proxy/><headers/><retrieve_mode>0</retrieve_mode><request_method>0</request_method><output_format>0</output_format><allow_traps>0</allow_traps><ssl_cert_file/><ssl_key_file/><ssl_key_password/><verify_peer>0</verify_peer><verify_host>0</verify_host><master_item/></item><item><name>activemq pending queue name</name><type>0</type><snmp_community/><snmp_oid/><key>activemq.mointer[pending_lists]</key><delay>1m</delay><history>90d</history><trends>0</trends><status>0</status><value_type>1</value_type><allowed_hosts/><units/><snmpv3_contextname/><snmpv3_securityname/><snmpv3_securitylevel>0</snmpv3_securitylevel><snmpv3_authprotocol>0</snmpv3_authprotocol><snmpv3_authpassphrase/><snmpv3_privprotocol>0</snmpv3_privprotocol><snmpv3_privpassphrase/><params/><ipmi_sensor/><authtype>0</authtype><username/><password/><publickey/><privatekey/><port/><description/><inventory_link>0</inventory_link><applications><application><name>ActiveMQ</name></application></applications><valuemap/><logtimefmt/><preprocessing/><jmx_endpoint/><timeout>3s</timeout><url/><query_fields/><posts/><status_codes>200</status_codes><follow_redirects>1</follow_redirects><post_type>0</post_type><http_proxy/><headers/><retrieve_mode>0</retrieve_mode><request_method>0</request_method><output_format>0</output_format><allow_traps>0</allow_traps><ssl_cert_file/><ssl_key_file/><ssl_key_password/><verify_peer>0</verify_peer><verify_host>0</verify_host><master_item/></item><item><name>Total number of  activemq msg</name><type>0</type><snmp_community/><snmp_oid/><key>activemq.mointer[queue_sum]</key><delay>1m</delay><history>90d</history><trends>365d</trends><status>0</status><value_type>3</value_type><allowed_hosts/><units></units><snmpv3_contextname/><snmpv3_securityname/><snmpv3_securitylevel>0</snmpv3_securitylevel><snmpv3_authprotocol>0</snmpv3_authprotocol><snmpv3_authpassphrase/><snmpv3_privprotocol>0</snmpv3_privprotocol><snmpv3_privpassphrase/><params/><ipmi_sensor/><authtype>0</authtype><username/><password/><publickey/><privatekey/><port/><description/><inventory_link>0</inventory_link><applications><application><name>ActiveMQ</name></application></applications><valuemap/><logtimefmt/><preprocessing/><jmx_endpoint/><timeout>3s</timeout><url/><query_fields/><posts/><status_codes>200</status_codes><follow_redirects>1</follow_redirects><post_type>0</post_type><http_proxy/><headers/><retrieve_mode>0</retrieve_mode><request_method>0</request_method><output_format>0</output_format><allow_traps>0</allow_traps><ssl_cert_file/><ssl_key_file/><ssl_key_password/><verify_peer>0</verify_peer><verify_host>0</verify_host><master_item/></item></items><discovery_rules/><httptests/><macros/><templates/><screens/></template></templates><triggers><trigger><expression>{Template App ActiveMQ:activemq.mointer[pending].avg(10m)}&gt;=5</expression><recovery_mode>1</recovery_mode><recovery_expression>{Template App ActiveMQ:activemq.mointer[pending].avg(5m)}=0</recovery_expression><name>activemq queue  pending on {HOST.NAME}</name><correlation_mode>0</correlation_mode><correlation_tag/><url/><status>0</status><priority>3</priority><description>activemq 消息发生阻塞,10分钟内平均阻塞消息数超过5条</description><type>0</type><manual_close>0</manual_close><dependencies/><tags/></trigger></triggers>
</zabbix_export>

将该监控模板链接到对应的主机。

我们可以看到我们监控的数据了。

至此,ActiveMQ 的监控项都已经配置好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

39. Linux系统下在Qt5.9.9中搭建Android开发环境

1. 说明 QT版本:5.9.9 电脑系统:Linux JDK版本:openjdk-8-jdk SDK版本:r24.4.1 NDK版本:android-ndk-r14b 效果展示: 2. 具体步骤 大致安装的步骤如下:①安装Qt5.9.9,②安装jdk,③安装ndk,④安装sdk,⑤在qt中配置前面安装的环境路径 2.1 安装Qt5.9.9 首先下载…

PHP8的数据类型-PHP8知识详解

在PHP8中&#xff0c;变量不需要事先声明&#xff0c;赋值即声明。 不同的数据类型其实就是所储存数据的不同种类。在PHP8.0、8.1中都有所增加。以下是PHP8的15种数据类型&#xff1a; 1、字符串&#xff08;String&#xff09;&#xff1a;用于存储文本数据&#xff0c;可以使…

VScode的简单使用

一、VScode的安装 Visual Studio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱…

node.js 爬虫图片下载

主程序文件 app.js 运行主程序前需要先安装使用到的模块&#xff1a; npm install superagent --save axios要安装指定版,安装最新版会报错&#xff1a;npm install axios0.19.2 --save const {default: axios} require(axios); const fs require(fs); const superagent r…

STM32 UDS Bootloader开发-上位机篇-CANoe制作(2)

文章目录 前言CANoe增加NodeCAPL脚本获取GUI中的参数刷写过程诊断仪在线接收回调函数发送函数总结前言 在上一篇文章中,介绍了UDS Bootloadaer上位机软件基于CANoe的界面设计。本文继续介绍CAPL脚本的编写以实现刷写过程。 CANoe增加Node 在开始编写CAPL之前,需要在Simula…

Android 耗时分析(adb shell/Studio CPU Profiler/插桩Trace API)

1.adb logcat 查看冷启动时间和Activity显示时间&#xff1a; 过滤Displayed关键字&#xff0c;可看到Activity的显示时间 那上面display后面的是时间是指包含哪些过程的时间呢&#xff1f; 模拟在Application中沉睡1秒操作&#xff0c;冷启动情况下&#xff1a; 从上可知&…

【RTT驱动框架分析01】-pin/gpio驱动分析

0gpio使用测试 LED测试 #define LED1_PIN GET_PIN(C, 1) void led1_thread_entry(void* parameter) {rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);while(1){rt_thread_delay(50); //delay 500msrt_pin_write(LED1_PIN, PIN_HIGH);rt_thread_delay(50); //delay 50…

MySQL之深入InnoDB存储引擎——物理文件

文章目录 一、参数文件二、日志文件三、表结构定义文件四、InnoDB 存储引擎文件1、表空间文件2、重做日志文件 一、参数文件 当 MySQL 实例启动时&#xff0c;数据库会先去读一个配置参数文件&#xff0c;用来寻找数据库的各种文件所在位置以及指定某些初始化参数。在默认情况…

6-Linux的磁盘分区和挂载

Linux的磁盘分区和挂载 Linux分区查看所有设备的挂载情况 将磁盘进行挂载的案例增加一块磁盘的总体步骤1-在虚拟机中增加磁盘2- 分区3-格式化分区4-挂载分区5-进行永久挂载 磁盘情况查询查询系统整体磁盘使用情况查询指定目录的磁盘占用情况 磁盘情况-工作实用指令统计文件夹下…

Vue3搭建启动

Vue3搭建&启动 一、创建项目二、启动项目三、配置项目1、添加编辑器配置文件2、配置别名3、处理sass/scss4、处理tsx(不用的话可以不处理) 四、添加Eslint 一、创建项目 npm create vite 1.project-name 输入项目名vue3-vite 2.select a framework 选择框架 3.select a var…

关于前端框架vue2升级为vue3的相关说明

一些框架需要升级 当前&#xff08;202306&#xff09; Vue 的最新稳定版本是 v3.3.4。Vue 框架升级为最新的3.0版本&#xff0c;涉及的相关依赖变更有&#xff1a; 前提条件&#xff1a;已安装 16.0 或更高版本的Node.js&#xff08;摘&#xff09; 必须的变更&#xff1a;核…

C语言进阶——文件的打开(为什么使用文件、什么是文件、文件的打开和关闭)

目录 为什么使用文件 什么是文件 程序文件 数据文件 文件名 文件的打开和关闭 文件指针 打开和关闭 为什么使用文件 在之前学习通讯录时&#xff0c;我们可以给通讯录中增加、删除数据&#xff0c;此时数据是存放在内存中&#xff0c;当程序退出的时候&#xff0c;通讯…

【弹力设计篇】聊聊灾备设计、异地多活设计

单机&集群架构 对于一个高可用系统来说&#xff0c;为了提升系统的稳定性&#xff0c;需要以下常用技术服务拆分、服务冗余、限流降级、高可用架构设计、高可用运维&#xff0c;而本篇主要详细介绍下&#xff0c;高可用架构设计。容灾备份以及同城多活&#xff0c;异地多活…

OpenCV实现高斯模糊加水印

# coding:utf-8 # Email: wangguisendonews.com # Time: 2023/4/21 10:07 # File: utils.pyimport cv2 import PIL from PIL import Image import numpy as np from watermarker.marker import add_mark, im_add_mark import matplotlib.pyplot as plt# PIL Image转换成OpenCV格…

redis分布式锁

Redis 作者继续论述&#xff0c;如果对方认为&#xff0c;发生网络延迟、进程 GC 是在步骤 3 之后&#xff0c;也就是客户端确认拿到了锁&#xff0c;去操作共享资源的途中发生了问题&#xff0c;导致锁失效&#xff0c;那这不止是 Redlock 的问题&#xff0c;任何其它锁服务例…

Flowable-任务-脚本任务

定义 脚本任务&#xff08;Script Task&#xff09;是一种自动执行的活动。当流程执行到达脚本任务时&#xff0c;会执行相应的 脚本&#xff0c;完毕后继续执行后继路线。脚本任务无须人为参与&#xff0c;可以通过定义脚本实现自定义的业务逻辑。 图形标记 脚本任务显示为…

数据结构基础:3.单链表的实现。

单链表的介绍和实现 一.基本概念1.基本结构2.结构体节点的定义&#xff1a; 二.功能接口的实现0.第一个节点&#xff1a;plist1打印链表2创建一个节点3.头插4.头删5.尾插6.尾删7.查找8.在pos之前插入x9.在pos之后插入x10.删除pos位置11.删除pos的后一个位置12.链表释放 三.整体…

C语言每天一练----输出水仙花数

题目&#xff1a;请输出所有的"水仙花数" 题解&#xff1a;所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。 例如, 153是水仙花数, 因为153 1 * 1 * 1 5 * 5 * 5 3 * 3 * 3" #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h&g…

【自动化运维】Ansible常见模块的运用

目录 一、Ansible简介二、Ansible安装部署2.1环境准备 三、ansible 命令行模块3.1&#xff0e;command 模块3.2&#xff0e;shell 模块3.3&#xff0e;cron 模块3.4&#xff0e;user 模块3.5&#xff0e;group 模块3.6&#xff0e;copy 模块3.7&#xff0e;file 模块8&#xff…

【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU

早上百度搜“神经网络KPU”&#xff0c;查到与非网的一篇文章《一文读懂APU/BPU/CPU/DPU/EPU/FPU/GPU等处理器》&#xff0c;介绍各种处理器非常详细&#xff0c;关于“KPU”的内容如下&#xff1a; KPU Knowledge Processing Unit。 嘉楠耘智&#xff08;canaan&#xff09;号…