ActiveMQ 可观测性最佳实践

ActiveMQ 介绍

ActiveMQ 是一款高性能、开源的消息中间件,支持多种消息协议(如 JMS、AMQP、MQTT 等),能够实现应用程序之间的异步通信和消息传递。它提供点对点(Queue)和发布/订阅(Topic)两种消息模型,支持消息持久化、事务处理、消息优先级、延迟消息等功能,确保消息的可靠传输和顺序处理。此外,ActiveMQ 还具备集群、主从复制等高可用性特性,以及灵活的配置和扩展能力,适用于构建分布式系统和微服务架构,帮助开发者构建高效、可靠的消息驱动应用。

ActiveMQ 监控是确保消息中间件高可用性和性能的关键环节。通过监控关键指标,如连接数、消费者和生产者数量、队列和主题的入队/出队速率、内存和存储使用率、以及死信队列消息数量等,可以及时发现并解决潜在问题。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

部署 DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。

登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。

数据采集

ActiveMQ 配置

ActiveMQ 使用 Java 语言编写,支持通过 jmx prometheus 插件进行指标暴露。

  • 下载 jmx-exporter

下载地址:GitHub - prometheus/jmx_exporter: A process for collecting metrics using JMX MBeans for Prometheus consumption

  • 新增 ActiveMQ jmx 配置

在 ActiveMQ 的 conf 目录下新增 jmx.yaml 文件,内容如下:

lowercaseOutputName: true
lowercaseOutputLabelNames: true
blacklistObjectNames:- "org.apache.activemq:clientId=*,*"
whitelistObjectNames:- "org.apache.activemq:destinationType=Queue,*"- "org.apache.activemq:destinationType=Topic,*"- "org.apache.activemq:type=Broker,brokerName=*"- "org.apache.activemq:type=Topic,brokerName=*"- "org.apache.activemq:type=Broker,brokerName=*,destinationType=Queue,destinationName=*,endpoint=*,clientId=*,consumerId=*"- "org.apache.activemq:type=Broker,brokerName=*,destinationType=Topic,destinationName=*,endpoint=*,clientId=*,consumerId=*"
rules:
- pattern: org.apache.activemq:type=Broker,brokerName=(\S+),destinationType=(\S+),destinationName=(\S+),endpoint=(\S+),clientId=(\S+),consumerId=(\S+),?>(\w+)name: "activemq_consumer_$7"labels:broker_name: "$1"destination_type: "$2"destination_name: "$3"endpoint: "$4"client_id: "$5"consumer_id: "$6"- pattern: org.apache.activemq<type=Broker, brokerName=(\S*), destinationType=Queue, destinationName=(\S*)><>(\w+)name: activemq_queue_$3attrNameSnakeCase: truelabels:broker_name: "$1"destination_name: "$2"destination_type: "Queue"- pattern: org.apache.activemq<type=Broker, brokerName=(\S*), destinationType=Topic, destinationName=(\S*)><>(\w+)name: activemq_topic_$3attrNameSnakeCase: truelabels:broker_name: "$1"destination_name: "$2"destination_type: "Topic"- pattern: org.apache.activemq<type=Broker, brokerName=(\S*)><>CurrentConnectionsCountname: activemq_connectionstype: GAUGElabels:broker_name: "$1"connection_type: current
- pattern: org.apache.activemq<type=Broker, brokerName=(\S*)><>TotalConnectionsCountname: activemq_connectionstype: GAUGElabels:broker_name: "$1"connection_type: total- pattern: org.apache.activemq<type=Broker, brokerName=(\S*)><>Total(.*)Countname: activemq_$2_totaltype: COUNTERlabels:broker_name: "$1"- pattern: org.apache.activemq<type=Broker, brokerName=(\S*)><>(.*)PercentUsagename: activemq_$2_usage_ratiotype: GAUGElabels:broker_name: "$1"valueFactor: 0.01
  • 调整 ActiveMQ 启动参数

在 ActiveMQ 的 bin 目录下,修改 setenv 文件,添加如下内容:

ACTIVEMQ_OPTS="-javaagent:${ACTIVEMQ_BASE}/jmx_prometheus_javaagent-1.2.0.jar=8081:${ACTIVEMQ_BASE}/conf/jmx.yaml"

当前设置的端口号为 8081,下面采集会用到,可以进行调整,但需要跟采集端口保持一致。

  • 重启 ActiveMQ
bin/activemq stop
bin/activemq start
DataKit 开启 Prom 采集器

开启 prometheus 采集器采集 ActiveMQ 的指标。进入 DataKit 安装目录 /usr/local/datakit/conf.d,复制 prom 目录下的配置文件并命名为 activemq.conf。 示例如下:

cp prom.conf.sample activemq.conf

调整内容如下:

[[inputs.prom]]## Exporter URLs.urls = ["http://localhost:8081/metrics"]source = "activemq" 
...
重启 DataKit

调整完毕后,重启 DataKit。

datakit service -R

关键指标

指标名称描述单位
connections当前与 ActiveMQ Broker 建立的客户端连接数量
consumer_total累计创建的消费者(Consumer)数量
dequeue_total所有队列/主题中成功被消费的消息总数
enqueue_total所有队列/主题中接收到的新消息总数
jobschedulerstore_usage_ratioJobSchedulerStore 的使用比例,表示持久化任务存储空间占用百分比(%)
memory_usage_ratioActiveMQ Broker 使用的内存占配置上限的比例百分比(%)
message_total当前在 Broker 上存在的所有消息数量(包括待处理和未确认的消息)
producer_total累计创建的消息生产者(Producer)数量
queue_always_retroactive表示该队列是否启用“始终回溯”功能,允许新消费者获取历史消息布尔值(0/1)
queue_average_blocked_time队列因资源不足而阻塞的时间平均值毫秒(ms)
queue_average_enqueue_time消息进入队列所需的平均时间毫秒(ms)
queue_average_message_size队列中消息的平均字节大小字节(B)
queue_blocked_producer_warning_interval生产者因队列满而被阻塞的警告间隔时间秒(s)
queue_blocked_sends因队列满而导致生产者被阻塞的累计次数
queue_cache_enabled表示当前队列是否启用了缓存机制布尔值(0/1)
queue_consumer_count当前订阅或监听该队列的消费者数量
queue_cursor_full表示队列的消息游标(Cursor)是否已达到最大容量布尔值(0/1)
queue_cursor_memory_usage队列游标使用的内存量字节(B)
queue_cursor_percent_usage队列游标内存使用占总分配内存的比例百分比(%)
queue_dequeue_count从该队列中成功消费的消息数量
queue_dispatch_count已经尝试派发给消费者的累计消息数量
queue_dlq被转移到死信队列(DLQ)中的消息数量
queue_duplicate_from_store_count由于网络或其他问题导致消息从持久化存储中重复读取的次数
queue_enqueue_count添加到该队列的消息数量
queue_expired_count因设置 TTL 而过期的消息数量
queue_forward_count该队列将消息转发到其他目的地的累计次数
queue_in_flight_count正在被消费者处理但尚未确认的消息数量
queue_max_audit_depth审计重复消息时的最大记录条目数
queue_max_enqueue_time消息进入队列所需时间的最大值毫秒(ms)
queue_max_message_size队列中单条消息的最大字节大小字节(B)
queue_max_page_size分页加载消息时的最大页大小
queue_max_producers_to_audit可以被追踪并用于重复检查的生产者最大数量
queue_memory_limit该队列为消息存储所分配的最大内存字节(B)
queue_memory_percent_usage队列当前内存使用占配置上限的比例百分比(%)
queue_memory_usage_byte_count队列当前实际占用的内存大小字节(B)
queue_memory_usage_portion队列在整体内存使用中的占比浮点数(0~1)
queue_min_enqueue_time消息进入队列所需时间的最小值毫秒(ms)
queue_min_message_size队列中单条消息的最小字节大小字节(B)
queue_paused表示该队列是否处于暂停状态布尔值(0/1)
queue_prioritized_messages表示是否启用消息优先级排序功能布尔值(0/1)
queue_producer_count当前向该队列发送消息的生产者数量
queue_producer_flow_control是否启用生产者流量控制布尔值(0/1)
queue_queue_size当前队列中等待被消费的消息总数
queue_send_duplicate_from_store_to_dlq从持久化存储中发送到死信队列的重复消息数量
queue_store_message_size队列中所有消息在持久化存储中的总大小字节(B)
queue_temp_usage_limit队列临时消息存储的最大限制字节(B)
queue_temp_usage_percent_usage队列临时存储使用占配置上限的比例百分比(%)
queue_total_blocked_time队列因资源不足而导致的累计阻塞时间毫秒(ms)
queue_use_cache表示该队列是否启用了缓存机制布尔值(0/1)
store_usage_ratio主消息存储(如文件系统或数据库)的使用比例百分比(%)
temp_usage_ratio临时消息存储的使用比例百分比(%)
topic_always_retroactive表示该主题是否启用“始终回溯”功能,允许新消费者获取历史消息布尔值(0/1)
topic_average_blocked_time主题因资源不足而阻塞的时间平均值毫秒(ms)
topic_average_enqueue_time消息进入主题所需的平均时间毫秒(ms)
topic_average_message_size主题中消息的平均字节大小字节(B)
topic_blocked_producer_warning_interval生产者因主题满而被阻塞的警告间隔时间秒(s)
topic_blocked_sends因主题满而导致生产者被阻塞的累计次数
topic_cache_enabled表示当前主题是否启用了缓存机制布尔值(0/1)
topic_consumer_count当前订阅或监听该主题的消费者数量
topic_cursor_full表示主题的消息游标(Cursor)是否已达到最大容量布尔值(0/1)
topic_cursor_memory_usage主题游标使用的内存量字节(B)
topic_cursor_percent_usage主题游标内存使用占总分配内存的比例百分比(%)
topic_dequeue_count从该主题中成功消费的消息数量
topic_dispatch_count已经尝试派发给消费者的累计消息数量
topic_dlq被转移到死信主题(DLQ)中的消息数量
topic_duplicate_from_store_count由于网络或其他问题导致消息从持久化存储中重复读取的次数
topic_enqueue_count添加到该主题的消息数量
topic_expired_count因设置 TTL 而过期的消息数量
topic_forward_count该主题将消息转发到其他目的地的累计次数
topic_in_flight_count正在被消费者处理但尚未确认的消息数量
topic_max_audit_depth审计重复消息时的最大记录条目数
topic_max_enqueue_time消息进入主题所需时间的最大值毫秒(ms)
topic_max_message_size主题中单条消息的最大字节大小字节(B)
topic_max_page_size分页加载消息时的最大页大小
topic_max_producers_to_audit可以被追踪并用于重复检查的生产者最大数量
topic_memory_limit该主题为消息存储所分配的最大内存字节(B)
topic_memory_percent_usage主题当前内存使用占配置上限的比例百分比(%)
topic_memory_usage_byte_count主题当前实际占用的内存大小字节(B)
topic_memory_usage_portion主题在整体内存使用中的占比浮点数(0~1)
topic_min_enqueue_time消息进入主题所需时间的最小值毫秒(ms)
topic_min_message_size主题中单条消息的最小字节大小字节(B)
topic_prioritized_messages表示是否启用消息优先级排序功能布尔值(0/1)
topic_producer_count当前向该主题发送消息的生产者数量
topic_producer_flow_control是否启用生产者流量控制布尔值(0/1)
topic_queue_size当前主题中等待被消费的消息总数
topic_send_duplicate_from_store_to_dlq从持久化存储中发送到死信主题的重复消息数量
topic_store_message_size主题中所有消息在持久化存储中的总大小字节(B)
topic_temp_usage_limit主题临时消息存储的最大限制字节(B)
topic_temp_usage_percent_usage主题临时存储使用占配置上限的比例百分比(%)
topic_total_blocked_time主题因资源不足而导致的累计阻塞时间毫秒(ms)
topic_use_cache表示该主题是否启用了缓存机制布尔值(0/1)

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “ActiveMQ”, 选择 “ActiveMQ”,点击 “确定” 即可添加视图。

通过概览,可以了解到 ActiveMQ 的基础信息,如消息总积压、连接数等。

Queue 可以看到队列消息的生产、消费、积压等。

Topic 部分可以了解到 Topic 的消息的生产、消费、积压等。

监控器(告警)

观测云内置了监控器模板,可以选择从模版创建监控器,并开启适合业务的监控器以及时通知相关成员关注问题,触发条件、频率等信息可以依据实际业务进行调整。

登录观测云控制台,点击「监控」 -「新建监控器」,输入 “ActiveMQ”, 选择对应的监控器,点击 “确定” 即可添加。

ActiveMQ 队列中有大量被阻塞的发送操作

ActiveMQ 队列消息积压

观测云内置了10多个 ActiveMQ 告警监控器,可按实际需求添加。

总结

使用观测云采集 ActiveMQ 指标数据,可以实现自动化监控、数据收集和告警通知。这不仅有助于优化资源分配,还能提高系统的可靠性和响应速度,确保消息的高效传递和处理。

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

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

相关文章

【Linux命令】scp远程拷贝

文章目录 1. 基本语法与常用选项2. 使用场景和使用示例本地文件->远程主机远程主机文件->本地远程主机->另一台远程主机 3. 使用注意事项 scp&#xff08;Secure Copy Protocol&#xff09;是linux中基于ssh的安全文件传输工具&#xff0c;用于在本地和远程主机之前安…

如何优化 Harmony-Cordova 应用的性能?

以下是针对 ‌Harmony-Cordova 应用性能优化‌的完整方案&#xff0c;结合鸿蒙原生特性和Cordova框架优化策略&#xff1a; ‌⚡一、渲染性能优化‌ ‌减少布局嵌套层级‌ 使用扁平化布局&#xff08;如 Grid、GridRow&#xff09;替代多层 Column/Row 嵌套&#xff0c;避免冗…

c++学习之---模版

目录 一、函数模板&#xff1a; 1、基本定义格式&#xff1a; 2、模版函数的优先匹配原则&#xff1a; 二、类模板&#xff1a; 1、基本定义格式&#xff1a; 2、类模版的优先匹配原则&#xff08;有坑哦&#xff09;&#xff1a; 3、缺省值的设置&#xff1a; 4、ty…

SpringAI(GA):RAG下的ETL快速上手

原文链接&#xff1a;SpringAI(GA)&#xff1a;RAG下的ETL快速上手 教程说明 说明&#xff1a;本教程将采用2025年5月20日正式的GA版&#xff0c;给出如下内容 核心功能模块的快速上手教程核心功能模块的源码级解读Spring ai alibaba增强的快速上手教程 源码级解读 版本&a…

用dayjs解析时间戳,我被提了bug

引言 前几天开发中突然接到测试提的一个 Bug&#xff0c;说我的时间组件显示异常。 我很诧异&#xff0c;这里初始化数据是后端返回的&#xff0c;我什么也没改&#xff0c;这bug提给我干啥。我去问后端&#xff1a;“这数据是不是有问题&#xff1f;”。后端答&#xff1a;“…

DataAgent产品经理(数据智能方向)

DataAgent产品经理&#xff08;数据智能方向&#xff09; 一、核心岗位职责 AI智能体解决方案设计 面向工业/政务场景构建「数据-模型-交互」闭环&#xff0c;需整合多源异构数据&#xff08;如传感器数据、业务系统日志&#xff09;与AI能力&#xff08;如大模型微调、知识图…

Ubuntu取消开机用户自动登录

注&#xff1a;配置前请先设置登录密码&#xff0c;不同显示管理器配置方法不同&#xff0c;可用命令查看&#xff1a;cat /etc/X11/default-display-manager 一、LightDM 显示管理器&#xff0c;关闭 Ubuntu 系统用户自动登录 查找自动登录配置文件&#xff0c;可以看到类似 a…

使用lighttpd和开发板进行交互

文章目录 &#x1f9e0; 一、Lighttpd 与开发板的交互原理1. 什么是 Lighttpd&#xff1f;2. 与开发板交互的方式&#xff1f; &#x1f9fe; 二、lighttpd.conf 配置文件讲解⚠️ 注意事项&#xff1a; &#x1f4c1; 三、目录结构说明&#x1f4a1; 四、使用 C 编写 CGI 脚本…

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布&#xff01; V2.0.3 作为树表双模型正式版本&#xff0c;主要新增元数据导入导出脚本适配表模型、Spark 生态集成&#xff08;表模型&#xff09;、AINode 返回结果新增时间戳&#xff0c;表模型新增部分聚…

车辆检测算法在爆炸事故应急响应中的优化路径

视觉分析赋能车辆管控&#xff1a;以山东应急场景为例 背景&#xff1a;应急场景下的车辆管控痛点 近期山东多起爆炸事故暴露了应急响应中的车辆管理短板&#xff1a;消防车、救护车因违停车辆堵塞通道&#xff0c;违规车辆闯入事故核心区&#xff0c;传统监控系统依赖人工识别…

∑ 1/n 调和级数 是 发散的

为什么 ∑ 1 u \sum \frac{1}{u} ∑u1​&#xff08;即 ∑ 1 n \sum \frac{1}{n} ∑n1​&#xff0c;通常称为调和级数&#xff09;是发散的&#xff1f; ✅ 一、首先明确你问的是这个级数&#xff1a; ∑ n 1 ∞ 1 n \sum_{n1}^{\infty} \frac{1}{n} n1∑∞​n1​ 这个级数…

Android第十二次面试-多线程和字符串算法总结

多线程的创建与常见使用方法 ​一、多线程创建方式​ ​1. 继承Thread类​ class MyThread extends Thread {Overridepublic void run() {// 线程执行逻辑System.out.println(Thread.currentThread().getName() " is running");} }// 使用 MyThread thread new …

大模型调用数据库表实践:基于自然语言的SQL生成与数据查询系统

# 大模型调用数据库表实践&#xff1a;基于自然语言的SQL生成与数据查询系统 ## 一、背景与目标 在企业数据管理场景中&#xff0c;非技术人员&#xff08;如业务人员、管理人员&#xff09;常常需要通过数据库查询获取关键信息&#xff0c;但直接编写SQL语句存在技术门槛。传…

28 C 语言作用域详解:作用域特性(全局、局部、块级)、应用场景、注意事项

1 作用域简介 作用域定义了代码中标识符&#xff08;如变量、常量、数组、函数等&#xff09;的可见性与可访问范围&#xff0c;即标识符在程序的哪些位置能够被引用或访问。在 C 语言中&#xff0c;作用域主要分为三类&#xff1a; 全局作用域局部作用域块级作用域 需注意&am…

Tomcat运行比较卡顿进行参数调优

在Tomcat conf/catalina.bat或catalina.sh中 的最上面增加参数 1. 初步调整参数&#xff08;缓解问题&#xff09; set JAVA_OPTS -Xms6g -Xmx6g -Xmn3g # 增大新生代&#xff0c;减少对象过早晋升到老年代 -XX:MetaspaceSize256m -XX:MaxMetaspaceS…

WSL2 安装与Docker安装

注意&#xff1a;如没有科学上网请勿尝试&#xff0c;无法判断是否会因网络错误导致的安装失败&#xff01;&#xff01;&#xff01; WSL2&#xff08;Windows Subsystem for Linux 2&#xff09; 功能简介&#xff1a; WSL2 是微软提供的在 Windows 上运行完整 Linux 内核的…

Redis的安装与使用

网址&#xff1a;Spring Data Redis 安装包&#xff1a;Releases tporadowski/redis GitHub 解压后 在安装目录中打开cmd 打开服务&#xff08;注意&#xff1a;每次客户端连接都有先打开服务&#xff01;&#xff01;&#xff01;&#xff09; 按ctrlC退出服务 客户端连接…

springboot-响应接收与ioc容器控制反转、Di依赖注入

1.想将服务器中的数据返回给客户端&#xff0c;需要在controller类上加注解&#xff1a;ResponseBody; 这个注解其实在前面已经使用过&#xff0c;RestController其实就包含两个注解&#xff1a; Controller ResponseBody 返回值如果是实体对象/集合&#xff0c;将会转换为j…

将材质球中的纹理属性对应的贴图保存至本地

通过Texture2D的EncodeToPNG方法将纹理转为图片形式 material.GetTexture方法通过属性名获取纹理贴图 material.SetTexture方法通过属性名设置纹理贴图 属性名可在shader代码中查看 using UnityEngine; using System.IO;public class TextureSaver : MonoBehaviour {public…

MySQL半同步复制配置和参数详解

目录 1 成功配置主从复制 2 加载插件 3 半同步复制监控 4 半同步复制参数 1 成功配置主从复制 操作步骤参考&#xff1a;https://blog.csdn.net/zyb378747350/article/details/148309545 2 加载插件 #主库上 MySQL 8.0.26 之前版本: mysql>INSTALL PLUGIN rpl_semi_syn…