Egor Baranov created IGNITE-28885:
-------------------------------------

             Summary:  Add JMX Prometheus Exporter to Ducktests for JVM 
Memory/GC Monitoring
                 Key: IGNITE-28885
                 URL: https://issues.apache.org/jira/browse/IGNITE-28885
             Project: Ignite
          Issue Type: Improvement
            Reporter: Egor Baranov


 Motivation

    Prometheus does not support the JMX protocol natively; it only scrapes 
metrics exposed over HTTP in its own text format. A bridge (JVM agent) is 
required to make JVM-level metrics accessible to Prometheus.

    This task integrates jmx_prometheus_javaagent into the ducktests framework 
so that every server/client node exposes JVM memory and GC metrics at 
:8083/metrics in Prometheus format. This enables Grafana
    dashboards that mirror the jconsole "Memory" tab (heap, non-heap, memory 
pools, GC collection count/time).

    Changes

    1. Dockerfile (modules/ducktests/tests/docker/Dockerfile)
     - Download and install jmx_prometheus_javaagent-1.1.0.jar to 
/opt/jmx_exporter.jar

    2. jmx_exporter package 
(modules/ducktests/tests/ignitetest/services/utils/jmx_exporter/)
     - `__init__.py` — helper module with:
       - JmxExporterParams — settings from globals config (enabled, port)
       - get_jmx_exporter_params() — parse globals
       - is_jmx_exporter_enabled() — check if enabled
       - get_jmx_exporter_yml_content() — read bundled YAML content
       - jmx_agent_jvm_opt() — build -javaagent JVM option string
     - `jmx_exporter.yml` — rule mappings for JVM memory and GC metrics:
       - jvm_memory_heap_bytes_\{used,max,committed,init}
       - jvm_memory_nonheap_bytes_\{used,max,committed,init}
       - jvm_memory_pool_usage_bytes\{pool,attribute}
       - jvm_memory_pool_collection_bytes\{pool,attribute}
       - jvm_gc_collection_count_total\{gc}
       - jvm_gc_collection_time_seconds_total\{gc}

    3. ignite_spec.py 
(modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py)
     - In __get_default_jvm_opts(): append 
-javaagent:/opt/jmx_exporter.jar=\{port}:\{config_dir}/jmx_exporter.yml when 
jmx_exporter.enabled is true in globals

    4. ignite_aware.py 
(modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py)
     - In init_persistent(): download jmx_exporter.jar to node if not present 
(idempotent: test -f || curl)
     - In _prepare_configs(): create jmx_exporter.yml in the node's config 
directory from bundled resource



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to