{"id":30082,"date":"2024-01-05T09:40:51","date_gmt":"2024-01-05T08:40:51","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=30082"},"modified":"2025-01-15T14:24:50","modified_gmt":"2025-01-15T13:24:50","slug":"apache-tomcat-monitoring-in-prometheus-without-jmx","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/","title":{"rendered":"Apache Tomcat Monitoring in Prometheus without JMX"},"content":{"rendered":"\n<p>In a previous blog post, I explained how to monitor <a href=\"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Tomcat with Prometheus<\/a> with help of JMX exporter. It is not always desirable to use JMX as it requires:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An additional service setup (which runs another JVM)<\/li>\n\n\n\n<li>Extra ports opening<\/li>\n\n\n\n<li>Complex settings for security (encryption and access)<\/li>\n<\/ul>\n\n\n\n<p>Fortunately, it is possible to instrument a JVM directly with an additional <code>javaagent<\/code> argument.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-java-agent\">Java Agent<\/h2>\n\n\n\n<p>Once we downloaded the java exporter from github <a href=\"https:\/\/github.com\/prometheus\/jmx_exporter\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">repo<\/a>, we simply need to add the following arguments to the JVM startup command:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n-javaagent:\/opt\/monitoring\/jmx_prometheus_javaagent-0.20.0.jar=9115:\/opt\/monitoring\/config.yaml\n<\/pre><\/div>\n\n\n<p>If we split the argument by the semi column, we have these:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>-javaagent<\/code><\/li>\n\n\n\n<li><code>\/opt\/monitoring\/jmx_prometheus_javaagent-0.20.0.jar=9115<\/code><\/li>\n\n\n\n<li><code>\/opt\/monitoring\/config.yaml<\/code><\/li>\n<\/ol>\n\n\n\n<p>First argument tells JVM to consider this the instrumentation setting. Second is the path to the binary which will listen on port 9115. Third, and last, is the path to the Java exporter configuration file.<\/p>\n\n\n\n<p>Configuration file is identical to what we have created in the blog with JMX:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\nrules:\n- pattern: &quot;.*&quot;\n<\/pre><\/div>\n\n\n<p>I extended it by enabling an authentication method and SSL configuration like that:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\nhttpServer:\n  authentication:\n    basic:\n      username: Prometheus\n      password: &lt;secret&gt;\n  ssl:\n    keyStore:\n      filename: \/etc\/opt\/alfresco\/rmi-ssl\/keystore.p12\n      password: &lt;keystorepass&gt;\n    certificate:\n      alias: alfresco\n<\/pre><\/div>\n\n\n<p>Restart tomcat and check if port is listening:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nnetstat -lnp | grep 9115\n<\/pre><\/div>\n\n\n<p>And we can check if we can reach the metrics with command:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ncurl -s -u Prometheus: https:\/\/localhost:9115\/metrics\n<\/pre><\/div>\n\n\n<p>Output example:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.\n# TYPE jvm_gc_collection_seconds summary\njvm_gc_collection_seconds_count{gc=&quot;G1 Young Generation&quot;,} 8.0\njvm_gc_collection_seconds_sum{gc=&quot;G1 Young Generation&quot;,} 0.219\njvm_gc_collection_seconds_count{gc=&quot;G1 Old Generation&quot;,} 0.0\njvm_gc_collection_seconds_sum{gc=&quot;G1 Old Generation&quot;,} 0.0\n# HELP jvm_info VM version info\n# TYPE jvm_info gauge\njvm_info{runtime=&quot;OpenJDK Runtime Environment&quot;,vendor=&quot;Eclipse Adoptium&quot;,version=&quot;17.0.3+7&quot;,} 1.0\n...\n<\/pre><\/div>\n\n\n<p>Next step will be to configure Prometheus to pull these metrics.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-prometheus\">Prometheus<\/h2>\n\n\n\n<p>Simply add a new job in <code>scrape_config<\/code> section of Prometheus configuration file:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\n  - job_name: tomcat\n    static_configs:\n      - targets:\n        - &lt;alfresco&gt;:9115\n    scheme: https\n    basic_auth:\n      username: Prometheus\n      password: &lt;secret&gt;\n<\/pre><\/div>\n\n\n<p>Next, we send a SIGHUP signal to the process for configuration reload:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo kill -s SIGHUP &lt;pid&gt;\n<\/pre><\/div>\n\n\n<p>And the target should go in <mark class=\"has-inline-color has-vivid-green-cyan-color\">Up<\/mark> state in Prometheus Web UI:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"100\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_24_22-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox-1024x100.png\" alt=\"\" class=\"wp-image-30105\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_24_22-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox-1024x100.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_24_22-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox-300x29.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_24_22-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox-768x75.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_24_22-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox.png 1471w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now, we can run a PromQL query (<code>jvm_memory_bytes_used{job=\"tomcat\"}<\/code>) as a final check before going to Grafana:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"855\" height=\"230\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_32_37-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox.png\" alt=\"\" class=\"wp-image-30108\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_32_37-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox.png 855w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_32_37-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox-300x81.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_32_37-Prometheus-Time-Series-Collection-and-Processing-Server-\u2014-Mozilla-Firefox-768x207.png 768w\" sizes=\"auto, (max-width: 855px) 100vw, 855px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-grafana\">Grafana<\/h2>\n\n\n\n<p>In Grafana, we can import a simple dashboard like this <a href=\"https:\/\/grafana.com\/grafana\/dashboards\/14845-jmx-dashboard-basic\/\" target=\"_blank\" rel=\"noreferrer noopener\">one<\/a> which will look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"652\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_37_02-JMX-DashboardBasic-Dashboards-Grafana-\u2014-Mozilla-Firefox-1024x652.png\" alt=\"\" class=\"wp-image-30109\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_37_02-JMX-DashboardBasic-Dashboards-Grafana-\u2014-Mozilla-Firefox-1024x652.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_37_02-JMX-DashboardBasic-Dashboards-Grafana-\u2014-Mozilla-Firefox-300x191.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_37_02-JMX-DashboardBasic-Dashboards-Grafana-\u2014-Mozilla-Firefox-768x489.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/01\/2024-01-05-09_37_02-JMX-DashboardBasic-Dashboards-Grafana-\u2014-Mozilla-Firefox.png 1128w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-next\">What Next?<\/h2>\n\n\n\n<p>Note that this procedure can apply to any JVM, not only Apache Tomcat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a previous blog post, I explained how to monitor Apache Tomcat with Prometheus with help of JMX exporter. It is not always desirable to use JMX as it requires: Fortunately, it is possible to instrument a JVM directly with an additional javaagent argument. Java Agent Once we downloaded the java exporter from github repo, [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[214,2487,1217,2234,771],"type_dbi":[],"class_list":["post-30082","post","type-post","status-publish","format-standard","hentry","category-application-integration-middleware","tag-java","tag-jmx","tag-jvm","tag-prometheus","tag-tomcat"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Apache Tomcat Monitoring in Prometheus without JMX - dbi Blog<\/title>\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.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apache Tomcat Monitoring in Prometheus without JMX\" \/>\n<meta property=\"og:description\" content=\"In a previous blog post, I explained how to monitor Apache Tomcat with Prometheus with help of JMX exporter. It is not always desirable to use JMX as it requires: Fortunately, it is possible to instrument a JVM directly with an additional javaagent argument. Java Agent Once we downloaded the java exporter from github repo, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-05T08:40:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-15T13:24:50+00:00\" \/>\n<meta name=\"author\" content=\"Middleware Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Middleware Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/\"},\"author\":{\"name\":\"Middleware Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d8563acfc6e604cce6507f45bac0ea1\"},\"headline\":\"Apache Tomcat Monitoring in Prometheus without JMX\",\"datePublished\":\"2024-01-05T08:40:51+00:00\",\"dateModified\":\"2025-01-15T13:24:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/\"},\"wordCount\":281,\"commentCount\":0,\"keywords\":[\"Java\",\"JMX\",\"jvm\",\"Prometheus\",\"Tomcat\"],\"articleSection\":[\"Application integration &amp; Middleware\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/\",\"name\":\"Apache Tomcat Monitoring in Prometheus without JMX - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2024-01-05T08:40:51+00:00\",\"dateModified\":\"2025-01-15T13:24:50+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d8563acfc6e604cce6507f45bac0ea1\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/apache-tomcat-monitoring-in-prometheus-without-jmx\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apache Tomcat Monitoring in Prometheus without JMX\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d8563acfc6e604cce6507f45bac0ea1\",\"name\":\"Middleware Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"caption\":\"Middleware Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/middleware-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Apache Tomcat Monitoring in Prometheus without JMX - dbi Blog","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.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/","og_locale":"en_US","og_type":"article","og_title":"Apache Tomcat Monitoring in Prometheus without JMX","og_description":"In a previous blog post, I explained how to monitor Apache Tomcat with Prometheus with help of JMX exporter. It is not always desirable to use JMX as it requires: Fortunately, it is possible to instrument a JVM directly with an additional javaagent argument. Java Agent Once we downloaded the java exporter from github repo, [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/","og_site_name":"dbi Blog","article_published_time":"2024-01-05T08:40:51+00:00","article_modified_time":"2025-01-15T13:24:50+00:00","author":"Middleware Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Middleware Team","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/"},"author":{"name":"Middleware Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"headline":"Apache Tomcat Monitoring in Prometheus without JMX","datePublished":"2024-01-05T08:40:51+00:00","dateModified":"2025-01-15T13:24:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/"},"wordCount":281,"commentCount":0,"keywords":["Java","JMX","jvm","Prometheus","Tomcat"],"articleSection":["Application integration &amp; Middleware"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/","url":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/","name":"Apache Tomcat Monitoring in Prometheus without JMX - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2024-01-05T08:40:51+00:00","dateModified":"2025-01-15T13:24:50+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/apache-tomcat-monitoring-in-prometheus-without-jmx\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Apache Tomcat Monitoring in Prometheus without JMX"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1","name":"Middleware Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","caption":"Middleware Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/30082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=30082"}],"version-history":[{"count":18,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/30082\/revisions"}],"predecessor-version":[{"id":30112,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/30082\/revisions\/30112"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=30082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=30082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=30082"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=30082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}