Skip to content
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

metricCustomizers / attributesAsLabels doesn't work with string attributes #1146

Closed
polarnik opened this issue Mar 3, 2025 · 2 comments
Closed
Assignees

Comments

@polarnik
Copy link

polarnik commented Mar 3, 2025

Description

We can select an MBean with string and numeric attributes and define a config section attributesAsLabels for all string attributes, but jmx_prometheus_javaagent will ignore all string attributes

See also:

Environment

  • Java 21
  • jmx-exporter (main) commit f024c74
  • youtrack docker container jetbrains/youtrack:2025.1.62967

Config

jmx_exporter.yml

startDelaySeconds: 10
lowercaseOutputName: false
lowercaseOutputLabelNames: false

includeObjectNames: ["jetbrains.youtrack:type=Hub,name=HubIntegration"]
metricCustomizers:
  - mbeanFilter:
      domain: jetbrains.youtrack
      properties:
        type: Hub
        name: HubIntegration
    attributesAsLabels:
      - HubIntegrationStatus
      - PermissionCacheStatus
      - PermissionCacheStatus
      - RunningJob
      - EventSyncStatusStatus

youtrack.jvmoptions

-XX:NativeMemoryTracking=summary
-XX:+PrintFlagsFinal
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.rmi.port=9011
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=127.0.0.1

-javaagent:/opt/app/jmx_prometheus_javaagent-1.1.0-post.jar=youtrack:9404:/opt/app/jmx_exporter.yml

docker-compose

services:
  youtrack:
    image: jetbrains/youtrack:2025.1.62967
    hostname: youtrack
    restart: "no"
    ports:
      - '9404:9404'
      - '9010:9010'
      - '9011:9011'
      - "8080:8080"
    tmpfs:
      /tmp
    volumes:
      - ./volumes/youtrack_data:/opt/youtrack/data
      - ./volumes/youtrack_conf:/opt/youtrack/conf
      - ./volumes/youtrack_logs:/opt/youtrack/logs
      - ./volumes/youtrack_backups:/opt/youtrack/backups
      - ./volumes/youtrack_temp:/opt/youtrack/temp
      - "./configs/youtrack/youtrack.jvmoptions:/opt/youtrack/conf/youtrack.jvmoptions:ro"
      - "./configs/prometheus_jmx_exporter/jmx_exporter.yml:/opt/app/jmx_exporter.yml:ro"
      - "./tools/jmx_prometheus_javaagent-1.1.0-post.jar:/opt/app/jmx_prometheus_javaagent-1.1.0-post.jar:ro"

Steps

  1. Start a docker-compose
  2. Copy a wizard_token from the docker logs
  3. Open http://127.0.0.1:8080/
  4. Add the wizard_token from the logs: http://127.0.0.1:8080/?wizard_token=pk191NZmHm8GGTOfpdVy
  5. Start creating a new instance
  6. Set a domain:
  1. Set a password and tokens
  • admin
  • admin
  1. Wait a few seconds
  2. Install visualVM https://visualvm.github.io/
  3. Install a visualVM plugin: Menu / Tools / Plugins / Available Plugins / VisualVM MBean
  4. Connect from the VisualVM tool to the remote host: 127.0.0.1:9010
  5. Open an MBean with numeric and String attributes, for example jetbrains.youtrack:type=Hub,name=HubIntegration

Actual result

The output doesn't have any new labels, it has only numeric attributes and one label 'name':

# HELP jetbrains_youtrack_Hub_HubEventsFailed hubEventsFailed jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsFailed
# TYPE jetbrains_youtrack_Hub_HubEventsFailed untyped
jetbrains_youtrack_Hub_HubEventsFailed{name="HubIntegration"} 0.0
# HELP jetbrains_youtrack_Hub_HubEventsIgnored hubEventsIgnored jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsIgnored
# TYPE jetbrains_youtrack_Hub_HubEventsIgnored untyped
jetbrains_youtrack_Hub_HubEventsIgnored{name="HubIntegration"} 1.0
# HELP jetbrains_youtrack_Hub_HubEventsPending hubEventsPending jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsPending
# TYPE jetbrains_youtrack_Hub_HubEventsPending untyped
jetbrains_youtrack_Hub_HubEventsPending{name="HubIntegration"} 0.0
# HELP jetbrains_youtrack_Hub_HubEventsProcessed hubEventsProcessed jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsProcessed
# TYPE jetbrains_youtrack_Hub_HubEventsProcessed untyped
jetbrains_youtrack_Hub_HubEventsProcessed{name="HubIntegration"} 0.0
# HELP jetbrains_youtrack_Hub_HubEventsReceived hubEventsReceived jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsReceived
# TYPE jetbrains_youtrack_Hub_HubEventsReceived untyped
jetbrains_youtrack_Hub_HubEventsReceived{name="HubIntegration"} 1.0

Image

Image

Expected result

String attributes:
- HubIntegrationStatus
- PermissionCacheStatus
- PermissionCacheStatus
- RunningJob
- EventSyncStatusStatus
will be converted to labels

@polarnik polarnik changed the title attributesAsLabels doesn't work with string attributes metricCustomizers / attributesAsLabels doesn't work with string attributes Mar 3, 2025
@ameteo
Copy link

ameteo commented Mar 4, 2025

@polarnik Same as with #1147, I cannot reproduce your issue. This is the output that I get:

# HELP jetbrains_youtrack_Hub_HubEventsFailed hubEventsFailed jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsFailed
# TYPE jetbrains_youtrack_Hub_HubEventsFailed untyped
jetbrains_youtrack_Hub_HubEventsFailed{EventSyncStatusStatus="Active, syncing everything",HubIntegrationStatus="Active and working",PermissionCacheStatus="Hub permission management",RunningJob="None",name="HubIntegration"} 0.0
# HELP jetbrains_youtrack_Hub_HubEventsIgnored hubEventsIgnored jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsIgnored
# TYPE jetbrains_youtrack_Hub_HubEventsIgnored untyped
jetbrains_youtrack_Hub_HubEventsIgnored{EventSyncStatusStatus="Active, syncing everything",HubIntegrationStatus="Active and working",PermissionCacheStatus="Hub permission management",RunningJob="None",name="HubIntegration"} 3.0
# HELP jetbrains_youtrack_Hub_HubEventsPending hubEventsPending jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsPending
# TYPE jetbrains_youtrack_Hub_HubEventsPending untyped
jetbrains_youtrack_Hub_HubEventsPending{EventSyncStatusStatus="Active, syncing everything",HubIntegrationStatus="Active and working",PermissionCacheStatus="Hub permission management",RunningJob="None",name="HubIntegration"} 0.0
# HELP jetbrains_youtrack_Hub_HubEventsProcessed hubEventsProcessed jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsProcessed
# TYPE jetbrains_youtrack_Hub_HubEventsProcessed untyped
jetbrains_youtrack_Hub_HubEventsProcessed{EventSyncStatusStatus="Active, syncing everything",HubIntegrationStatus="Active and working",PermissionCacheStatus="Hub permission management",RunningJob="None",name="HubIntegration"} 0.0
# HELP jetbrains_youtrack_Hub_HubEventsReceived hubEventsReceived jetbrains.youtrack:name=HubIntegration,type=Hub,attribute=HubEventsReceived
# TYPE jetbrains_youtrack_Hub_HubEventsReceived untyped
jetbrains_youtrack_Hub_HubEventsReceived{EventSyncStatusStatus="Active, syncing everything",HubIntegrationStatus="Active and working",PermissionCacheStatus="Hub permission management",RunningJob="None",name="HubIntegration"} 3.0

@dhoard dhoard self-assigned this Mar 5, 2025
@polarnik
Copy link
Author

polarnik commented Mar 6, 2025

Yes, it's my mistake. I used version 1.1.0 because there was a typo in my docker-compose file. I mounted a jmx agent two times, a new version and a release version 1.1.0 into a same file.

I will use Multi-stage builds instead of volumes/mounts of external files

FROM maven:3.9.9-eclipse-temurin-21-jammy

RUN apt-get update && apt-get install -y git
RUN git clone https://github.com/prometheus/jmx_exporter.git /tmp/jmx_exporter
WORKDIR /tmp/jmx_exporter
RUN mvn -DskipTests=true package
RUN mkdir /opt/app/
RUN cp /tmp/jmx_exporter/jmx_prometheus_javaagent/target/jmx_prometheus_javaagent-*-post.jar /opt/app/jmx_prometheus_javaagent.jar

FROM jetbrains/youtrack:2025.1.62967

ENV OTEL_JAVA_AGENT_VERSION=2.13.1
ENV JOLOKIA_JVM_AGENT_VERSION=2.2.1
ENV OTEL_JAVAAGENT_EXTENSIONS=/opt/app/opentelemetry-javaagent.jar

USER root

RUN mkdir /opt/app/
COPY --from=0 /opt/app/jmx_prometheus_javaagent.jar /opt/app/jmx_prometheus_javaagent.jar

RUN /bin/sh -c "yum -y install curl hostname"

ADD https://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-agent-jvm/$JOLOKIA_JVM_AGENT_VERSION/jolokia-agent-jvm-$JOLOKIA_JVM_AGENT_VERSION-javaagent.jar /opt/app/jolokia-agent-jvm-javaagent.jar
ADD https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v$OTEL_JAVA_AGENT_VERSION/opentelemetry-javaagent.jar $OTEL_JAVAAGENT_EXTENSIONS
RUN chown -R jetbrains:jetbrains /opt/app/
USER jetbrains

@polarnik polarnik closed this as completed Mar 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants