{"id":5654,"date":"2024-06-19T00:05:43","date_gmt":"2024-06-18T22:05:43","guid":{"rendered":"https:\/\/www.dontesta.it\/?p=5654"},"modified":"2024-06-19T12:08:00","modified_gmt":"2024-06-19T10:08:00","slug":"come-usare-java-jmx-in-ambienti-container","status":"publish","type":"post","link":"https:\/\/www.dontesta.it\/en\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/","title":{"rendered":"(Italiano) Come usare Java JMX in ambienti container"},"content":{"rendered":"<p class=\"qtranxs-available-languages-message qtranxs-available-languages-message-en\">Sorry, this entry is only available in <a href=\"https:\/\/www.dontesta.it\/it\/wp-json\/wp\/v2\/posts\/5654\" class=\"qtranxs-available-language-link qtranxs-available-language-link-it\" title=\"Italiano\">Italiano<\/a>.<\/p><p><\/p>\n\n\n\n<p><span class=\"md-plain\">Con l'adozione crescente delle <a href=\"https:\/\/martinfowler.com\/articles\/microservices.html\" target=\"_blank\" rel=\"noopener\">architetture a microservizi<\/a> e dei container per la distribuzione delle applicazioni, il monitoraggio delle prestazioni e la gestione dei servizi diventano aspetti critici. <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase\/javamanagement.html\" target=\"_blank\" rel=\"noopener\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Java Management Extensions (JMX)<\/span><\/strong><\/span><\/a><\/span><span class=\"md-plain\"> \u00e8 uno strumento potente che consente agli sviluppatori di monitorare e gestire le applicazioni Java. In ambienti containerizzati, come quelli orchestrati da <a href=\"https:\/\/kubernetes.io\/\" target=\"_blank\" rel=\"noopener\">Kubernetes<\/a>, <a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener\">Docker<\/a>, <a href=\"https:\/\/podman.io\/\" target=\"_blank\" rel=\"noopener\">Podman<\/a> o altro, l'utilizzo di JMX presenta alcune sfide e richiede configurazioni specifiche. <\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Questo articolo fornir\u00e0 una guida dettagliata su come usare Java JMX in ambienti container e in particolare su <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/www.redhat.com\/en\/technologies\/cloud-computing\/openshift\"><span class=\"md-plain\">Red Hat OpenShift<\/span><\/a><\/span><span class=\"md-plain\">. Vedremo come configurare JMX in un'applicazione Java basata su <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/quarkus.io\/\"><span class=\"md-plain\">Quarkus<\/span><\/a><\/span><span class=\"md-plain\"> e come connettersi a un server JMX utilizzando <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/www.oracle.com\/java\/technologies\/jdk-mission-control.html\"><span class=\"md-plain\">JDK Mission Control<\/span><\/a><\/span><span class=\"md-plain\"> per monitorare le prestazioni, gestire le risorse, e cambiare il livello di log a runtime.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Per l'esempio pratico faremo riferimento all'applicazione di esempio <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/github.com\/amusarra\/eventbus-logging-filter-jaxrs\"><span class=\"md-plain\">Event Bus Logging Filter JAX-RS<\/span><\/a><\/span><span class=\"md-plain\"> e come ambiente di deploy e runtime la <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/developers.redhat.com\/developer-sandbox\" class=\"broken_link\"><span class=\"md-plain\">Dev Sandbox di Red Hat OpenShift<\/span><\/a><\/span><span class=\"md-plain\">.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Qualcuno potrebbe domandarsi: <\/span><span class=\"md-pair-s \"><strong><span class=\"md-plain\">JMX \u00e8 ancora attuale?<\/span><\/strong><\/span><\/p>\n\n\n\n<p><span class=\"md-pair-s\"><u><span class=\"md-plain\">S\u00ec, Java Management Extensions (JMX) \u00e8 ancora attuale e rilevante nel contesto dello sviluppo e della gestione delle applicazioni Java.<\/span><\/u><\/span><span class=\"md-plain\"> Anche se alcune tecnologie evolvono e nuovi strumenti emergono, JMX continua a essere una componente fondamentale per diverse ragioni.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"md-plain\">Standardizzazione e Compatibilit\u00e0<\/span><\/h3>\n\n\n\n<p><span class=\"md-plain\">JMX \u00e8 una specifica standardizzata e parte integrante della piattaforma Java SE (Standard Edition). Questo garantisce la compatibilit\u00e0 con tutte le implementazioni di Java, rendendolo un\u2019opzione affidabile per il monitoraggio e la gestione delle applicazioni.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"md-plain\">Integrazione con Strumenti Moderni<\/span><\/h3>\n\n\n\n<p><span class=\"md-plain\">Molti strumenti di monitoraggio e gestione delle applicazioni Java, come <a href=\"https:\/\/openjdk.org\/tools\/svc\/jconsole\/\" target=\"_blank\" rel=\"noopener\">JConsole<\/a>, <a href=\"https:\/\/visualvm.github.io\/\" target=\"_blank\" rel=\"noopener\">VisualVM<\/a>, e strumenti di terze parti come <a href=\"https:\/\/prometheus.io\/\" target=\"_blank\" rel=\"noopener\">Prometheus<\/a> e <a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noopener\">Grafana<\/a>, offrono integrazioni native o plugin per lavorare con JMX. Questo permette di utilizzare JMX come base per la raccolta di metriche e la gestione delle risorse, integrandolo con soluzioni pi\u00f9 moderne per la visualizzazione e l\u2019analisi dei dati.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"md-plain\">Utilizzo in Architetture Distribuite<\/span><\/h3>\n\n\n\n<p><span class=\"md-plain\">Con l\u2019aumento dell\u2019adozione delle architetture a microservizi e dei container, JMX rimane utile per il monitoraggio delle applicazioni Java distribuite. Ad esempio, molti container orchestrator come Kubernetes possono essere configurati per raccogliere metriche esposte tramite JMX (<a href=\"https:\/\/quarkus.io\/extensions\/io.quarkiverse.micrometer.registry\/quarkus-micrometer-registry-jmx\/\" target=\"_blank\" rel=\"noopener\">Quarkus<\/a> e <a href=\"https:\/\/docs.spring.io\/spring-boot\/reference\/actuator\/jmx.html\" target=\"_blank\" rel=\"noopener\">Spring Boot<\/a> lo consentono), facilitando il monitoraggio centralizzato delle applicazioni distribuite.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"md-plain\">Flessibilit\u00e0 ed Estensibilit\u00e0<\/span><\/h3>\n\n\n\n<p><span class=\"md-plain\">JMX \u00e8 altamente flessibile ed estendibile. Gli sviluppatori possono definire nuovi <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/docs.oracle.com\/javase%2Ftutorial%2F\/jmx\/mbeans\/index.html\"><span class=\"md-plain\">MBean<\/span><\/a><\/span><span class=\"md-plain\"> per esporre metriche specifiche o per aggiungere funzionalit\u00e0 di gestione personalizzate. Questa estensibilit\u00e0 lo rende adattabile a molteplici scenari, sia per applicazioni legacy che moderne.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Anche se JMX rimane rilevante, <\/span><span class=\"md-pair-s\"><u><span class=\"md-plain\">\u00e8 importante considerare che nuovi paradigmi di monitoraggio, come l\u2019osservabilit\u00e0 completa (tracing, logging, e metriche combinate) con strumenti come <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/opentelemetry.io\/\"><span class=\"md-plain\">OpenTelemetry<\/span><\/a><\/span><\/u><\/span><span class=\"md-plain\">, stanno guadagnando popolarit\u00e0. Tuttavia, questi strumenti spesso possono essere configurati per raccogliere dati da sorgenti JMX, mostrando come JMX continui a integrarsi con le tecnologie emergenti.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"md-plain\">Perch\u00e9 JMX nei Container?<\/span><\/h2>\n\n\n\n<p><span class=\"md-plain\">L'utilizzo di JMX nei container permette di:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span class=\"md-plain\">monitorare le prestazioni e lo stato delle applicazioni Java;<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">ottenere visibilit\u00e0 in tempo reale sulle risorse e sui thread dell'applicazione;<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">gestire dinamicamente le configurazioni senza necessit\u00e0 di riavviare l'applicazione.<\/span><\/li>\n<\/ul>\n\n\n\n<p><span class=\"md-plain\">Inoltre, JMX nei container pu\u00f2 essere integrato con strumenti di monitoraggio e gestione delle applicazioni, come Prometheus, Grafana, JConsole o strumenti di <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Application_performance_management\"><span class=\"md-plain\">APM (Application Performance Management)<\/span><\/a><\/span><span class=\"md-plain\">, per raccogliere e visualizzare metriche, analizzare i dati, e rispondere in modo pro attivo ai problemi di prestazioni.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"md-plain\">Configurazione di JMX in un'applicazione Java<\/span><\/h2>\n\n\n\n<p><span class=\"md-plain\">Per abilitare JMX in un'applicazione Java, \u00e8 necessario configurare il server JMX per esporre le metriche e MBean. Questo pu\u00f2 essere fatto tramite le opzioni di avvio della JVM, specificando le propriet\u00e0 di sistema per abilitare il server JMX e definire la porta di ascolto. Ad esempio, \u00e8 possibile utilizzare le seguenti opzioni di avvio.<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"-Dcom.sun.management.jmxremote\n-Dcom.sun.management.jmxremote.port=9091\n-Dcom.sun.management.jmxremote.rmi.port=9091\n-Djava.rmi.server.hostname=127.0.0.1\n-Dcom.sun.management.jmxremote.authenticate=false\n-Dcom.sun.management.jmxremote.ssl=false\n-Dcom.sun.management.jmxremote.local.only=true\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">Dcom<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sun<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">management<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jmxremote<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">Dcom<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sun<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">management<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jmxremote<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">port<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">9091<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">Dcom<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sun<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">management<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jmxremote<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">rmi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">port<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">9091<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">Djava<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">rmi<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">server<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">hostname<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">127.0<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #B48EAD\">0.1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">Dcom<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sun<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">management<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jmxremote<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">authenticate<\/span><span style=\"color: #81A1C1\">=false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">Dcom<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sun<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">management<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jmxremote<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">ssl<\/span><span style=\"color: #81A1C1\">=false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9\">Dcom<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">sun<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">management<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jmxremote<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">local<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">only<\/span><span style=\"color: #81A1C1\">=true<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Configurazione 1 - Opzioni di avvio per abilitare JMX<\/p>\n\n\n\n<p>Queste opzioni abilitano il server JMX sulla porta 9091, consentono la connessione da host remoti specificando l'indirizzo IP del server, disabilitano l'autenticazione e l'uso di SSL per semplificare la configurazione. \u00c8 importante notare che queste opzioni sono solo un esempio e possono essere personalizzate in base alle esigenze specifiche dell'applicazione.<\/p>\n\n\n\n<p><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Se volessi abilitare JMX su di una applicazione Java basata su Quarkus e installata su Red Hat OpenShift, come dovrei fare?<\/span><\/strong><\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Utilizzando gli strumenti messi a disposizione da Quarkus, tutto \u00e8 molto semplice. Gli step sono i seguenti:<\/span><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span class=\"md-plain\">abilitare l'estensione OpenShift per Quarkus (tramite il comando <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>quarkus add-extension io.quarkus:quarkus-openshift<\/code><\/span><span class=\"md-plain\">);<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">configurare la variabile d'ambiente <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>JAVA_OPTS<\/code><\/span><span class=\"md-plain\"> per il runtime di OpenShift per abilitare JMX;<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">configurare i port mapping per esporre la porta JMX e consentire la connessione da host remoti.<\/span><\/li>\n<\/ol>\n\n\n\n<p><span class=\"md-plain\">Per aggiungere la variabile d'ambiente <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>JAVA_OPTS<\/code><\/span><span class=\"md-plain\"> per abilitare JMX in Quarkus su OpenShift, \u00e8 possibile utilizzare la seguente configurazione sul file <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>application.properties<\/code><\/span><span class=\"md-plain\">. Sono le stesse opzioni di avvio che abbiamo visto in precedenza ma configurate come variabile d'ambiente.<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"quarkus.openshift.env.vars.java-opts=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.rmi.port=9091 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=true\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">quarkus.openshift.env.vars.java-opts<\/span><span style=\"color: #D8DEE9FF\">=-Dcom.sun.management.jmxremote <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.port=9091<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.rmi.port=9091<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Djava.rmi.server.hostname=127.0.0.1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.authenticate=false<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.ssl=false<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.local.only=true<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><span class=\"md-plain\">Configurazione 2 - Variabile d'ambiente JAVA_OPTS per abilitare JMX in Quarkus su OpenShift<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Per soddisfare il terzo punto della precedente lista, occorre configurare il <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/deployment\/\"><span class=\"md-plain\">Deployment<\/span><\/a><\/span><span class=\"md-plain\"> e <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/service\/\"><span class=\"md-plain\">Service<\/span><\/a><\/span><span class=\"md-plain\"> (oggetti K8s) per esporre la porta JMX e consentire quindi la connessione da host remoti. Questo pu\u00f2 essere fatto utilizzando le seguenti configurazioni (sempre sul file di configurazione <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>application.properties<\/code><\/span><span class=\"md-plain\">).<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Define the ports that should be exposed by the container\n# for the JMX monitoring\nquarkus.openshift.ports.&quot;jmx&quot;.protocol=TCP\nquarkus.openshift.ports.&quot;jmx&quot;.container-port=9091\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Define the ports that should be exposed by the container<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># for the JMX monitoring<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">quarkus.openshift.ports.<\/span><span style=\"color: #88C0D0\">&quot;jmx&quot;<\/span><span style=\"color: #88C0D0\">.protocol<\/span><span style=\"color: #D8DEE9FF\">=TCP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">quarkus.openshift.ports.<\/span><span style=\"color: #88C0D0\">&quot;jmx&quot;<\/span><span style=\"color: #88C0D0\">.container-port<\/span><span style=\"color: #D8DEE9FF\">=9091<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Configurazione 3 - Configurazione dei port mapping per JMX in Quarkus su OpenShift<\/p>\n\n\n\n<p>Le configurazioni mostrate in precedenza, faranno in modo che, in fase di build e deploy su OpenShift, siano creati i corretti oggetti K8s per esporre la porta JMX e consentire la connessione da host remoti; non ci dobbiamo preoccupare di creare manualmente i file di configurazione YAML per il Deployment e Service, di cui a seguire sono riportati gli estratti con le informazioni necessarie.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"apiVersion: apps\/v1\nkind: Deployment\nmetadata:\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n  template:\n    spec:\n      containers:\n        - env:\n            - name: JAVA_OPTS\n              value: -Dcom.sun.management.jmxremote\n                -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.rmi.port=9091\n                -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.authenticate=false\n                -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=true\n            - name: JAVA_APP_JAR\n              value: \/deployments\/quarkus-run.jar\n          image: eventbus-logging-filter-jaxrs:1.2.7-SNAPSHOT\n          imagePullPolicy: Always\n          name: eventbus-logging-filter-jaxrs\n          ports:\n            - containerPort: 9091\n              name: jmx\n              protocol: TCP\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">apiVersion<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">apps\/v1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">kind<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Deployment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">metadata<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">spec<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">replicas<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">selector<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">matchLabels<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">template<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">spec<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">containers<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">env<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">JAVA_OPTS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">              <\/span><span style=\"color: #8FBCBB\">value<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.rmi.port=9091<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #A3BE8C\">-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.authenticate=false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">JAVA_APP_JAR<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">              <\/span><span style=\"color: #8FBCBB\">value<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">\/deployments\/quarkus-run.jar<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">image<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">eventbus-logging-filter-jaxrs:1.2.7-SNAPSHOT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">imagePullPolicy<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Always<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">eventbus-logging-filter-jaxrs<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #8FBCBB\">ports<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">containerPort<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">9091<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">              <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">jmx<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">              <\/span><span style=\"color: #8FBCBB\">protocol<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TCP<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><span class=\"md-pair-s \"><span class=\"md-plain\">Configurazione 4 - Configurazione del Deployment per abilitare JMX in Quarkus su OpenShift<\/span><\/span><\/p>\n\n\n\n<p><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Nota:<\/span><\/strong><\/span><span class=\"md-plain\"> in realt\u00e0, la configurazione del Service per esporre la porta JMX non \u00e8 strettamente necessaria, in quanto il Service viene creato automaticamente dal plugin OpenShift di Quarkus. Come vedremo in seguito, la connessione sar\u00e0 instaurata direttamente con il pod che esegue l'applicazione Java.<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"apiVersion: v1\nkind: Service\nmetadata:\n  name: eventbus-logging-filter-jaxrs\nspec:\n  ports:\n    - name: jmx\n      port: 9091\n      protocol: TCP\n      targetPort: 9091\n  selector:\n    app.kubernetes.io\/name: eventbus-logging-filter-jaxrs\n    app.kubernetes.io\/version: 1.2.7-SNAPSHOT\n  type: ClusterIP\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">apiVersion<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">v1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">kind<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Service<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">metadata<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">eventbus-logging-filter-jaxrs<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">spec<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">ports<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">jmx<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">port<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">9091<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">protocol<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TCP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">targetPort<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">9091<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">selector<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">app.kubernetes.io\/name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">eventbus-logging-filter-jaxrs<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">app.kubernetes.io\/version<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">1.2.7-SNAPSHOT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ClusterIP<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Configurazione 5 - Configurazione del Service per abilitare JMX in Quarkus su OpenShift<\/p>\n\n\n\n<p><span class=\"md-pair-s \"><strong><span class=\"md-plain\">Nota:<\/span><\/strong><\/span><span class=\"md-plain\"> le configurazioni mostrate in precedenza sono generate automaticamente dal plugin OpenShift di Quarkus e disponibili all'interno del folder <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>target\/kubernetes<\/code><\/span><span class=\"md-plain\">.<\/span><\/p>\n\n\n\n<p>A questo punto \u00e8 possibile procedere con build e il deploy dell'applicazione su OpenShift. Una volta completato il deploy, sar\u00e0 possibile connettersi al server JMX esposto dall'applicazione Java e monitorare le prestazioni, le risorse e i MBean.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"md-plain\">Verifica del deploy e preparazione connessione a JMX<\/span><\/h2>\n\n\n\n<p><span class=\"md-plain\">Per verificare che l'applicazione Java sia stata correttamente deployata su OpenShift e che il server JMX sia attivo, \u00e8 possibile utilizzare il comando <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>oc<\/code><\/span><span class=\"md-plain\"> per ottenere informazioni sul pod.<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Get information about the pod\noc get pod\n\n# Output\nNAME READY STATUS RESTARTS AGE\nactivemq-artemis-675cf6d9-wpbrj 1\/1 Running 0 3h26m\neventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 1\/1 Running 0 4m25s\neventbus-logging-filter-jaxrs-66586f8dc4-vx8sh 1\/1 Running 0 4m36s\nmongo-7d488b9474-vg8wq 1\/1 Running 0 3h25m\npostgresql-7fbdfbcd64-7b76h 1\/1 Running 0 3h26m\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Get information about the pod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">oc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">get<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">pod<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Output<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">NAME<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">READY<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">STATUS<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">RESTARTS<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">AGE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">activemq-artemis-675cf6d9-wpbrj<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #A3BE8C\">\/1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Running<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #A3BE8C\">h26m<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #A3BE8C\">\/1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Running<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #A3BE8C\">m25s<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">eventbus-logging-filter-jaxrs-66586f8dc4-vx8sh<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #A3BE8C\">\/1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Running<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #A3BE8C\">m36s<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">mongo-7d488b9474-vg8wq<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #A3BE8C\">\/1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Running<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #A3BE8C\">h25m<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">postgresql-7fbdfbcd64-7b76h<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #A3BE8C\">\/1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Running<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #A3BE8C\">h26m<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Console 1 - Output del comando oc get pod<\/p>\n\n\n\n<p>I pod (in questo caso due) dell'applicazione Java eventbus-logging-filter-jaxrs sono stati deployati correttamente e sono in stato Running. Adesso verifichiamo che la variabile di ambiente JAVA_OPTS sia stata correttamente configurata per abilitare JMX. Possiamo usare sempre il comando oc (in diverse forme) per ottenere informazioni sulle variabili d'ambiente del pod. A seguire sono mostrati due possibili modi.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Get environment variables for the pod\n# 1. Using the get pod command with the -o json flag to get the JSON output\n# To execute this command, you need to have the jq utility installed\noc get pod eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 -o json | jq '.spec.containers[].env'\n\n# 2. Using the exc command to get the environment variables\noc exec eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 -- env | grep JAVA_OPTS\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Get environment variables for the pod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># 1. Using the get pod command with the -o json flag to get the JSON output<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># To execute this command, you need to have the jq utility installed<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">oc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">get<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">pod<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-o<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">json<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">jq<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.spec.containers[].env<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># 2. Using the exc command to get the environment variables<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">oc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">exec<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">--<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">env<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">grep<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">JAVA_OPTS<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><span class=\"md-plain\">Console 2 - Output dei comandi <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>oc<\/code><\/span><span class=\"md-plain\"> per ottenere le variabili d'ambiente del pod<\/span><\/p>\n\n\n\n<p>A seguire l'output dei comandi oc per ottenere le variabili d'ambiente del pod e in particolare quella di nostro interesse JAVA_OPTS . Dall'output ottenuto, la variabile d'ambiente JAVA_OPTS \u00e8 stata correttamente configurata e impostata per abilitare JMX.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Output of the oc get pod eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 -o json | jq '.spec.containers[].env'\n[\n{\n&quot;name&quot;: &quot;JAVA_OPTS&quot;,\n&quot;value&quot;: &quot;-Xms100M -Xmx500M -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:G1ReservePercent=10 -XX:ConcGCThreads=4 -XX:G1NewSizePercent=5 -XX:G1MaxNewSizePercent=60 -XX:ParallelGCThreads=4 -XX:+ExitOnOutOfMemoryError -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.rmi.port=9091 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=true&quot;\n},\n{\n&quot;name&quot;: &quot;JAVA_APP_JAR&quot;,\n&quot;value&quot;: &quot;\/deployments\/quarkus-run.jar&quot;\n}\n]\n\n# Output of the oc exec eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 -- env | grep JAVA_OPTS\nJAVA_OPTS=-Xms100M -Xmx500M -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:G1ReservePercent=10 -XX:ConcGCThreads=4 -XX:G1NewSizePercent=5 -XX:G1MaxNewSizePercent=60 -XX:ParallelGCThreads=4 -XX:+ExitOnOutOfMemoryError -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.rmi.port=9091 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=true\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Output of the oc get pod eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 -o json | jq &#39;.spec.containers[].env&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">JAVA_OPTS<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">value<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">-Xms100M -Xmx500M -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:G1ReservePercent=10 -XX:ConcGCThreads=4 -XX:G1NewSizePercent=5 -XX:G1MaxNewSizePercent=60 -XX:ParallelGCThreads=4 -XX:+ExitOnOutOfMemoryError -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.rmi.port=9091 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=true<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">},<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">JAVA_APP_JAR<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">value<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">\/deployments\/quarkus-run.jar<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Output of the oc exec eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 -- env | grep JAVA_OPTS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">JAVA_OPTS<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #A3BE8C\">-Xms100M<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">-Xmx500M<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:+UseG1GC<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:+UnlockExperimentalVMOptions<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:MaxGCPauseMillis=200<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:InitiatingHeapOccupancyPercent=45<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:G1ReservePercent=10<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:ConcGCThreads=4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:G1NewSizePercent=5<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:G1MaxNewSizePercent=60<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:ParallelGCThreads=4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-XX:+ExitOnOutOfMemoryError<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.port=9091<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.rmi.port=9091<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Djava.rmi.server.hostname=127.0.0.1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.authenticate=false<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.ssl=false<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-Dcom.sun.management.jmxremote.local.only=true<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><span class=\"md-plain\">Console 3 - Output dei comandi <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>oc<\/code><\/span><span class=\"md-plain\"> per ottenere le variabili d'ambiente del pod (dettaglio)<\/span><\/p>\n\n\n\n<p>Affinch\u00e8 dalla nostra macchina sia possibile eseguire la connessione JMX, \u00e8 necessario creare un tunnel che reindirizza una porta del computer locale a una porta di un pod specifico; la porta di nostro interesse \u00e8 la 9091. Questo tipo di operazione pu\u00f2 essere fatta utilizzando il comando oc port-forward cos\u00ec come mostrato di seguito.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Enable port forwarding for the JMX port\noc port-forward pod\/eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4 9091:9091\n\n# If the port forwarding is successful, you should see the following output\nForwarding from 127.0.0.1:9091 -&gt; 9091\nForwarding from [::1]:9091 -&gt; 9091\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Enable port forwarding for the JMX port<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">oc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">port-forward<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">pod\/eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">9091<\/span><span style=\"color: #A3BE8C\">:9091<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># If the port forwarding is successful, you should see the following output<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">Forwarding<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">127.0<\/span><span style=\"color: #A3BE8C\">.0.1:9091<\/span><span style=\"color: #D8DEE9FF\"> -<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">9091<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">Forwarding<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">from<\/span><span style=\"color: #D8DEE9FF\"> [::1]:9091 -<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> 9091<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><span class=\"md-plain\">Console 4 - Comando <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>oc port-forward<\/code><\/span><span class=\"md-plain\"> per abilitare il forwarding della porta JMX<\/span><\/p>\n\n\n\n<p>A questo punto, l'applicazione Java \u00e8 pronta per essere monitorata tramite JMX. Per connettersi al server JMX, \u00e8 possibile utilizzare strumenti come JConsole, VisualVM, o qualsiasi altro client JMX compatibile. Nel nostro caso utilizzeremo JDK Mission Control.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"md-plain\">Connessione a JMX tramite JDK Mission Control<\/span><\/h2>\n\n\n\n<p><span class=\"md-plain\">JDK Mission Control \u00e8 uno strumento avanzato di monitoraggio e gestione delle applicazioni Java, incluso nella suite di strumenti <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/www.oracle.com\/docs\/tech\/java\/java-mission-control-technical-brief.pdf\"><span class=\"md-plain\">Java Flight Recorder (JFR)<\/span><\/a><\/span><span class=\"md-plain\">. Per connettersi a un server JMX, \u00e8 possibile utilizzare JDK Mission Control e specificare l'indirizzo IP e la porta del server JMX.<\/span><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span class=\"md-plain\">Avviare JDK Mission Control utilizzando il comando <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>jmc<\/code><\/span><span class=\"md-plain\">.<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">Dal men\u00f9 <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>File<\/code><\/span><span class=\"md-plain\"> selezionare la voce <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>Connect<\/code><\/span><span class=\"md-plain\">.<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">Selezionare la voce <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>Create a new connection<\/code><\/span><span class=\"md-plain\"> per aggiungere una nuova connessione JMX.<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">Specificare l'indirizzo IP e la porta del server JMX (es. <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>localhost:9091<\/code><\/span><span class=\"md-plain\">).<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">Specificare un nome per la connessione (es. <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>MyApp JMX Connection<\/code><\/span><span class=\"md-plain\">).<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">Fare clic su <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>Test Connection<\/code><\/span><span class=\"md-plain\"> per verificare che la connessione vada a buon fine con i parametri specificati. Se la connessione avverr\u00e0 con successo, sar\u00e0 visualizzato un messaggio di conferma.<\/span><\/li>\n\n\n\n<li><span class=\"md-plain\">Fare clic su <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>Finish<\/code><\/span><span class=\"md-plain\"> per terminare la configurazione della connessione.<\/span><\/li>\n<\/ol>\n\n\n\n<p><span class=\"md-plain\">La figura a seguire mostra la creazione di una nuova connessione JMX in JDK Mission Control e l'esito positivo del test di connessione.<\/span><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/new_connection_jmx_2.jpg\"><img width=\"654\" height=\"402\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/new_connection_jmx_2.jpg\" alt=\"Figura 1 - Creazione di una nuova connessione JMX in JDK Mission Control\" class=\"wp-image-5664\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/new_connection_jmx_2.jpg 654w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/new_connection_jmx_2-300x184.jpg 300w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/a><figcaption class=\"wp-element-caption\">Figura 1 - Creazione di una nuova connessione JMX in JDK Mission Control<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Una volta definita la connessione JMX, \u00e8 possibile visualizzare quali MBean sono esposti dall'applicazione Java, monitorare le prestazioni e le risorse, e gestire dinamicamente l'applicazione avviando la console JMX cos\u00ec come indicato dalla figura seguente.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/start_jmx_console_1.jpg\"><img width=\"445\" height=\"184\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/start_jmx_console_1.jpg\" alt=\"Figura 2 - Avvio della console JMX in JDK Mission Control\" class=\"wp-image-5665\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/start_jmx_console_1.jpg 445w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/start_jmx_console_1-300x124.jpg 300w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/a><figcaption class=\"wp-element-caption\">Figura 2 - Avvio della console JMX in JDK Mission Control<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Non appena connessi, dovreste vedere la dashboard di Mission Control con le metriche e i MBean esposti dall'applicazione Java. Da qui \u00e8 possibile monitorare le prestazioni, analizzare i dati e gestire l'applicazione in tempo reale.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_dashboard_1.jpg\"><img width=\"1024\" height=\"547\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_dashboard_1-1024x547.jpg\" alt=\"Figura 3 - Dashboard di JDK Mission Control con le metriche JMX\" class=\"wp-image-5666\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_dashboard_1-1024x547.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_dashboard_1-300x160.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_dashboard_1-768x410.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_dashboard_1-1536x820.jpg 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_dashboard_1.jpg 1927w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Figura 3 - Dashboard di JDK Mission Control con le metriche JMX<\/figcaption><\/figure>\n<\/div>\n\n\n<p><span class=\"md-plain\">Accedendo alla sezione <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>MBean Browser<\/code><\/span><span class=\"md-plain\"> di JDK Mission Control, \u00e8 possibile esplorare quali MBean sono esposti dall'applicazione Java e visualizzare le metriche e le operazioni disponibili per ciascun MBean. La figura seguente mostra per esempio le metriche che riguardano il connection pool e in particolare di <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/agroal.github.io\/\"><span class=\"md-plain\">Agroal<\/span><\/a><\/span><span class=\"md-plain\">.<\/span><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_1.jpg\"><img width=\"1004\" height=\"829\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_1.jpg\" alt=\"Figura 4 - Browser MBean di JDK Mission Control\" class=\"wp-image-5667\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_1.jpg 1004w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_1-300x248.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_1-768x634.jpg 768w\" sizes=\"auto, (max-width: 1004px) 100vw, 1004px\" \/><\/a><figcaption class=\"wp-element-caption\">Figura 4 - Browser MBean di JDK Mission Control<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"md-plain\">Come cambiare il livello di log a runtime<\/span><\/h2>\n\n\n\n<p><span class=\"md-plain\">Quante volte vi \u00e8 capitato di dover cambiare il livello di log di un'applicazione Java a runtime, senza dover riavviare l'applicazione stessa? Con JMX \u00e8 possibile farlo in modo semplice e veloce.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Una delle caratteristiche pi\u00f9 potenti di JMX \u00e8 la possibilit\u00e0 di gestire dinamicamente le risorse e le configurazioni dell'applicazione Java senza necessit\u00e0 di riavviare l'applicazione.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Per farlo utilizzeremo JDK Mission Control e il MBean <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>java.util.logging:type=Logging<\/code><\/span><span class=\"md-plain\"> per cambiare il livello di log a runtime. Questo MBean consente di modificare il livello di log per i logger specifici dell'applicazione Java, consentendo di aumentare o diminuire il livello di dettaglio dei log senza dover riavviare l'applicazione.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Come primo step dobbiamo identificare il logger per cui desideriamo cambiare il livello di log. Questo pu\u00f2 essere fatto esplorando i MBean esposti dall'applicazione Java e cercando il MBean <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>java.util.logging:type=Logging<\/code><\/span><span class=\"md-plain\"> (vedi figura a seguire).<\/span><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_1.jpg\"><img width=\"1024\" height=\"312\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_1-1024x312.jpg\" alt=\"Figura 5 - MBean `java.util.logging:type=Logging` in JDK Mission Control\" class=\"wp-image-5668\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_1-1024x312.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_1-300x91.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_1-768x234.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_1.jpg 1482w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Figura 5 - MBean `java.util.logging:type=Logging` in JDK Mission Control<\/figcaption><\/figure>\n<\/div>\n\n\n<p><span class=\"md-plain\">Supponiamo di aver identificato il logger <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>it.dontesta.eventbus.consumers.events.handlers.Dispatcher<\/code><\/span><span class=\"md-plain\"> per cui vogliamo cambiare il livello di log a <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>DEBUG<\/code><\/span><span class=\"md-plain\">. Prima di procedere con la modifica, verifichiamo il livello di log corrente (che dovrebbe essere <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>INFO<\/code><\/span><span class=\"md-plain\">) per il logger utilizzando il metodo <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>getLoggerLevel<\/code><\/span><span class=\"md-plain\"> del MBean <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>java.util.logging:type=Logging<\/code><\/span><span class=\"md-plain\"> (vedi figura a seguire) e successivamente cambieremo il livello di log utilizzando il metodo <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>setLoggerLevel<\/code><\/span><span class=\"md-plain\">.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Per accedere alle operazioni dello specifico MBean, fare clic sul nome del MBean e selezionare la voce <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>Operations<\/code><\/span><span class=\"md-plain\"> per visualizzare i metodi disponibili.<\/span><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_get_loglevel_1.jpg\"><img width=\"1024\" height=\"218\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_get_loglevel_1-1024x218.jpg\" alt=\"Figura 6 - Verifica del livello di log attuale per il logger it.dontesta.eventbus.consumers.events.handlers.Dispatcher\" class=\"wp-image-5669\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_get_loglevel_1-1024x218.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_get_loglevel_1-300x64.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_get_loglevel_1-768x164.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_get_loglevel_1.jpg 1183w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Figura 6 - Verifica del livello di log attuale per il logger it.dontesta.eventbus.consumers.events.handlers.Dispatcher<\/figcaption><\/figure>\n<\/div>\n\n\n<p><span class=\"md-plain\">Dal risultato visibile dalla precedente figura, il livello di log attuale per il logger <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>it.dontesta.eventbus.consumers.events.handlers.Dispatcher<\/code><\/span><span class=\"md-plain\"> \u00e8 <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>INFO<\/code><\/span><span class=\"md-plain\">. Per cambiarlo a <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>DEBUG<\/code><\/span><span class=\"md-plain\">, dobbiamo utilizzare il metodo <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>setLoggerLevel<\/code><\/span><span class=\"md-plain\"> del MBean <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>java.util.logging:type=Logging<\/code><\/span><span class=\"md-plain\"> specificando il nome del logger e il nuovo livello di log (vedi figura a seguire).<\/span><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_set_loglevel_1.jpg\"><img width=\"1024\" height=\"199\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_set_loglevel_1-1024x199.jpg\" alt=\"Figura 7 - Cambio del livello di log a `DEBUG` per il logger it.dontesta.eventbus.consumers.events.handlers.Dispatcher\" class=\"wp-image-5670\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_set_loglevel_1-1024x199.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_set_loglevel_1-300x58.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_set_loglevel_1-768x149.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/jmc_mbean_browser_logger_set_loglevel_1.jpg 1184w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Figura 7 - Cambio del livello di log a `DEBUG` per il logger it.dontesta.eventbus.consumers.events.handlers.Dispatcher<\/figcaption><\/figure>\n<\/div>\n\n\n<p><span class=\"md-plain\">Una volta cambiato il livello di log, l'applicazione Java inizier\u00e0 a registrare i log con il nuovo livello di dettaglio senza necessit\u00e0 di riavviare l'applicazione. Questo permette di gestire dinamicamente i log dell'applicazione Java in tempo reale, adattandoli alle esigenze di monitoraggio e debug. A seguire un esempio di log registrato dall'applicazione Java con il nuovo livello di log <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>DEBUG<\/code><\/span><span class=\"md-plain\">.<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Log output with DEBUG level\noc logs -f eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4\n\n# Output\n2024-06-09 14:23:38,806 DEBUG [it.don.eve.con.eve.han.Dispatcher] (vert.x-eventloop-thread-0) Sending event message to target virtual address: nosql-trace\n2024-06-09 14:23:38,807 DEBUG [it.don.eve.con.eve.han.Dispatcher] (vert.x-eventloop-thread-0) Sending event message to target virtual address: queue-trace\n2024-06-09 14:23:38,807 DEBUG [it.don.eve.con.eve.han.Dispatcher] (vert.x-eventloop-thread-0) Received response from target virtual address: nosql-trace with result: Documents inserted successfully with Id BsonObjectId{value=6665baea279ab051ec5bce3d}\n2024-06-09 14:23:38,808 DEBUG [it.don.eve.con.eve.han.Dispatcher] (vert.x-eventloop-thread-0) Received response from target virtual address: queue-trace with result: Message sent to AMQP queue successfully!\n2024-06-09 14:23:38,808 DEBUG [it.don.eve.con.eve.han.Dispatcher] (vert.x-eventloop-thread-0) Received response from target virtual address: nosql-trace with result: Documents inserted successfully with Id BsonObjectId{value=6665baea279ab051ec5bce3e}\n2024-06-09 14:23:38,808 DEBUG [it.don.eve.con.eve.han.Dispatcher] (vert.x-eventloop-thread-0) Received response from target virtual address: queue-trace with result: Message sent to AMQP queue successfully!\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Log output with DEBUG level<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">oc<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">logs<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">-f<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">eventbus-logging-filter-jaxrs-66586f8dc4-5k7t4<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Output<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">2024-06-09<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">14<\/span><span style=\"color: #A3BE8C\">:23:38,806<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">DEBUG<\/span><span style=\"color: #D8DEE9FF\"> [it.don.eve.con.eve.han.Dispatcher] <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">vert.x-eventloop-thread-0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> Sending event message to target virtual address: nosql-trace<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">2024-06-09<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">14<\/span><span style=\"color: #A3BE8C\">:23:38,807<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">DEBUG<\/span><span style=\"color: #D8DEE9FF\"> [it.don.eve.con.eve.han.Dispatcher] <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">vert.x-eventloop-thread-0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> Sending event message to target virtual address: queue-trace<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">2024-06-09<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">14<\/span><span style=\"color: #A3BE8C\">:23:38,807<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">DEBUG<\/span><span style=\"color: #D8DEE9FF\"> [it.don.eve.con.eve.han.Dispatcher] <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">vert.x-eventloop-thread-0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> Received response from target virtual address: nosql-trace with result: Documents inserted successfully with Id BsonObjectId{<\/span><span style=\"color: #D8DEE9\">value<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">6665<\/span><span style=\"color: #A3BE8C\">baea279ab051ec5bce3d}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">2024-06-09<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">14<\/span><span style=\"color: #A3BE8C\">:23:38,808<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">DEBUG<\/span><span style=\"color: #D8DEE9FF\"> [it.don.eve.con.eve.han.Dispatcher] <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">vert.x-eventloop-thread-0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> Received response from target virtual address: queue-trace with result: Message sent to AMQP queue successfully<\/span><span style=\"color: #81A1C1\">!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">2024-06-09<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">14<\/span><span style=\"color: #A3BE8C\">:23:38,808<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">DEBUG<\/span><span style=\"color: #D8DEE9FF\"> [it.don.eve.con.eve.han.Dispatcher] <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">vert.x-eventloop-thread-0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> Received response from target virtual address: nosql-trace with result: Documents inserted successfully with Id BsonObjectId{<\/span><span style=\"color: #D8DEE9\">value<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">6665<\/span><span style=\"color: #A3BE8C\">baea279ab051ec5bce3e}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">2024-06-09<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">14<\/span><span style=\"color: #A3BE8C\">:23:38,808<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">DEBUG<\/span><span style=\"color: #D8DEE9FF\"> [it.don.eve.con.eve.han.Dispatcher] <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">vert.x-eventloop-thread-0<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> Received response from target virtual address: queue-trace with result: Message sent to AMQP queue successfully<\/span><span style=\"color: #81A1C1\">!<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><span class=\"md-plain\">Console 5 - Output dei log con livello <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>DEBUG<\/code><\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"md-plain\">Conclusioni<\/span><\/h2>\n\n\n\n<p><span class=\"md-plain\">In questo articolo abbiamo esplorato come utilizzare Java JMX in ambienti container, in particolare su Red Hat OpenShift. Abbiamo visto come configurare JMX in un'applicazione Java basata su Quarkus e come connettersi a un server JMX utilizzando JDK Mission Control per monitorare le prestazioni, gestire le risorse, e cambiare il livello di log a runtime.<\/span><\/p>\n\n\n\n<p><span class=\"md-pair-s\"><u><span class=\"md-plain\">Vorrei sottolineare il fatto che JMX pu\u00f2 essere configurato in modo indipendente dal framework o dalla piattaforma utilizzata, e pu\u00f2 essere utilizzato per monitorare e gestire qualsiasi applicazione Java.<\/span><\/u><\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">La possibilit\u00e0 di utilizzare JMX risulta particolarmente utile quando per esempio siamo ancora in fase di sviluppo o in fase di test, (non abbiamo un strumento di APM completo) e dobbiamo monitorare le prestazioni e le risorse dell'applicazione Java, o quando dobbiamo cambiare il livello di log a runtime per debuggare un problema specifico.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">Ho volutamente scelto di utilizzare Java Mission Control perch\u00e9 questo apre la strada all'uso di Java Flight Recorder (JFR) che \u00e8 uno strumento molto potente per il monitoraggio delle prestazioni e l'analisi dei dati. Inoltre, Mission Control \u00e8 uno strumento gratuito e open source, disponibile per tutti gli sviluppatori Java.<\/span><\/p>\n\n\n\n<p><span class=\"md-plain\">In tema di Java Flight Recorder, Red Hat sponsorizza il progetto Cryostat, che \u00e8 un'alternativa open source a Mission Control, che consente di utilizzare Java Flight Recorder in ambienti containerizzati. Invito a leggere l'articolo <\/span><span class=\"md-meta-i-c md-link\"><a href=\"https:\/\/quarkus.io\/blog\/monitoring-quarkus-jvm-mode-with-cryostat\/\"><span class=\"md-plain\">Monitoring Quarkus JVM Mode With Cryostat<\/span><\/a><\/span><span class=\"md-plain\"> per ulteriori dettagli.<\/span><\/p>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Sorry, this entry is only available in Italiano. Con l&#8217;adozione crescente delle architetture a microservizi e dei container per la distribuzione delle applicazioni, il monitoraggio delle prestazioni e la gestione dei servizi diventano aspetti&#46;&#46;&#46;<\/p>\n","protected":false},"author":3,"featured_media":5696,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"image","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[490,548,573],"tags":[190,709],"class_list":["post-5654","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-blog-2","category-framework","category-tools","tag-java","tag-jmx","post_format-post-format-image"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>(Italiano) Come usare Java JMX in ambienti container<\/title>\n<meta name=\"description\" content=\"Configurare Java JMX in ambienti container, in particolare su Red Hat OpenShift e un&#039;applicazione Java basata su Quarkus utilizzando JDK Mission Control come strumento di monitoraggio.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"(Italiano) Come usare Java JMX in ambienti container\" \/>\n<meta property=\"og:description\" content=\"Configurare Java JMX in ambienti container, in particolare su Red Hat OpenShift e un&#039;applicazione Java basata su Quarkus utilizzando JDK Mission Control come strumento di monitoraggio.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/\" \/>\n<meta property=\"og:site_name\" content=\"Antonio Musarra&#039;s Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-18T22:05:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-19T10:08:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Antonio Musarra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:site\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Musarra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/\"},\"author\":{\"name\":\"Antonio Musarra\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"headline\":\"(Italiano) Come usare Java JMX in ambienti container\",\"datePublished\":\"2024-06-18T22:05:43+00:00\",\"dateModified\":\"2024-06-19T10:08:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/\"},\"wordCount\":2229,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png\",\"keywords\":[\"Java\",\"jmx\"],\"articleSection\":[\"Blog\",\"Framework\",\"Tools\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/\",\"url\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/\",\"name\":\"(Italiano) Come usare Java JMX in ambienti container\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png\",\"datePublished\":\"2024-06-18T22:05:43+00:00\",\"dateModified\":\"2024-06-19T10:08:00+00:00\",\"description\":\"Configurare Java JMX in ambienti container, in particolare su Red Hat OpenShift e un'applicazione Java basata su Quarkus utilizzando JDK Mission Control come strumento di monitoraggio.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png\",\"width\":1024,\"height\":512,\"caption\":\"Come usare Java JMX in ambienti container\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dontesta.it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Come usare Java JMX in ambienti container\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dontesta.it\/#website\",\"url\":\"https:\/\/www.dontesta.it\/\",\"name\":\"Antonio Musarra&#039;s Blog\",\"description\":\"The ideal solution for a problem\",\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dontesta.it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\",\"name\":\"Antonio Musarra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"width\":512,\"height\":512,\"caption\":\"Antonio Musarra\"},\"logo\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\"},\"description\":\"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.\",\"sameAs\":[\"https:\/\/www.dontesta.it\",\"https:\/\/www.facebook.com\/antoniomusarrablog\",\"https:\/\/www.linkedin.com\/in\/amusarra\/\",\"https:\/\/x.com\/antonio_musarra\",\"https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"(Italiano) Come usare Java JMX in ambienti container","description":"Configurare Java JMX in ambienti container, in particolare su Red Hat OpenShift e un'applicazione Java basata su Quarkus utilizzando JDK Mission Control come strumento di monitoraggio.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/","og_locale":"en_US","og_type":"article","og_title":"(Italiano) Come usare Java JMX in ambienti container","og_description":"Configurare Java JMX in ambienti container, in particolare su Red Hat OpenShift e un'applicazione Java basata su Quarkus utilizzando JDK Mission Control come strumento di monitoraggio.","og_url":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/","og_site_name":"Antonio Musarra&#039;s Blog","article_publisher":"https:\/\/www.facebook.com\/antoniomusarrablog","article_author":"https:\/\/www.facebook.com\/antoniomusarrablog","article_published_time":"2024-06-18T22:05:43+00:00","article_modified_time":"2024-06-19T10:08:00+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png","type":"image\/png"}],"author":"Antonio Musarra","twitter_card":"summary_large_image","twitter_creator":"@antonio_musarra","twitter_site":"@antonio_musarra","twitter_misc":{"Written by":"Antonio Musarra","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#article","isPartOf":{"@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/"},"author":{"name":"Antonio Musarra","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"headline":"(Italiano) Come usare Java JMX in ambienti container","datePublished":"2024-06-18T22:05:43+00:00","dateModified":"2024-06-19T10:08:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/"},"wordCount":2229,"commentCount":0,"publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"image":{"@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png","keywords":["Java","jmx"],"articleSection":["Blog","Framework","Tools"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/","url":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/","name":"(Italiano) Come usare Java JMX in ambienti container","isPartOf":{"@id":"https:\/\/www.dontesta.it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage"},"image":{"@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png","datePublished":"2024-06-18T22:05:43+00:00","dateModified":"2024-06-19T10:08:00+00:00","description":"Configurare Java JMX in ambienti container, in particolare su Red Hat OpenShift e un'applicazione Java basata su Quarkus utilizzando JDK Mission Control come strumento di monitoraggio.","breadcrumb":{"@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#primaryimage","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/feature_images_come_usare_java_jmx_-ambienti_container.png","width":1024,"height":512,"caption":"Come usare Java JMX in ambienti container"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dontesta.it\/2024\/06\/19\/come-usare-java-jmx-in-ambienti-container\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dontesta.it\/"},{"@type":"ListItem","position":2,"name":"Come usare Java JMX in ambienti container"}]},{"@type":"WebSite","@id":"https:\/\/www.dontesta.it\/#website","url":"https:\/\/www.dontesta.it\/","name":"Antonio Musarra&#039;s Blog","description":"The ideal solution for a problem","publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dontesta.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24","name":"Antonio Musarra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","width":512,"height":512,"caption":"Antonio Musarra"},"logo":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/"},"description":"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.","sameAs":["https:\/\/www.dontesta.it","https:\/\/www.facebook.com\/antoniomusarrablog","https:\/\/www.linkedin.com\/in\/amusarra\/","https:\/\/x.com\/antonio_musarra","https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/5654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/comments?post=5654"}],"version-history":[{"count":0,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/5654\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media\/5696"}],"wp:attachment":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media?parent=5654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/categories?post=5654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/tags?post=5654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}