温州做网站哪里好,深圳手机商城网站设计多少钱,学校网站建设的流程,互联网推广外包当我们在线上使用了ActiveMQ 后#xff0c;我们需要对一些参数进行监控#xff0c;比如 消息是否有阻塞#xff0c;哪个消息队列阻塞了#xff0c;总的消息数是多少等等。下面我们就通过 Zabbix 结合 Python 脚本来实现对 ActiveMQ的监控。
一、创建 Activemq Python 监控…当我们在线上使用了ActiveMQ 后我们需要对一些参数进行监控比如 消息是否有阻塞哪个消息队列阻塞了总的消息数是多少等等。下面我们就通过 Zabbix 结合 Python 脚本来实现对 ActiveMQ的监控。
一、创建 Activemq Python 监控脚本
因为 CentOS 系统默认安装的是 Python2.7为了避免麻烦我们这里的脚本也是对应的 Python2
Python2 监控脚本
# -*- coding: utf-8 -*-
# Time : 2019/6/25 9:26
# Author : djx
# Email : djxlsp163.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:typeBroker,brokerNamelocalhost/Queues/request urllib2.Request(urlurl, headersheaders)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(urlqueue_url, headersheaders)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 adminpassword adminip 127.0.0.1port 8161userinfo username : passworduserinfo_encode base64.b64encode(userinfo.encode(utf8))# 日志配置,注意下面日志文件的路径是采用相对路径的。logging.basicConfig(filename/var/log/activemq_mointer.log,filemodea,format%(asctime)s %(name)s:%(levelname)s:%(message)s,datefmt%d-%M-%Y %H:%M:%S,levellogging.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)
使用该脚本注意事项 传入参数只能一个 而且只能是 pending, pending_lists, queue_sum 分别代表阻塞消息数、阻塞消息队列名称、总的消息数。 脚本有日志记录和异常记录注意设置 日志文件路径假设脚本路径位于 /opt/scripts/,我们在该目录下进行执行脚本的话activemq_mointer.log 日志文件也就会产生在当前目录下。我们可以在路径中通过绝对路径来指定文件夹 形如 /var/log/activemq_mointer.log 该脚本是由 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.logPython3 脚本
# -*- coding: utf-8 -*-
# Time : 2019/6/25 9:20
# Author : djx
# Email : djxlsp163.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:typeBroker,brokerNamelocalhost/Queues/try:response requests.get(urlurl, headersheaders)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(urlqueue_url, headersheaders)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 adminpassword adminip 127.0.0.1port 8161userinfo username : passworduserinfo_encode base64.b64encode(userinfo.encode(utf8))# 日志配置logging.basicConfig(filename/var/log/activemq_mointer.log,filemodea,format%(asctime)s %(name)s:%(levelname)s:%(message)s,datefmt%Y-%m-%d %H:%M:%S,levellogging.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 UserParameteractivemq.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 version1.0 encodingUTF-8?
zabbix_exportversion4.0/versiondate2019-06-26T03:49:47Z/dategroupsgroupnameAWS-1688/name/groupgroupnameFy-hbg/name/group/groupstemplatestemplatetemplateTemplate App ActiveMQ/templatenameTemplate App ActiveMQ/namedescription/groupsgroupnameAWS-1688/name/groupgroupnameFy-hbg/name/group/groupsapplicationsapplicationnameActiveMQ/name/application/applicationsitemsitemnameactivemq pending amount/nametype0/typesnmp_community/snmp_oid/keyactivemq.mointer[pending]/keydelay1m/delayhistory90d/historytrends365d/trendsstatus0/statusvalue_type3/value_typeallowed_hosts/units条/unitssnmpv3_contextname/snmpv3_securityname/snmpv3_securitylevel0/snmpv3_securitylevelsnmpv3_authprotocol0/snmpv3_authprotocolsnmpv3_authpassphrase/snmpv3_privprotocol0/snmpv3_privprotocolsnmpv3_privpassphrase/params/ipmi_sensor/authtype0/authtypeusername/password/publickey/privatekey/port/description/inventory_link0/inventory_linkapplicationsapplicationnameActiveMQ/name/application/applicationsvaluemap/logtimefmt/preprocessing/jmx_endpoint/timeout3s/timeouturl/query_fields/posts/status_codes200/status_codesfollow_redirects1/follow_redirectspost_type0/post_typehttp_proxy/headers/retrieve_mode0/retrieve_moderequest_method0/request_methodoutput_format0/output_formatallow_traps0/allow_trapsssl_cert_file/ssl_key_file/ssl_key_password/verify_peer0/verify_peerverify_host0/verify_hostmaster_item//itemitemnameactivemq pending queue name/nametype0/typesnmp_community/snmp_oid/keyactivemq.mointer[pending_lists]/keydelay1m/delayhistory90d/historytrends0/trendsstatus0/statusvalue_type1/value_typeallowed_hosts/units/snmpv3_contextname/snmpv3_securityname/snmpv3_securitylevel0/snmpv3_securitylevelsnmpv3_authprotocol0/snmpv3_authprotocolsnmpv3_authpassphrase/snmpv3_privprotocol0/snmpv3_privprotocolsnmpv3_privpassphrase/params/ipmi_sensor/authtype0/authtypeusername/password/publickey/privatekey/port/description/inventory_link0/inventory_linkapplicationsapplicationnameActiveMQ/name/application/applicationsvaluemap/logtimefmt/preprocessing/jmx_endpoint/timeout3s/timeouturl/query_fields/posts/status_codes200/status_codesfollow_redirects1/follow_redirectspost_type0/post_typehttp_proxy/headers/retrieve_mode0/retrieve_moderequest_method0/request_methodoutput_format0/output_formatallow_traps0/allow_trapsssl_cert_file/ssl_key_file/ssl_key_password/verify_peer0/verify_peerverify_host0/verify_hostmaster_item//itemitemnameTotal number of activemq msg/nametype0/typesnmp_community/snmp_oid/keyactivemq.mointer[queue_sum]/keydelay1m/delayhistory90d/historytrends365d/trendsstatus0/statusvalue_type3/value_typeallowed_hosts/units条/unitssnmpv3_contextname/snmpv3_securityname/snmpv3_securitylevel0/snmpv3_securitylevelsnmpv3_authprotocol0/snmpv3_authprotocolsnmpv3_authpassphrase/snmpv3_privprotocol0/snmpv3_privprotocolsnmpv3_privpassphrase/params/ipmi_sensor/authtype0/authtypeusername/password/publickey/privatekey/port/description/inventory_link0/inventory_linkapplicationsapplicationnameActiveMQ/name/application/applicationsvaluemap/logtimefmt/preprocessing/jmx_endpoint/timeout3s/timeouturl/query_fields/posts/status_codes200/status_codesfollow_redirects1/follow_redirectspost_type0/post_typehttp_proxy/headers/retrieve_mode0/retrieve_moderequest_method0/request_methodoutput_format0/output_formatallow_traps0/allow_trapsssl_cert_file/ssl_key_file/ssl_key_password/verify_peer0/verify_peerverify_host0/verify_hostmaster_item//item/itemsdiscovery_rules/httptests/macros/templates/screens//template/templatestriggerstriggerexpression{Template App ActiveMQ:activemq.mointer[pending].avg(10m)}gt;5/expressionrecovery_mode1/recovery_moderecovery_expression{Template App ActiveMQ:activemq.mointer[pending].avg(5m)}0/recovery_expressionnameactivemq queue pending on {HOST.NAME}/namecorrelation_mode0/correlation_modecorrelation_tag/url/status0/statuspriority3/prioritydescriptionactivemq 消息发生阻塞10分钟内平均阻塞消息数超过5条/descriptiontype0/typemanual_close0/manual_closedependencies/tags//trigger/triggers
/zabbix_export
将该监控模板链接到对应的主机。
我们可以看到我们监控的数据了。
至此ActiveMQ 的监控项都已经配置好了。