{"id":21644,"date":"2022-03-23T03:31:38","date_gmt":"2022-03-23T03:31:38","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=21644"},"modified":"2022-12-23T06:20:24","modified_gmt":"2022-12-23T06:20:24","slug":"how-to-monitor-java-application-using-zabbix-with-jmx","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/how-to-monitor-java-application-using-zabbix-with-jmx\/","title":{"rendered":"How to enable Java &#038; Tomcat monitoring using JMX in Zabbix?"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"304\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-1-1024x304.jpg\" alt=\"\" class=\"wp-image-21645\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-1-1024x304.jpg 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-1-300x89.jpg 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-1-768x228.jpg 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-1.jpg 1087w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"351\" height=\"475\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-2.jpg\" alt=\"\" class=\"wp-image-21646\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-2.jpg 351w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/05\/zabbix-jmx-java-application-2-222x300.jpg 222w\" sizes=\"auto, (max-width: 351px) 100vw, 351px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What is JMX?<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-devopsschool-com wp-block-embed-devopsschool-com\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"ICW2f8JfyO\"><a href=\"https:\/\/www.devopsschool.com\/blog\/what-is-jmx-and-why-do-we-need-it\/\">What is JMX and Why do we need it?<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;What is JMX and Why do we need it?&#8221; &#8212; \" src=\"https:\/\/www.devopsschool.com\/blog\/what-is-jmx-and-why-do-we-need-it\/embed\/#?secret=cv6QXfdhxj#?secret=ICW2f8JfyO\" data-secret=\"ICW2f8JfyO\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Java Management Extensions (JMX) is a Java technology that supplies tools for managing and monitoring applications, system objects, devices and service-oriented networks. Those resources are represented by objects called MBeans. In the API, classes can be dynamically loaded and instantiated.<\/p>\n\n\n\n<p>JMX monitoring can be used to monitor JMX counters of a Java application.<\/p>\n\n\n\n<p>JMX monitoring has native support in Zabbix in the form of a Zabbix daemon called \u201cZabbix Java gateway\u201d, introduced since Zabbix 2.0.<\/p>\n\n\n\n<p>To retrieve the value of a particular JMX counter on a host, Zabbix server queries the Zabbix Java gateway, which in turn uses the JMX management API to query the application of interest remotely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zabbix Java gateway<\/h2>\n\n\n\n<p>The so-called Zabbix Java Gateway is a special bollard process that can retrieve data via JMX. Unlike the previously mentioned boll processes, this is not an &#8220;internal&#8221; process within the Zabbix server. The Java Gateway is a stand-alone daemon that provides data to the Zabbix server through a TCP port. The Java Gateway is Java software that requires a JRE.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Zabbix-Server Monitor Java Apps using JMX?<\/h2>\n\n\n\n<p>When Zabbix-Server needs to know a performance of a Java application, it starts its own Zabbix-JavaPollers process to connect to Zabbix-JavaGateway requesting data, and ZabbixJavagateway receives the request and uses the JMXmanagement API to query a specific application, provided that the application requires&#8217;-Dcom.sun.management.jmxremo&#8217;when it startsTe&#8221;parameter to open JMX remote queries.The Java program starts its own simple applet port 12345 to provide the requested data to Zabbix-JavaGateway.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"367\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-82-1024x367.png\" alt=\"\" class=\"wp-image-28967\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-82-1024x367.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-82-300x107.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-82-768x275.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-82.png 1449w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>From the schematic diagram above, you can see that the key points to configuring Zabbix monitoring Java applications are configuring Zabbix-JavaGateway, enabling Zabbix-Server to connect to Zabbix-JavaGateway, Tomcat to turn on JVM remote monitoring capabilities, and so on.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisite<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-devopsschool-com wp-block-embed-devopsschool-com\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"YMbCLeYfCC\"><a href=\"https:\/\/www.devopsschool.com\/blog\/how-to-install-install-enable-zabbix-java-gateway\/\">How to Install &#038; Enable Zabbix Java Gateway?<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;How to Install &#038; Enable Zabbix Java Gateway?&#8221; &#8212; \" src=\"https:\/\/www.devopsschool.com\/blog\/how-to-install-install-enable-zabbix-java-gateway\/embed\/#?secret=p1wKaA9tf6#?secret=YMbCLeYfCC\" data-secret=\"YMbCLeYfCC\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 &#8211; Locate a VM where you want to run JAVA Application &amp; Install JAVA<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-devopsschool-com wp-block-embed-devopsschool-com\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"6KeccEqJMl\"><a href=\"https:\/\/www.devopsschool.com\/blog\/complete-guide-of-java-installation-in-linux\/\">Java Installation Guide in Linux &#038; Windows<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Java Installation Guide in Linux &#038; Windows&#8221; &#8212; \" src=\"https:\/\/www.devopsschool.com\/blog\/complete-guide-of-java-installation-in-linux\/embed\/#?secret=AMyiEOklDY#?secret=6KeccEqJMl\" data-secret=\"6KeccEqJMl\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 &#8211; Install and Verify Tomcat<\/h2>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">$ apt install unzip wget \n$ cd \/opt\/\n$ wget https:<span class=\"hljs-comment\">\/\/apachemirror.wuchna.com\/tomcat\/tomcat-8\/v8.5.66\/bin\/apache-tomcat-8.5.66.zip<\/span>\n$ unzip apache-tomcat<span class=\"hljs-number\">-8.5<\/span><span class=\"hljs-number\">.66<\/span>.zip\n\n<span class=\"hljs-comment\"># Tomcat 9 Install Guide<\/span>\r\n\r\n$ \/opt\/\r\n$ wget https:<span class=\"hljs-comment\">\/\/dlcdn.apache.org\/tomcat\/tomcat-9\/v9.0.60\/bin\/apache-tomcat-9.0.60.zip<\/span>\r\n$ yum install unzip\r\n$ unzip apache-tomcat<span class=\"hljs-number\">-9.0<\/span><span class=\"hljs-number\">.60<\/span>.zip\r\n$ cd apache-tomcat<span class=\"hljs-number\">-9.0<\/span><span class=\"hljs-number\">.60<\/span>\r\n$ cd bin\/\r\n$ chmod -R <span class=\"hljs-number\">775<\/span> *\r\n$ ls -la\r\n$ .\/startup.sh\r\n$ ps -eaf | grep tomcat\r\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3 &#8211; Install and Verify Sample Apps in Tomcat<\/h2>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">$ cd \/opt\/apache-tomcat<span class=\"hljs-number\">-8.5<\/span><span class=\"hljs-number\">.66<\/span>\/webapps\n$ wget https:<span class=\"hljs-comment\">\/\/tomcat.apache.org\/tomcat-7.0-doc\/appdev\/sample\/sample.war<\/span>\n$ chmod <span class=\"hljs-number\">755<\/span> sample.war<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4 &#8211; Enable JMX in Tomcat<\/h2>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Enabling remote JMX monitoring <span class=\"hljs-keyword\">for<\/span> Java application in Zabbix Agent Where Java Apps is installed\n\nA Java application does not need any additional software installed, but it needs to be started with the command-line options specified below to have support <span class=\"hljs-keyword\">for<\/span> remote JMX monitoring.\n\n<span class=\"hljs-keyword\">As<\/span> a bare minimum, <span class=\"hljs-keyword\">if<\/span> you just wish to get started by monitoring a simple Java application on a local host with no security enforced, start it with these options:\n\n$ cd \/opt\/apache-tomcat<span class=\"hljs-number\">-8.5<\/span><span class=\"hljs-number\">.66<\/span>\/bin\n$ vi setenv.sh\nexport CATALINA_OPTS=<span class=\"hljs-string\">\"$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=52.66.202.226 -Djava.net.preferIPv4Stack=true\"<\/span>\n$ chmod -R <span class=\"hljs-number\">755<\/span> .\n$ .\/startup.sh\n$ ps -eaf | grep tomcat\n$ ps -eaf | grep jmx\n$ netstat -nl | grep -E -i <span class=\"hljs-string\">\"proto|8080|12345\"<\/span>\n<span class=\"hljs-comment\"># Verify http:\/\/IP-ADD:8080\/sample\/<\/span>\n\nNOTE: \n- java.rmi.server.hostname = A Place where JMX is running <span class=\"hljs-keyword\">and<\/span> accessible. Ie. Tomcat server\n\n- Communication between Java gateway <span class=\"hljs-keyword\">and<\/span> the monitored JMX application should not be firewalled. So disable the server level internal firewall in the linux client using the below command. $ systemctl disable firewalld\n\n<span class=\"hljs-keyword\">OR<\/span>\njava \\\n-Dcom.sun.management.jmxremote \\\n-Dcom.sun.management.jmxremote.port=<span class=\"hljs-number\">12345<\/span> \\\n-Dcom.sun.management.jmxremote.authenticate=<span class=\"hljs-keyword\">false<\/span> \\\n-Dcom.sun.management.jmxremote.ssl=<span class=\"hljs-keyword\">false<\/span> \\\n-Dcom.sun.management.jmxremote.registry.ssl=<span class=\"hljs-keyword\">false<\/span> \\\n-jar \/usr\/share\/doc\/openjdk<span class=\"hljs-number\">-6<\/span>-jre-headless\/demo\/jfc\/Notepad\/Notepad.jar\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"167\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-86-1024x167.png\" alt=\"\" class=\"wp-image-29047\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-86-1024x167.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-86-300x49.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-86-768x126.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-86.png 1474w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5 &#8211; Configuring JMX interfaces and items in Zabbix frontend<\/h2>\n\n\n\n<p>With Java gateway running, server knowing where to find it and a Java application started with support for remote JMX monitoring, it is time to configure the interfaces and items in Zabbix GUI.<\/p>\n\n\n\n<p>Before retrieving data from the JMX interface, you must specify for each host on which IP address and on which TCP port the JMX interface of the Java program listens. Navigate to the host configuration and add a JMX interface. If you want to monitor several Java programs via JMX on a host, you must use different TCP ports.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Create a host at Zabbix Server with a IP address where you enabled JMX with a port &#8211; 12345<\/li><li>Apply Apache Tomcat JMX template to a host<\/li><li>Validate a Latest data of Of Java at Zabbix FrontEnd<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"474\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-87-1024x474.png\" alt=\"\" class=\"wp-image-29049\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-87-1024x474.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-87-300x139.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-87-768x355.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-87.png 1444w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6 &#8211; Check the Latest Data<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"486\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-88-1024x486.png\" alt=\"\" class=\"wp-image-29052\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-88-1024x486.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-88-300x143.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-88-768x365.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-88-1536x730.png 1536w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/image-88.png 1720w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Reference<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>https:\/\/www.zabbix.com\/documentation\/5.4\/en\/manual\/concepts\/java<\/li><li>https:\/\/www.zabbix.com\/documentation\/5.4\/en\/manual\/config\/items\/itemtypes\/jmx_monitoring<\/li><li>https:\/\/blog.zabbix.com\/new-monitoring-possibilities-for-java-applications-in-zabbix-3-4\/5972\/<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Some Rough Work<\/h2>\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/0fc6876fd8e847bd03b9d6179259bb37.js\"><\/script>\n\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_59943\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_35214\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_59943\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>\n\n<a href=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/03\/JMX-JAVA-Zabbix-Monitoring.pdf\" class=\"pdfemb-viewer\" style=\"\" data-width=\"max\" data-height=\"max\" data-toolbar=\"both\" data-toolbar-fixed=\"on\">JMX-JAVA-Zabbix-Monitoring<\/a>\n<p class=\"wp-block-pdfemb-pdf-embedder-viewer\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is JMX? Java Management Extensions (JMX) is a Java technology that supplies tools for managing and monitoring applications, system objects, devices and service-oriented networks. Those resources&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-21644","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/21644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=21644"}],"version-history":[{"count":11,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/21644\/revisions"}],"predecessor-version":[{"id":29053,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/21644\/revisions\/29053"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=21644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=21644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=21644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}