-
Notifications
You must be signed in to change notification settings - Fork 1k
improve and align activemq classic JMX metrics with semconv #14996
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…nstrumentation into jmx-activemq
…nstrumentation into jmx-activemq
🔧 The result from spotlessApply was committed to the PR branch. |
|
Fixes #14278
Only covers ActiveMQ Classic, ActiveMQ Artemis will be covered with #15006.
Some of the ActiveMQ metrics are provided as percentages with integer values in
[0,100]
range, this PR adds a%
to1
unit conversion to translate this to[0.0,1.0]
range.For the resource-related metrics, this follows the same strategy we have on GPU hardware metrics (semconv)
hw.gpu.memory.usage
to measure usage in byteshw.gpu.memory.limit
to measure limit in byteshw.gpu.memory.utilization
as usage ratio between 0.0 and 1.0Summary of changes
Metric attributes
messaging.system
metric attribute added to all metrics withactivemq
constant valuebroker
metric attribute is renamed toactivemq.broker.name
destination
metric attribute is renamed tomessaging.destination.name
New metrics
Destination (queue/topic) resource usage and configured limits
activemq.destination.memory.usage
, value in bytes (see related item to discuss below)activemq.destination.memory.limit
, value in bytesactivemq.destination.temp.utilization
, value in [0.0,1.0] converted from [0,100]activemq.destination.temp.limit
, value in bytesBroker resource usage and configured limits
activemq.memory.utilization
, value in[0.0,1.0]
converted from[0,100]
activemq.memory.limit
, value in bytesactivemq.store.utilization
, value in[0.0,1.0]
converted from[0,100]
activemq.store.limit
, value in bytesactivemq.temp.utilization
, value in[0.0,1.0]
converted from[0,100]
activemq.temp.limit
, value in bytesRemoved metrics
activemq.memory.MemoryPercentUsage
metric removed, replaced byactivemq.destination.memory.usage
andactivemq.destination.memory.limit
Renamed metrics
activemq.ProducerCount
metric renamed toactivemq.producer.count
activemq.ConsumerCount
metric renamed toactivemq.consumer.count
activemq.message.QueueSize
metric renamed toactivemq.message.queue.size
activemq.message.ExpiredCount
metric renamed toactivemq.message.expired
activemq.message.EnqueueCount
metric renamed toactivemq.message.enqueued
(with an extrad
for consistency withexpired
.activemq.message.DequeueCount
metric renamed toactivemq.message.enqueued
(with an extrad
for consistency withexpired
.activemq.message.AverageEnqueueTime
metric renamed toactivemq.message.enqueue.average_duration
(see related item to discuss below)Things to potentially discuss/clarify
messaging.system
metric attribute to constant valueactivemq
when we monitor activemq itself or is it only meant on the application side ? Because metric names are already part ofactivemq.*
namespace it might be a bit redundant, but could help with correlation with traces from application. Also, themessaging.system
is about to be renamed tomessaging.system.name
, removing this attribute would avoid one known breaking change.activemq.message.enqueue.average_duration
, does using the same convention ask8s.hpa.metric.target.cpu.average_utilization
is a good fit ?destination
"sub-namespace"activemq.{memory,temp}.destination.*
, the broker-level equivalents were not previously captured, they are expected to be more global and thus in theactivemq.{memory,temp,store}.*
namespace.activemq.destination.memory.usage
, but we can't do the same with non-persistent storage which is always captured as a ratio between 0.0 and 1.0, should we favor consistency between similar metrics or give priority to accuracy ? Ratio is provided through an int percentage, thus max 1% accuracy. We could also provide bothactivemq.destination.memory.usage
andactivemq.destination.memory.utilization
here. On the monitoring side, having an exact measurement is probably not required.