{"id":10596,"date":"2022-05-03T15:53:23","date_gmt":"2022-05-03T10:23:23","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=10596"},"modified":"2022-05-03T16:01:47","modified_gmt":"2022-05-03T10:31:47","slug":"praeco-alerting-for-elasticsearch-part-1","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2022\/05\/03\/praeco-alerting-for-elasticsearch-part-1\/","title":{"rendered":"Praeco Alerting for ElasticSearch (Part -1)"},"content":{"rendered":"\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-1 wp-block-group-is-layout-flex\">\n<p>Praeco is an open-source tool for alerting Elasticsearch. It can build the alert for elasticsearch in an interactive query builder. A preview of the result will be shown in charts. This tool has an easy installation &amp; configuration process which we will learn further in this blog. We can receive alerts on commonly used channels like slack, email, and many more.<\/p>\n\n\n\n<p>This will have two parts- first, we install &amp; configure the Praeco; in the second part, we learn &#8211; how to create an alert?<\/p>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-2 wp-block-group-is-layout-flex\">\n<h2 class=\"wp-block-heading\">Why do we use this over others?<\/h2>\n\n\n\n<p>In terms of open-source tools which are used for alerting in elasticsearch the most popular option is elastalert. In this creating an alert is a very hectic process because one has to write YAML which can be sometimes frustrating for those who don&#8217;t know the syntax.<\/p>\n\n\n\n<p>Now we have to search for other options, which leads us to Praeco. This provides an interactive GUI to create the alert condition and hassle-free integration with alert channels.<\/p>\n<\/div>\n\n\n\n<!--more-->\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-3 wp-block-group-is-layout-flex\">\n<h2 class=\"wp-block-heading\">Requirement <\/h2>\n\n\n\n<ul><li>A machine on which docker is installed &amp; in a running state.<\/li><li>Port 8080 should be free because  GUI will run on port 8080.<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>Elasticsearch cluster must be reachable from the machine.<\/li><\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4 wp-block-group-is-layout-flex\">\n<h2 class=\"wp-block-heading\">Installation &amp; Configuration<\/h2>\n\n\n\n<p>Clone the repository from the Github. You can do a simple google search with keywords like &#8220;<strong>Praeco elasticsearch<\/strong>&#8221; or use the below link.<br>git clone https:\/\/github.com\/johnsusek\/praeco.git<\/p>\n\n\n\n<p> Change your directory to praeco and run the following commands to start the configuration of the tool.<\/p>\n<\/div>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background\"><strong>cd praeco<\/strong><\/p>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background\">mkdir -p rules rule_templates<\/p>\n\n\n\n<p>This directory will hold rule configuration files that are used to trigger the alert.<\/p>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background\">chmod -R 777 rules rule_templates<\/p>\n\n\n\n<p>Change the permission of the directory so the file can be added when you create an alert on GUI.<\/p>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background\">export PRAECO_ELASTICSEARCH=&lt;Your elasticsearch IP&gt;<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-5 wp-block-group-is-layout-flex\">\n<p>Run the above command in the shell terminal. Replace the text with the IP of your elasticsearch node IP.<\/p>\n\n\n\n<p>We have to change the few entries in a file name config\/api.config.json. Which looks like this <\/p>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background\">{<br>&#8220;appName&#8221;: &#8220;elastalert-server&#8221;,<br>&#8220;port&#8221;: 3030,<br>&#8220;wsport&#8221;: 3333,<br>&#8220;elastalertPath&#8221;: &#8220;\/opt\/elastalert&#8221;,<br>&#8220;verbose&#8221;: false,<br>&#8220;es_debug&#8221;: false,<br>&#8220;debug&#8221;: false,<br>&#8220;rulesPath&#8221;: {<br>&#8220;relative&#8221;: true,<br>&#8220;path&#8221;: &#8220;\/rules&#8221;<br>},<br>&#8220;templatesPath&#8221;: {<br>&#8220;relative&#8221;: true,<br>&#8220;path&#8221;: &#8220;\/rule_templates&#8221;},<br><strong>&#8220;es_host&#8221;: &#8220;&lt;ElasticsearchhostIP&gt;&#8221;,<\/strong><br><strong>&#8220;es_port&#8221;: &lt;ElasticsearchPort&gt;,<\/strong><br>&#8220;es_ssl&#8221;: false,<br>&#8220;writeback_index&#8221;: &#8220;praeco_elastalert_status&#8221;<br>}<\/p>\n\n\n\n<p>Replace with your elasticsearch host IP and Port and save the file.<\/p>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background\"><strong>&#8220;es_password&#8221;: &#8220;&#8221;,<br>&#8220;es_username&#8221;:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-6 wp-block-group-is-layout-flex\">\n<p>Remove these lines from the file if you are not using any authentication for elasticsearch.<\/p>\n\n\n\n<p>To add the alerting in Praeco we have various methods which it supports. I will explain the adding an E-mail &amp; slack option to Praeco.<\/p>\n\n\n\n<p>Add these lines in the file <strong>rules\/BaseRule.config.<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group has-white-color has-dark-gray-background-color has-text-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-7 wp-block-group-is-layout-flex\">\n<p>alert:<\/p>\n\n\n\n<p>&nbsp;&#8211; email<\/p>\n\n\n\n<p>email:<\/p>\n\n\n\n<p>&nbsp;&#8211; &#8220;<strong>teXXXXXXXXX@gmail.com<\/strong>&#8220;<\/p>\n\n\n\n<p>from_addr: &#8220;<strong>XXXXXXX@XXXXXXXXX<\/strong>&#8220;<\/p>\n\n\n\n<p>smtp_host: &#8216;<strong>smtp.gmail.com&#8217;<\/strong><\/p>\n\n\n\n<p>smtp_port: <strong>465<\/strong><\/p>\n\n\n\n<p>smtp_ssl: <strong>true<\/strong><\/p>\n\n\n\n<p>smtp_auth_file: <strong>&#8216;\/opt\/elastalert\/pass\/gmail_auth.yaml&#8217;<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-8 wp-block-group-is-layout-flex\">\n<p>After adding this information we need to add the username and password of the email from which the mail is sent to users. This password can be an app password that can be generated from the mail provider or enter the password of your user.<\/p>\n\n\n\n<p>To do so edit the file ass\/gmail_auth.yaml<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-group has-white-color has-dark-gray-background-color has-text-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-9 wp-block-group-is-layout-flex\">\n<p>user: teXXXXXXXX@gmail.com<\/p>\n\n\n\n<p>password: XXXXXXXXXXXX<\/p>\n<\/div>\n\n\n\n<p>In the present directory, you have a docker compose file. Do not use that because we have made the changes as per the requirement so replace the docker compose with the below file.<\/p>\n\n\n\n<div class=\"wp-block-group has-white-color has-dark-gray-background-color has-text-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-10 wp-block-group-is-layout-flex\">\n<p class=\"has-small-font-size\">version: &#8216;3&#8217;<\/p>\n\n\n\n<p class=\"has-small-font-size\">services:<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp;elastalert:<\/p>\n\n\n\n<p class=\"has-small-font-size\">image: &#8216;praecoapp\/elastalert-server&#8217;<\/p>\n\n\n\n<p class=\"has-small-font-size\">ports:<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; 3030:3030<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; 3333:3333<\/p>\n\n\n\n<p class=\"has-small-font-size\">volumes:<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; .\/config\/elastalert.yaml:\/opt\/elastalert\/config.yaml<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; .\/config\/api.config.json:\/opt\/elastalert-server\/config\/config.json<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; .\/rules:\/opt\/elastalert\/rules<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; .\/rule_templates:\/opt\/elastalert\/rule_templates<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; <strong>.\/pass:\/opt\/elastalert\/pass<\/strong><\/p>\n\n\n\n<p class=\"has-small-font-size\">extra_hosts:<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; &#8216;elasticsearch:${PRAECO_ELASTICSEARCH}&#8217;<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp;webapp:<\/p>\n\n\n\n<p class=\"has-small-font-size\">image: &#8216;praecoapp\/praeco&#8217;<\/p>\n\n\n\n<p class=\"has-small-font-size\">ports:<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; 8080:8080<\/p>\n\n\n\n<p class=\"has-small-font-size\"># environment:<\/p>\n\n\n\n<p class=\"has-small-font-size\">#&nbsp; VUE_APP_BASE_URL: \/my-path\/<\/p>\n\n\n\n<p class=\"has-small-font-size\">volumes:<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; .\/public\/praeco.config.json:\/var\/www\/html\/praeco.config.json<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; .\/nginx_config\/nginx.conf:\/etc\/nginx\/nginx.conf<\/p>\n\n\n\n<p class=\"has-small-font-size\">&nbsp;&nbsp; &#8211; .\/nginx_config\/default.conf:\/etc\/nginx\/conf.d\/default.conf<\/p>\n<\/div>\n\n\n\n<p>Now we have to run the docker compose file.<\/p>\n\n\n\n<p class=\"has-white-color has-dark-gray-background-color has-text-color has-background\">&nbsp;docker-compose -f &lt;Compose fileName&gt; up -d<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Now open the web browser and type http:\/\/127.0.0.1:8080. The UI will look like the below image.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/05\/image.png?w=1024\" alt=\"\" class=\"wp-image-10641\" width=\"800\" \/><\/figure>\n\n\n\n<p>In the next part, I will explain how to create an alert with all the options that are available in the current version.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Happy Learning<\/p>\n\n\n\n<p><br><strong style=\"font-weight:bold;\">Blog Pundit:<\/strong>  <a href=\"https:\/\/opstree.com\/blog\/\/author\/deepakgupta97\/\"><strong>Deepak Gupta<\/strong><\/a> <strong>and<\/strong> <a rel=\"noreferrer noopener\" href=\"https:\/\/opstree.com\/blog\/\/author\/sandeep7c51ad81ba\/\" target=\"_blank\"><strong>Sandeep Rawat<\/strong><\/a><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/www.opstree.com\/contact-us?utm_source=blog&amp;utm_medium=wordpress+&amp;utm_campaign=Praeco-Alerting-for-ElasticSearch-%28Part+-1%29\">Opstree<\/a><\/strong><a rel=\"noreferrer noopener\" href=\"https:\/\/www.opstree.com\/contact-us?utm_source=blog&amp;utm_medium=wordpress+&amp;utm_campaign=AWS-Elastic-Network-Interface\" target=\"_blank\"> <\/a>is an End to End DevOps solution provider<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link\" href=\"https:\/\/www.opstree.com\/contact-us\" target=\"_blank\" rel=\"noreferrer noopener\">CONTACT US<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center\"><strong>Connect Us <\/strong><\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter is-content-justification-right is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Praeco is an open-source tool for alerting Elasticsearch. It can build the alert for elasticsearch in an interactive query builder. A preview of the result will be shown in charts. This tool has an easy installation &amp; configuration process which we will learn further in this blog. We can receive alerts on commonly used channels &hellip; <a href=\"https:\/\/opstree.com\/blog\/2022\/05\/03\/praeco-alerting-for-elasticsearch-part-1\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Praeco Alerting for ElasticSearch (Part -1)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":220588872,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[460,33309051,251600576,44,748525507,4996032],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-2KU","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/10596"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/220588872"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=10596"}],"version-history":[{"count":24,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/10596\/revisions"}],"predecessor-version":[{"id":10690,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/10596\/revisions\/10690"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=10596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=10596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=10596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}