{"id":31988,"date":"2025-02-25T09:48:48","date_gmt":"2025-02-25T08:48:48","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=31988"},"modified":"2025-02-25T09:48:51","modified_gmt":"2025-02-25T08:48:51","slug":"quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/","title":{"rendered":"Quarkus: guida pratica per esporre i metadati dei microservizi"},"content":{"rendered":"\n<p>In un mondo di architetture distribuite e microservizi, l&#8217;<strong>osservabilit\u00e0<\/strong> \u00e8 diventata una colonna portante per garantire la stabilit\u00e0, la gestibilit\u00e0 e l&#8217;efficienza delle nostre applicazioni. Capire &#8220;cosa sta succedendo&#8221; all&#8217;interno dei nostri servizi, in produzione e non solo, \u00e8 cruciale per diagnosticare problemi, monitorare le performance e pianificare aggiornamenti. Un elemento fondamentale per raggiungere l&#8217;osservabilit\u00e0 \u00e8 l&#8217;<strong>esposizione dei metadati<\/strong>.<\/p>\n\n\n\n<p>Ma cosa intendiamo esattamente per metadati in questo contesto? E perch\u00e9 sono cos\u00ec importanti?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cosa-sono-i-metadati-di-un-microservizio\">Cosa sono i metadati di un microservizio?<\/h2>\n\n\n\n<p>I metadati di un microservizio sono, in breve, &#8220;dati sui dati&#8221;. Nel contesto delle nostre applicazioni, si tratta di informazioni che descrivono il servizio stesso, il suo ambiente di esecuzione, la versione del codice in esecuzione, le configurazioni e molto altro. Questi dati contestuali, pur non essendo la logica di business principale del servizio, diventano <strong>essenziali per operare e gestire il servizio in modo efficace<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-perche-esporre-i-metadati-e-fondamentale\">Perch\u00e9 esporre i metadati \u00e8 fondamentale?<\/h2>\n\n\n\n<p>Come abbiamo discusso in precedenza, esporre i metadati abilita una serie di benefici chiave.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Service Discovery:<\/strong> permette ad altri servizi di trovare e comunicare con il tuo microservizio dinamicamente.<\/li>\n\n\n\n<li><strong>Monitoraggio e Osservabilit\u00e0:<\/strong> fornisce informazioni vitali per monitorare la salute, le performance e il comportamento del servizio.<\/li>\n\n\n\n<li><strong>Gestione e Orchestrazione:<\/strong> facilita il deployment, lo scaling e la gestione del ciclo di vita del servizio.<\/li>\n\n\n\n<li><strong>Documentazione e Comprensione:<\/strong> aiuta a documentare e comprendere l&#8217;architettura e le dipendenze dei tuoi microservizi.<\/li>\n\n\n\n<li><strong>Sicurezza:<\/strong> pu\u00f2 contribuire a definire policy di accesso e audit.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-l-estensione-quarkus-info-la-soluzione-semplice-ed-efficace\">L&#8217;estensione Quarkus Info: la soluzione semplice ed efficace<\/h2>\n\n\n\n<p><a href=\"https:\/\/quarkus.io\">Quarkus<\/a>, il framework Supersonic Subatomic Java e cloud-native, ci viene in aiuto con l&#8217;estensione<strong> <\/strong><code><a href=\"https:\/\/quarkus.io\/extensions\/io.quarkus\/quarkus-info\/\">quarkus-info<\/a><\/code>. Questa estensione, incredibilmente semplice da aggiungere e configurare, espone automaticamente una ricca gamma di metadati tramite l&#8217;endpoint HTTP <code>\/q\/info<\/code>.<\/p>\n\n\n\n<p>In questa guida pratica, vedremo passo passo come integrare l&#8217;estensione <code>quarkus-info<\/code> in un progetto Quarkus esistente e come sfruttare i metadati esposti per migliorare l&#8217;osservabilit\u00e0 della tua applicazione. Utilizzeremo come progetto di esempio <a href=\"https:\/\/github.com\/amusarra\/quarkus-graphql-quickstart\">Quarkus GraphQL Quickstart + MinIO as Object Store S3<\/a> i cui sorgenti sono pubblicati su GitHub.<\/p>\n\n\n\n<p><strong>Nota<\/strong>: In questa guida vedrete degli aspetti dell&#8217;estensione quarkus-info specifici della versione <a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-18-1-released\/\">3.18.1<\/a> di Quarkus rilasciata il 29\/01\/2025.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-passo-1-aggiungere-l-estensione-quarkus-info-al-tuo-progetto-quarkus\">Passo 1: aggiungere l&#8217;estensione quarkus-info al tuo progetto Quarkus<\/h3>\n\n\n\n<p>Per aggiungere questa estensione al tuo progetto <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-avanzata-per-il-deploy-su-openshift\/\">Quarkus<\/a>, esegui il comando appropriato nella directory del progetto. Puoi utilizzare Quarkus CLI, Maven o Gradle. Di seguito, trovi i comandi corrispondenti in ordine.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Tramite Quarkus CLI<\/span>\nquarkus ext add io.quarkus:quarkus-info<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Tramite Maven<\/span>\n.\/mvnw quarkus:add-extension -Dextensions=<span class=\"hljs-string\">\"io.quarkus:quarkus-info\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Tramite Gradle<\/span>\n.\/gradlew addExtension --extensions=<span class=\"hljs-string\">\"io.quarkus:quarkus-info\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In ogni caso \u00e8 possibile agire direttamente sul file <code>pom.xml<\/code> o <code>build.gradle<\/code> aggiungendo manualmente la dipendenza. A seguire l&#8217;esempio della dipendenza da aggiungere al <code>pom.xml<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>io.quarkus<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>quarkus-info<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dopo aver aggiunto la dipendenza e sincronizzato il tuo progetto (ad esempio, eseguendo <code>mvn clean install<\/code> con Maven o ricaricando il progetto Gradle), l&#8217;estensione <code>quarkus-info<\/code> sar\u00e0 attiva e pronta all&#8217;uso!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-passo-2-avvia-l-applicazione-e-accedi-all-endpoint-q-info\">Passo 2: avvia l&#8217;applicazione e accedi all&#8217;endpoint \/q\/info<\/h3>\n\n\n\n<p>Avvia ora la tua applicazione Quarkus in modalit\u00e0 sviluppo (ad esempio, con <code>mvn quarkus:dev<\/code> o <code>quarkus dev<\/code>). Una volta che l&#8217;applicazione \u00e8 in esecuzione, puoi accedere all&#8217;endpoint <code>\/q\/info<\/code> tramite il tuo browser o utilizzando uno strumento come <code>curl<\/code>.<\/p>\n\n\n\n<p>Apri il tuo browser e naviga all&#8217;indirizzo <code>http:\/\/localhost:8080\/q\/info<\/code> , oppure, apri un terminale ed esegui il comando cURL.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Chiamata HTTP verso end-point \/q\/info<\/span>\ncurl http:\/\/localhost:8080\/q\/info<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dovresti visualizzare una risposta JSON simile a questa (il contenuto esatto varier\u00e0 a seconda del tuo ambiente e del progetto).<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n    <span class=\"hljs-attr\">\"build\"<\/span>: {\n        <span class=\"hljs-attr\">\"artifact\"<\/span>: <span class=\"hljs-string\">\"quarkus-graphql-quickstart\"<\/span>,\n        <span class=\"hljs-attr\">\"enabled\"<\/span>: <span class=\"hljs-string\">\"true\"<\/span>,\n        <span class=\"hljs-attr\">\"group\"<\/span>: <span class=\"hljs-string\">\"it.dontesta.labs.quarkus.graphql\"<\/span>,\n        <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"quarkus-graphql-quickstart\"<\/span>,\n        <span class=\"hljs-attr\">\"quarkusVersion\"<\/span>: <span class=\"hljs-string\">\"3.18.2\"<\/span>,\n        <span class=\"hljs-attr\">\"time\"<\/span>: <span class=\"hljs-string\">\"2025-02-07T15:54:05.935644+01:00\"<\/span>,\n        <span class=\"hljs-attr\">\"version\"<\/span>: <span class=\"hljs-string\">\"1.0.0-SNAPSHOT\"<\/span>\n    },\n    <span class=\"hljs-attr\">\"git\"<\/span>: {\n        <span class=\"hljs-attr\">\"branch\"<\/span>: <span class=\"hljs-string\">\"main\"<\/span>,\n        <span class=\"hljs-attr\">\"commit\"<\/span>: {\n            <span class=\"hljs-attr\">\"id\"<\/span>: <span class=\"hljs-string\">\"689bac488212a182ad323cc525c98dbf09bad1b7\"<\/span>,\n            <span class=\"hljs-attr\">\"time\"<\/span>: <span class=\"hljs-string\">\"2025-02-06T13:42:29+01:00\"<\/span>\n        }\n    },\n    <span class=\"hljs-attr\">\"java\"<\/span>: {\n        <span class=\"hljs-attr\">\"vendor\"<\/span>: <span class=\"hljs-string\">\"Amazon.com Inc.\"<\/span>,\n        <span class=\"hljs-attr\">\"vendorVersion\"<\/span>: <span class=\"hljs-string\">\"Corretto-21.0.2.13.1\"<\/span>,\n        <span class=\"hljs-attr\">\"version\"<\/span>: <span class=\"hljs-string\">\"21.0.2\"<\/span>\n    },\n    <span class=\"hljs-attr\">\"os\"<\/span>: {\n        <span class=\"hljs-attr\">\"arch\"<\/span>: <span class=\"hljs-string\">\"aarch64\"<\/span>,\n        <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"Mac OS X\"<\/span>,\n        <span class=\"hljs-attr\">\"version\"<\/span>: <span class=\"hljs-string\">\"15.3\"<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-analisi-dei-metadati-esposti\">Analisi dei metadati esposti<\/h3>\n\n\n\n<p>Come puoi vedere, l&#8217;endpoint <code>\/q\/info<\/code> espone una vasta gamma di metadati strutturati in formato JSON, suddivisi in diverse sezioni:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>git<\/code><\/strong>: informazioni base sul repository Git, inclusi ramo, commit utilizzato per la build (<code>id<\/code> e <code>time<\/code>);<\/li>\n\n\n\n<li><strong><code>java<\/code><\/strong>: dettagli sulla Java Virtual Machine (JVM) in esecuzione, come versione, vendor e vendor version;<\/li>\n\n\n\n<li><strong><code>os<\/code><\/strong>: informazioni sul sistema operativo su cui l&#8217;applicazione \u00e8 in esecuzione, inclusi nome, versione e architettura.<\/li>\n\n\n\n<li><strong><code>build<\/code><\/strong>: informazioni relative al processo di build, versione dell&#8217;applicazione, artifact ID, group ID, versione di Quarkus e timestamp della build.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-personalizzare-i-metadati-esposti-opzionale\">Personalizzare i metadati esposti (opzionale)<\/h3>\n\n\n\n<p>L&#8217;estensione <code>quarkus-info<\/code> offre anche un certo grado di personalizzazione. Sebbene la configurazione predefinita sia gi\u00e0 molto completa, \u00e8 possibile aggiungere o rimuovere sezioni o informazioni specifiche tramite configurazione nel file <code>application.properties<\/code> o <code>application.yml<\/code>.<\/p>\n\n\n\n<p>Ad esempio, per disabilitare completamente la sezione <code>git<\/code>, puoi aggiungere la seguente propriet\u00e0 in <code>application.properties<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">quarkus.info.git.enabled=<span class=\"hljs-literal\">false<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Potremmo per esempio, ottenere maggiori informazioni che riguardano git, aggiungendo la seguente propriet\u00e0 <code>quarkus.info.git.mode<\/code> in <code>application.properties<\/code> impostando il valore <code>FULL<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarkus.info.git.mode=FULL<\/code><\/span><\/pre>\n\n\n<p>Questa propriet\u00e0 permette di scegliere tra due modalit\u00e0 di esposizione dei metadati Git: SIMPLE e FULL.<\/p>\n\n\n\n<p><strong><code>SIMPLE<\/code> <\/strong>(valore predefinito)<strong>:<\/strong> in questa modalit\u00e0 (di default non configurando nulla), l&#8217;estensione mostra solo le informazioni base su Git. Questo \u00e8 generalmente sufficiente per scenari standard di build locale o CI\/CD. Le informazioni estratte includono:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ramo corrente (<code>branch<\/code>);<\/li>\n\n\n\n<li>informazioni sul commit pi\u00f9 recente (<code>commit<\/code>), inclusi ID e timestamp.<\/li>\n<\/ul>\n\n\n\n<p><strong><code>FULL<\/code>:<\/strong> impostando <code>quarkus.info.git.mode=FULL<\/code>, l&#8217;estensione Quarkus Info estrae informazioni complete su Git. Questa modalit\u00e0 pu\u00f2 essere utile in scenari pi\u00f9 complessi o quando si desidera una descrizione Git pi\u00f9 dettagliata, inclusi eventuali tag e commit abbreviato, etc.<\/p>\n\n\n\n<p>Con la nuova configurazione (<code>FULL<\/code>), dovresti visualizzare una risposta JSON simile a questa nella sezione che concerne git.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">    <span class=\"hljs-string\">\"git\"<\/span>: {\n        <span class=\"hljs-string\">\"branch\"<\/span>: <span class=\"hljs-string\">\"main\"<\/span>,\n        <span class=\"hljs-string\">\"build\"<\/span>: {\n            <span class=\"hljs-string\">\"host\"<\/span>: <span class=\"hljs-string\">\"amusarra-macbook-pro.local\"<\/span>,\n            <span class=\"hljs-string\">\"user\"<\/span>: {\n                <span class=\"hljs-string\">\"email\"<\/span>: <span class=\"hljs-string\">\"antonio.musarra@gmail.com\"<\/span>,\n                <span class=\"hljs-string\">\"name\"<\/span>: <span class=\"hljs-string\">\"Antonio Musarra\"<\/span>\n            },\n            <span class=\"hljs-string\">\"version\"<\/span>: <span class=\"hljs-string\">\"1.0.0-SNAPSHOT\"<\/span>\n        },\n        <span class=\"hljs-string\">\"commit\"<\/span>: {\n            <span class=\"hljs-string\">\"author\"<\/span>: {\n                <span class=\"hljs-string\">\"time\"<\/span>: <span class=\"hljs-string\">\"2025-02-06T13:42:29+01:00\"<\/span>\n            },\n            <span class=\"hljs-string\">\"committer\"<\/span>: {\n                <span class=\"hljs-string\">\"time\"<\/span>: <span class=\"hljs-string\">\"2025-02-06T13:42:29+01:00\"<\/span>\n            },\n            <span class=\"hljs-string\">\"id\"<\/span>: {\n                <span class=\"hljs-string\">\"abbrev\"<\/span>: <span class=\"hljs-string\">\"689bac488212a\"<\/span>,\n                <span class=\"hljs-string\">\"full\"<\/span>: <span class=\"hljs-string\">\"689bac488212a182ad323cc525c98dbf09bad1b7\"<\/span>,\n                <span class=\"hljs-string\">\"message\"<\/span>: {\n                    <span class=\"hljs-string\">\"full\"<\/span>: <span class=\"hljs-string\">\"Project upgraded to Quarkus 3.18.2\"<\/span>,\n                    <span class=\"hljs-string\">\"short\"<\/span>: <span class=\"hljs-string\">\"Project upgraded to Quarkus 3.18.2\"<\/span>\n                }\n            },\n            <span class=\"hljs-string\">\"time\"<\/span>: <span class=\"hljs-string\">\"2025-02-06T13:42:29+01:00\"<\/span>,\n            <span class=\"hljs-string\">\"user\"<\/span>: {\n                <span class=\"hljs-string\">\"email\"<\/span>: <span class=\"hljs-string\">\"antonio.musarra@gmail.com\"<\/span>,\n                <span class=\"hljs-string\">\"name\"<\/span>: <span class=\"hljs-string\">\"Antonio Musarra\"<\/span>\n            }\n        },\n        <span class=\"hljs-string\">\"remote\"<\/span>: <span class=\"hljs-string\">\"https:\/\/github.com\/amusarra\/quarkus-graphql-quickstart.git\"<\/span>,\n        <span class=\"hljs-string\">\"tags\"<\/span>: &#91;\n            <span class=\"hljs-string\">\"v1.0.0-rc.01\"<\/span>\n        ]\n    }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>L&#8217;impostazione <code>quarkus.info.git.mode=FULL<\/code> amplifica i benefici dell&#8217;estensione Quarkus Info per l&#8217;application discovery fornendo un livello di dettaglio significativamente maggiore sulle informazioni relative alla versione del codice in esecuzione. Vediamo come questo dettaglio extra si traduce in vantaggi concreti.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tracciabilit\u00e0 estremamente precisa della versione:<\/strong> mentre la modalit\u00e0 <code>SIMPLE<\/code> fornisce l&#8217;hash completo del commit e il branch, la modalit\u00e0 <code>FULL<\/code> aggiunge informazioni temporali (<code>commit.time<\/code>), messaggi di commit (<code>commit.short-message<\/code>, <code>commit.full-message<\/code>) e dettagli sui tag (<code>tags<\/code>). Queste informazioni rendono la tracciabilit\u00e0 della versione dell&#8217;applicazione in esecuzione estremamente precisa. Non solo si conosce <em>quale<\/em> commit \u00e8 in esecuzione, ma anche <em>quando<\/em> \u00e8 stato committato, <em>perch\u00e9<\/em> (grazie al messaggio di commit), e se \u00e8 associato a un rilascio ufficiale (grazie ai tag).<\/li>\n\n\n\n<li><strong>Diagnostica avanzata e debugging:<\/strong> in scenari di troubleshooting o debugging, avere l&#8217;intero messaggio di commit a disposizione tramite l&#8217;endpoint <code>\/q\/info<\/code> pu\u00f2 essere estremamente utile. Il messaggio di commit spesso descrive in dettaglio le modifiche introdotte da quel commit specifico, offrendo un contesto prezioso per capire il codice in esecuzione e identificare potenziali cause di problemi. La data e ora del commit (<code>commit.time<\/code>) possono anche aiutare a correlare eventi e log.<\/li>\n\n\n\n<li><strong>Rollback e ripristino di versioni precedenti con maggiore sicurezza:<\/strong> quando si necessita di effettuare un rollback a una versione precedente dell&#8217;applicazione, le informazioni complete di Git fornite dalla modalit\u00e0 <code>FULL<\/code> rendono il processo pi\u00f9 sicuro e meno incline a errori. Si pu\u00f2 identificare con precisione la versione <em>esatta<\/em> a cui si vuole tornare, non solo tramite l&#8217;hash del commit, ma anche tramite il timestamp, il messaggio di commit e i tag associati. Questo \u00e8 cruciale in ambienti di produzione dove l&#8217;accuratezza nel rollback \u00e8 fondamentale.<\/li>\n\n\n\n<li><strong>Audit e conformit\u00e0:<\/strong> per scopi di audit e conformit\u00e0, avere un registro dettagliato delle versioni del codice in produzione \u00e8 spesso un requisito. La modalit\u00e0 <code>FULL<\/code> di <code>quarkus.info.git.mode<\/code> fornisce un modo semplice e standardizzato per esporre queste informazioni, facilitando la generazione di report di audit e la dimostrazione della conformit\u00e0 a determinati standard.<\/li>\n\n\n\n<li><strong>Integrazione con strumenti di gestione del ciclo di vita delle applicazioni (ALM) e DevOps:<\/strong> le informazioni dettagliate di Git fornite dalla modalit\u00e0 <code>FULL<\/code> si integrano meglio con strumenti ALM e DevOps. Questi strumenti possono consumare le informazioni dall&#8217;endpoint <code>\/q\/info<\/code> per automatizzare processi come la gestione delle release, il tracciamento delle modifiche, l&#8217;analisi dell&#8217;impatto delle modifiche, e la correlazione tra codice in produzione e attivit\u00e0 di sviluppo.<\/li>\n<\/ul>\n\n\n\n<p><strong>Quali considerazioni fare sull&#8217;utilizzo di questa modalit\u00e0?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Performance in build-time:<\/strong> l&#8217;estrazione di informazioni Git pi\u00f9 dettagliate (specialmente il messaggio di commit completo e i tag) potrebbe richiedere leggermente pi\u00f9 tempo durante la fase di build rispetto alla modalit\u00e0 <code>SIMPLE<\/code>. Tuttavia, l&#8217;impatto sulle performance di build \u00e8 generalmente trascurabile nella maggior parte dei casi.<\/li>\n\n\n\n<li><strong>Dimensione dell&#8217;output:<\/strong> l&#8217;output JSON dell&#8217;endpoint <code>\/q\/info<\/code> sar\u00e0 leggermente pi\u00f9 grande con <code>quarkus.info.git.mode=FULL<\/code> a causa delle informazioni aggiuntive. Anche in questo caso, l&#8217;aumento di dimensione \u00e8 solitamente modesto e non dovrebbe rappresentare un problema. <\/li>\n\n\n\n<li><strong>Sensibilit\u00e0 delle informazioni (messaggi di commit):<\/strong> \u00e8 importante considerare se i messaggi di commit contengono informazioni sensibili che non si desidera esporre tramite l&#8217;endpoint <code>\/q\/info<\/code>. In rari casi, i messaggi di commit potrebbero contenere dettagli interni o informazioni di sicurezza che potrebbero essere considerate inappropriate per l&#8217;esposizione pubblica. In questi scenari estremamente rari, si potrebbe optare per <code>quarkus.info.git.mode=SIMPLE<\/code> o valutare attentamente cosa viene committato e se \u00e8 appropriato includere certe informazioni nei messaggi di commit. Nella maggior parte dei casi, i benefici in termini di tracciabilit\u00e0 e diagnostica superano di gran lunga questo potenziale rischio, e buone pratiche di commit message writing dovrebbero mitigare qualsiasi problema.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-e-possibile-aggiungere-informazioni-addizionali\">\u00c8 possibile aggiungere informazioni addizionali?<\/h2>\n\n\n\n<p>Certamente! L&#8217;interfaccia <code><a href=\"https:\/\/quarkus.io\/guides\/all-builditems#info-spi\">InfoContributor<\/a><\/code> \u00e8 il meccanismo principale fornito dall&#8217;estensione Quarkus Info per permetterti di <strong>aggiungere informazioni personalizzate<\/strong> all&#8217;endpoint <code>\/q\/info<\/code>, andando oltre i metadati predefiniti (Git, Java, OS, Build). Questo \u00e8 particolarmente utile quando vuoi esporre informazioni specifiche del tuo dominio applicativo, configurazioni custom, o lo stato di componenti esterni.<\/p>\n\n\n\n<p>Vediamo un esempio pratico passo dopo passo su come utilizzare l&#8217;interfaccia <code>InfoContributor<\/code>.<\/p>\n\n\n\n<p>Immagina di voler aggiungere al tuo endpoint <code>\/q\/info<\/code> le seguenti informazioni aggiuntive.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Stato di un feature flag custom:<\/strong> vuoi esporre lo stato di un feature flag chiamato <code>nuova-dashboard-abilitata<\/code> che controlla se una nuova funzionalit\u00e0 della dashboard \u00e8 attiva o meno.<\/li>\n\n\n\n<li><strong>Stato della connessione a MinIO:<\/strong> vuoi indicare se la connessione all&#8217;<a href=\"https:\/\/min.io\/\">Object Store S3 MinIO<\/a> \u00e8 attualmente attiva e funzionante.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-passo-1-creare-una-classe-che-implementa-infocontributor\">Passo 1: Creare una classe che implementa InfoContributor<\/h3>\n\n\n\n<p>Il primo passo \u00e8 creare una nuova classe Java che implementi l&#8217;interfaccia <code>io.quarkus.info.runtime.spi.InfoContributor<\/code>. A seguire vedremo i dettagli su come proseguire con l&#8217;implementazione.<\/p>\n\n\n\n<p>Crea una nuova classe Java, ad esempio chiamata <code>CustomInfoContributor.java<\/code>, nel tuo progetto Quarkus.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">package<\/span> it.dontesta.labs.quarkus.graphql.info.contributor;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> io.quarkus.info.runtime.spi.InfoContributor;\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> jakarta.enterprise.context.ApplicationScoped;\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> java.util.Map;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-meta\">@ApplicationScoped<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomInfoContributor<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">InfoContributor<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-meta\">@Override<\/span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">name<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"app-detail-info\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-meta\">@Override<\/span>\n<\/span><\/span><span class='shcb-loc'><span>  <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> Map&lt;String, Object&gt; <span class=\"hljs-title\">data<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-comment\">\/\/ Add custom information<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-keyword\">return<\/span> Map.of();\n<\/span><\/span><span class='shcb-loc'><span>  }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Vediamo quali sono i punti chiave del codice che implementa <code>InfoContributor<\/code>.<\/p>\n\n\n\n<p><strong>Annotazione <code>@ApplicationScoped<\/code>:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>@ApplicationScoped<\/code> &#8211; <strong>fondamentale!<\/strong> Indica che questa classe \u00e8 un CDI bean e viene gestita dal container CDI di Quarkus, permettendo all&#8217;estensione Info di rilevarla e usarla.<\/li>\n<\/ul>\n\n\n\n<p><strong>Metodo <code>name()<\/code>:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scopo di <code>name()<\/code>:<\/strong> il metodo <code>name()<\/code> deve restituire una <code>String<\/code> che identifica univocamente il tuo contributor. Questo nome viene utilizzato dall&#8217;estensione Info per organizzare e presentare i metadati. Nel nostro caso il valore restituito \u00e8 <code>app-detail-info<\/code>.<\/li>\n<\/ul>\n\n\n\n<p><strong>Metodo <code>data()<\/code>:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scopo di <code>data()<\/code>:<\/strong> il metodo <code>data()<\/code> deve restituire un oggetto <code>Map&lt;String, Object&gt;<\/code>. <strong>\u00c8 in questo <code>Map<\/code> che devi inserire i tuoi metadati personalizzati.<\/strong> La chiave della mappa sar\u00e0 il nome del metadato (es. <code>\"status\"<\/code>, <code>\"version\"<\/code>, <code>\"feature-flags\"<\/code>) e il valore sar\u00e0 il valore del metadato (che pu\u00f2 essere una <code>String<\/code>, un <code>Number<\/code>, un <code>Boolean<\/code>, un&#8217;altra <code>Map<\/code>, una <code>List<\/code>, ecc.).<\/li>\n\n\n\n<li>Nel tuo esempio di base, sopra mostrato, il metodo <code>data()<\/code> restituisce <code>Map.of()<\/code>, cio\u00e8 una mappa vuota. Questo significa che al momento non stai aggiungendo alcun metadato personalizzato con questo contributor.<\/li>\n<\/ul>\n\n\n\n<p>Per tener fede allo scenario sopra descritto, l&#8217;implementazione completa della classe <code>CustomInfoContributor<\/code> \u00e8 mostrata dal codice a seguire.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Java\" data-shcb-language-slug=\"java\"><span><code class=\"hljs language-java shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span><span class=\"hljs-keyword\">package<\/span> it.dontesta.labs.quarkus.graphql.info.contributor;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> io.quarkus.info.runtime.spi.InfoContributor;\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> jakarta.enterprise.context.ApplicationScoped;\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> java.util.HashMap;\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">import<\/span> java.util.Map;\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-meta\">@ApplicationScoped<\/span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomInfoContributor<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title\">InfoContributor<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-meta\">@Override<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> String <span class=\"hljs-title\">name<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"app-detail-info\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-meta\">@Override<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> Map&lt;String, Object&gt; <span class=\"hljs-title\">data<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>        Map&lt;String, Object&gt; customData = <span class=\"hljs-keyword\">new<\/span> HashMap&lt;&gt;();\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-comment\">\/\/ Sezione Feature Flags<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        Map&lt;String, Boolean&gt; featureFlags = <span class=\"hljs-keyword\">new<\/span> HashMap&lt;&gt;();\n<\/span><\/span><span class='shcb-loc'><span>        featureFlags.put(<span class=\"hljs-string\">\"nuova-dashboard-abilitata\"<\/span>, isNuovaDashboardAbilitata());\n<\/span><\/span><span class='shcb-loc'><span>        customData.put(<span class=\"hljs-string\">\"feature-flags\"<\/span>, featureFlags);\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-comment\">\/\/ Sezione MinIO Connection Status<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        Map&lt;String, Object&gt; minioInfo = <span class=\"hljs-keyword\">new<\/span> HashMap&lt;&gt;();\n<\/span><\/span><span class='shcb-loc'><span>        minioInfo.put(<span class=\"hljs-string\">\"status\"<\/span>, getMinIOConnectionStatus());\n<\/span><\/span><span class='shcb-loc'><span>        customData.put(<span class=\"hljs-string\">\"minio\"<\/span>, minioInfo);\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">return<\/span> customData;\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-comment\">\/\/ Metodo di esempio per simulare lo stato del feature flag<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">boolean<\/span> <span class=\"hljs-title\">isNuovaDashboardAbilitata<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-comment\">\/\/ Sostituisci con la logica reale<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">true<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-comment\">\/\/ Metodo di esempio per simulare lo stato della connessione MinIO <\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-comment\">\/\/ Da implementare health check reale.<\/span>\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-function\"><span class=\"hljs-keyword\">private<\/span> String <span class=\"hljs-title\">getMinIOConnectionStatus<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-comment\">\/\/ Sostituisci con la logica di health check MinIO reale<\/span>\n<\/span><\/span><span class='shcb-loc'><span>        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"UP\"<\/span>;\n<\/span><\/span><span class='shcb-loc'><span>    }\n<\/span><\/span><span class='shcb-loc'><span>}\n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Java<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">java<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-passo-2-avviare-l-applicazione-e-verificare-l-endpoint-q-info\">Passo 2: avviare l&#8217;applicazione e verificare l&#8217;endpoint \/q\/info<\/h3>\n\n\n\n<p>Avvia nuovamente la tua applicazione Quarkus (es. <code>mvn quarkus:dev<\/code> o <code>quarkus dev<\/code>). Ora, se accedi all&#8217;endpoint <code>\/q\/info<\/code>, dovresti vedere le nuove sezioni <code>feature-flags<\/code> e <code>minio<\/code> nel JSON di risposta all&#8217;interno di <code>app-detail-info<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n    <span class=\"hljs-attr\">\"app-detail-info\"<\/span>: {\n        <span class=\"hljs-attr\">\"feature-flags\"<\/span>: {\n            <span class=\"hljs-attr\">\"nuova-dashboard-abilitata\"<\/span>: <span class=\"hljs-literal\">true<\/span>\n        },\n        <span class=\"hljs-attr\">\"minio\"<\/span>: {\n            <span class=\"hljs-attr\">\"status\"<\/span>: <span class=\"hljs-string\">\"UP\"<\/span>\n        }\n    },\n    <span class=\"hljs-attr\">\"build\"<\/span>: {\n    <span class=\"hljs-comment\">\/\/ ...<\/span>\n    },\n    <span class=\"hljs-attr\">\"git\"<\/span>: {\n    <span class=\"hljs-comment\">\/\/ ...<\/span>\n    },\n    <span class=\"hljs-attr\">\"java\"<\/span>: {\n    <span class=\"hljs-comment\">\/\/ ...<\/span>\n    },\n    <span class=\"hljs-attr\">\"os\"<\/span>: {\n    <span class=\"hljs-comment\">\/\/ ...<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ora che hai esteso l&#8217;endpoint <code>\/q\/info<\/code> con informazioni personalizzate, puoi utilizzarle in modo simile ai metadati predefiniti.<\/p>\n\n\n\n<p>L&#8217;interfaccia <code>InfoContributor<\/code> in Quarkus Info \u00e8 uno strumento potente ed elegante per estendere l&#8217;endpoint <code>\/q\/info<\/code> con metadati personalizzati. Implementando questa interfaccia e registrando la tua classe come <code>@ApplicationScoped<\/code>, puoi facilmente arricchire l&#8217;osservabilit\u00e0 dei tuoi microservizi Quarkus con informazioni specifiche del tuo dominio applicativo. Ricorda di sostituire i metodi di esempio (<code>isNuovaDashboardAbilitata()<\/code> e <code>getMinIOConnectionStatus()<\/code>) con la logica reale per recuperare le informazioni che desideri esporre dal tuo sistema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sfruttare-i-metadati-per-un-osservabilita-migliore\">Sfruttare i metadati per un osservabilit\u00e0 migliore<\/h2>\n\n\n\n<p>Ora che abbiamo visto come esporre i metadati con l&#8217;estensione <code>quarkus-info<\/code>, \u00e8 importante capire come sfruttare queste informazioni preziose nel mondo reale. Ecco alcuni esempi di come questi metadati possono essere utilizzati.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Monitoraggio Centralizzato:<\/strong> integra l&#8217;endpoint <code>\/q\/info<\/code> con il tuo sistema di monitoraggio (come Prometheus, Grafana, Datadog, ecc.). Puoi configurare il tuo sistema di monitoraggio per <em>scrape<\/em> periodicamente l&#8217;endpoint <code>\/q\/info<\/code> e visualizzare le informazioni in dashboard personalizzate. Questo ti permette di avere una visione centralizzata delle versioni dei tuoi servizi, dell&#8217;ambiente di runtime e di altre informazioni contestuali.<\/li>\n\n\n\n<li><strong>Service Catalog:<\/strong> utilizza i metadati esposti dall&#8217;endpoint <code>\/q\/info<\/code> per popolare un catalogo di servizi centralizzato (come Backstage, Port, Cortex). Il catalogo pu\u00f2 utilizzare informazioni come il nome del servizio, la versione, il link al repository Git e altro per fornire una documentazione dinamica e un punto di riferimento unico per tutti i tuoi microservizi.<\/li>\n\n\n\n<li><strong>Troubleshooting e Debugging rapido:<\/strong> in caso di problemi in produzione, l&#8217;endpoint <code>\/q\/info<\/code> diventa uno strumento di diagnostica fondamentale. Puoi rapidamente interrogare l&#8217;endpoint per identificare la versione esatta del servizio che sta generando l&#8217;errore, il commit di riferimento, la versione di Java e del sistema operativo. Queste informazioni accelerano notevolmente il processo di debugging e ti permettono di isolare pi\u00f9 rapidamente la causa del problema.<\/li>\n\n\n\n<li><strong>Audit e Compliance:<\/strong> per scenari che richiedono audit di sicurezza o compliance normativa, avere traccia precisa della versione del codice e dell&#8217;ambiente in esecuzione diventa essenziale. L&#8217;endpoint <code>\/q\/info<\/code> fornisce un punto di riferimento affidabile per queste informazioni.<\/li>\n\n\n\n<li><strong>Deployment e Rollback controllati:<\/strong> durante i processi di deployment e rollback, puoi utilizzare i metadati esposti per verificare che la versione corretta del servizio sia stata distribuita in ogni ambiente. Puoi automatizzare controlli post-deployment che verificano la versione tramite l&#8217;endpoint <code>\/q\/info<\/code> prima di considerare un deployment completato.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusioni\">Conclusioni<\/h2>\n\n\n\n<p>L&#8217;estensione <code>quarkus-info<\/code> \u00e8 un piccolo ma potente strumento che semplifica enormemente l&#8217;esposizione dei metadati nei tuoi microservizi Quarkus. Aggiungendo una semplice dipendenza e senza richiedere configurazioni complesse, puoi abilitare un endpoint <code>\/q\/info<\/code> ricco di informazioni preziose per l&#8217;osservabilit\u00e0, la gestione e la robustezza delle tue applicazioni.<\/p>\n\n\n\n<p>Integrare l&#8217;estensione <code>quarkus-info<\/code> nei tuoi progetti Quarkus \u00e8 un investimento a basso costo con un ritorno elevato in termini di gestione e comprensione del tuo ecosistema di microservizi. Inizia oggi stesso ad esporre i metadati e rendi i tuoi microservizi pi\u00f9 intelligenti, gestibili e pronti per affrontare le sfide del mondo reale!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In un mondo di architetture distribuite e microservizi, l&#8217;osservabilit\u00e0 \u00e8 diventata una colonna portante per garantire la stabilit\u00e0, la gestibilit\u00e0 e l&#8217;efficienza delle nostre applicazioni. Capire &#8220;cosa sta succedendo&#8221; all&#8217;interno dei nostri servizi, in produzione e non solo, \u00e8 cruciale per diagnosticare problemi, monitorare le performance e pianificare aggiornamenti. Un elemento fondamentale per raggiungere l&#8217;osservabilit\u00e0&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\">Read more<\/a><\/p>\n","protected":false},"author":299,"featured_media":32242,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10269,10263],"tags":[10329,10438],"collections":[11708],"class_list":{"0":"post-31988","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-architettura-del-software","8":"category-backend-it","9":"tag-framework","10":"tag-sviluppo-software-it","11":"collections-dalla-community","12":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Quarkus: guida pratica per esporre i metadati dei microservizi<\/title>\n<meta name=\"description\" content=\"Quarkus e microservizi: scopri come esporre i metadati. Osservabilit\u00e0, gestione e informazioni a portata di endpoint\/info.\" \/>\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.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quarkus: guida pratica per esporre i metadati dei microservizi\" \/>\n<meta property=\"og:description\" content=\"Quarkus e microservizi: scopri come esporre i metadati. Osservabilit\u00e0, gestione e informazioni a portata di endpoint\/info.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-25T08:48:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-25T08:48:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Antonio Musarra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\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=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\"},\"author\":{\"name\":\"Antonio Musarra\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b\"},\"headline\":\"Quarkus: guida pratica per esporre i metadati dei microservizi\",\"datePublished\":\"2025-02-25T08:48:48+00:00\",\"dateModified\":\"2025-02-25T08:48:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\"},\"wordCount\":2121,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp\",\"keywords\":[\"Framework\",\"sviluppo software\"],\"articleSection\":[\"Architettura del software\",\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\",\"name\":\"Quarkus: guida pratica per esporre i metadati dei microservizi\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp\",\"datePublished\":\"2025-02-25T08:48:48+00:00\",\"dateModified\":\"2025-02-25T08:48:51+00:00\",\"description\":\"Quarkus e microservizi: scopri come esporre i metadati. Osservabilit\u00e0, gestione e informazioni a portata di endpoint\/info.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp\",\"width\":1792,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Quarkus: guida pratica per esporre i metadati dei microservizi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b\",\"name\":\"Antonio Musarra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g\",\"caption\":\"Antonio Musarra\"},\"description\":\"Ho iniziato il mio viaggio nel mondo dell'informatica da un Olivetti M24 dotato di un processore Intel 8086 acquistato da mio padre esclusivamente per il suo lavoro. Non ho mai posseduto console di nessun genere (Commodore, Amiga, etc\u2026) e inizialmente quell'enorme scatola mi terrorizzava, terrore durato poco; giorno dopo giorno prendevo rapidamente il controllo fino a quando\u2026. Ho sempre creduto che la condivisione della conoscenza sia un ottimo mezzo per la crescita personale; mi piace condividere le mie competenze attraverso articoli tecnici, progetti open source e pubblicazioni su piattaforme come il mio blog personale https:\/\/www.dontesta.it.\",\"sameAs\":[\"https:\/\/www.dontesta.it\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Quarkus: guida pratica per esporre i metadati dei microservizi","description":"Quarkus e microservizi: scopri come esporre i metadati. Osservabilit\u00e0, gestione e informazioni a portata di endpoint\/info.","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.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/","og_locale":"en_US","og_type":"article","og_title":"Quarkus: guida pratica per esporre i metadati dei microservizi","og_description":"Quarkus e microservizi: scopri come esporre i metadati. Osservabilit\u00e0, gestione e informazioni a portata di endpoint\/info.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-02-25T08:48:48+00:00","article_modified_time":"2025-02-25T08:48:51+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp","type":"image\/webp"}],"author":"Antonio Musarra","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Antonio Musarra","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/"},"author":{"name":"Antonio Musarra","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b"},"headline":"Quarkus: guida pratica per esporre i metadati dei microservizi","datePublished":"2025-02-25T08:48:48+00:00","dateModified":"2025-02-25T08:48:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/"},"wordCount":2121,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp","keywords":["Framework","sviluppo software"],"articleSection":["Architettura del software","Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/","name":"Quarkus: guida pratica per esporre i metadati dei microservizi","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp","datePublished":"2025-02-25T08:48:48+00:00","dateModified":"2025-02-25T08:48:51+00:00","description":"Quarkus e microservizi: scopri come esporre i metadati. Osservabilit\u00e0, gestione e informazioni a portata di endpoint\/info.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp","width":1792,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/quarkus-guida-pratica-per-esporre-i-metadati-dei-microservizi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/"},{"@type":"ListItem","position":3,"name":"Quarkus: guida pratica per esporre i metadati dei microservizi"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b","name":"Antonio Musarra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g","caption":"Antonio Musarra"},"description":"Ho iniziato il mio viaggio nel mondo dell'informatica da un Olivetti M24 dotato di un processore Intel 8086 acquistato da mio padre esclusivamente per il suo lavoro. Non ho mai posseduto console di nessun genere (Commodore, Amiga, etc\u2026) e inizialmente quell'enorme scatola mi terrorizzava, terrore durato poco; giorno dopo giorno prendevo rapidamente il controllo fino a quando\u2026. Ho sempre creduto che la condivisione della conoscenza sia un ottimo mezzo per la crescita personale; mi piace condividere le mie competenze attraverso articoli tecnici, progetti open source e pubblicazioni su piattaforme come il mio blog personale https:\/\/www.dontesta.it.","sameAs":["https:\/\/www.dontesta.it"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-600x600.webp","author_info":{"display_name":"Antonio Musarra","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-02-25-09.47.54-A-modern-digital-illustration-representing-Quarkus-a-Kubernetes-native-Java-framework-showcasing-microservices-metadata-exposure.-The-image-features-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Antonio Musarra","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/"},"uagb_comment_info":0,"uagb_excerpt":"In un mondo di architetture distribuite e microservizi, l&#8217;osservabilit\u00e0 \u00e8 diventata una colonna portante per garantire la stabilit\u00e0, la gestibilit\u00e0 e l&#8217;efficienza delle nostre applicazioni. Capire &#8220;cosa sta succedendo&#8221; all&#8217;interno dei nostri servizi, in produzione e non solo, \u00e8 cruciale per diagnosticare problemi, monitorare le performance e pianificare aggiornamenti. Un elemento fondamentale per raggiungere l&#8217;osservabilit\u00e0&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/31988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/299"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=31988"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/31988\/revisions"}],"predecessor-version":[{"id":32243,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/31988\/revisions\/32243"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/32242"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=31988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=31988"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=31988"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=31988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}