{"id":53590,"date":"2019-12-05T00:00:00","date_gmt":"2019-12-04T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-my-v-tsian-ukroshhali-terabajty-logov"},"modified":"2020-02-18T14:01:30","modified_gmt":"2020-02-18T11:01:30","slug":"kak-my-v-tsian-ukroshhali-terabajty-logov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-my-v-tsian-ukroshhali-terabajty-logov","title":{"rendered":"How we at CIAN tamed terabytes of logs","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"How we at CIAN tamed terabytes of logs\" src=\"\/wp-content\/uploads\/2019\/12\/4efc58ba81fcaa7c8481bbeaa6bb083e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHello everyone, my name is Alexander, I work at CIAN as an engineer, focusing on system administration and automating infrastructure processes. In the comments to one of our previous articles, we were asked to explain how we generate 4 TB of logs per day and what we do with them. Yes, we have a lot of logs and for their processing, a separate infrastructure cluster has been created that allows us to promptly resolve issues. In this article, I will describe how we adapted it over the past year to handle the constantly growing data stream.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Where we started<\/h3>\n<p>\n<img decoding=\"async\" alt=\"How we at CIAN tamed terabytes of logs\" src=\"\/wp-content\/uploads\/2019\/12\/9b0919df70114d4ebb559c93ec012a4d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn recent years, the load on cian.ru has been growing rapidly, and by the third quarter of 2018, the site's traffic reached 11.2 million unique users per month. At that time, during critical moments, we were losing up to 40% of logs, which hindered our ability to address incidents quickly and we spent a lot of time and effort resolving them. We also often struggled to identify the root cause of problems, which would then recur after some time. It was a nightmare that needed to be addressed.<\/p>\n<p>At that time, we used a cluster of 10 data nodes with ElasticSearch version 5.5.2 with standard index settings for log storage. It was implemented over a year ago as a popular and accessible solution; the log stream was not very large then, so there was no point in devising non-standard configurations.\u00a0<\/p>\n<p>Log processing was handled by Logstash on different ports across five ElasticSearch coordinators. One index, regardless of its size, consisted of five shards. Hourly and daily rotations were organized, resulting in about 100 new shards appearing in the cluster every hour. As long as the volume of logs was manageable, the cluster performed well, and no one paid much attention to its settings.\u00a0<\/p>\n<h3>Challenges of Rapid Growth<\/h3>\n<p>\nThe volume of generated logs grew very rapidly due to two converging processes. On one hand, the number of users of the service was increasing. On the other hand, we began actively transitioning to a microservices architecture, breaking down our old monoliths into C# and Python. Several dozen new microservices replacing parts of the monolith were generating significantly more logs for the infrastructure cluster.\u00a0<\/p>\n<p>It was the scaling that led us to a point where the cluster became virtually unmanageable. When logs started coming in at a rate of 20,000 messages per second, frequent ineffective rotation increased the number of shards to 6,000, with over 600 shards per node.\u00a0<\/p>\n<p>This caused issues with memory allocation, and when a node failed, all shards had to move simultaneously, multiplying the traffic and burdening the other nodes, which made writing data to the cluster nearly impossible. During this time, we were without logs. And when there was a problem with <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/server\/dts-prohoster\/\"   title=\"proxy server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2986\">proxy server<\/a> we would lose 1\/10 of the cluster overall. The large number of small-sized indexes added complexity.<\/p>\n<p>Without logs, we couldn't understand the reasons behind incidents and could end up repeating the same mistakes sooner or later, which was unacceptable to our team\u2019s ideology, as all our work mechanisms are specifically designed to avoid repeating issues. We needed complete logging and delivery of logs almost in real-time, as our on-call engineers monitored alerts not only from metrics but also from logs. To illustrate the scale of the problem \u2014 at that time, the total log volume was about 2 TB per day.\u00a0<\/p>\n<p>We set a goal \u2014 to completely eliminate log loss and reduce the delivery time to the ELK cluster to a maximum of 15 minutes during emergencies (this figure later became our internal KPI).<\/p>\n<h3>The new rotation mechanism and hot-warm nodes<\/h3>\n<p>\n<img decoding=\"async\" alt=\"How we at CIAN tamed terabytes of logs\" src=\"\/wp-content\/uploads\/2019\/12\/aca8d792d8b2f002475554d05e8d5451.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe began transforming the cluster by upgrading ElasticSearch from version 5.5.2 to 6.4.3. Our version 5 cluster crashed again, so we decided to shut it down and completely upgrade it \u2014 after all, there were no logs anyway. So this transition took us just a couple of hours.<\/p>\n<p>The most significant transformation at this stage was the implementation of Apache Kafka on three nodes, with the coordinator acting as an intermediate buffer. The message broker saved us from losing logs during issues with ElasticSearch. At the same time, we added 2 nodes to the cluster and switched to a hot-warm architecture with three 'hot' nodes placed in different racks in the data center. We redirected logs that absolutely couldn't be lost \u2014 nginx logs and application error logs \u2014 to these nodes. Minor logs such as debug, warning, etc., were sent to the remaining nodes, and after 24 hours, 'important' logs moved from the 'hot' nodes.<\/p>\n<p>To avoid increasing the number of small indexes, we switched from time-based rotation to a rollover mechanism. There was much information on the forums stating that size-based rotation is very unreliable, so we decided to use rotation based on the number of documents in the index. We analyzed each index and recorded the number of documents after which the rotation should occur. This way, we achieved an optimal shard size of no more than 50 GB.\u00a0<\/p>\n<h3>Cluster Optimization<\/h3>\n<p>\n<img decoding=\"async\" alt=\"How we at CIAN tamed terabytes of logs\" src=\"\/wp-content\/uploads\/2019\/12\/89503fc8aa92060e750bdc9cdd63a7e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHowever, we didn't completely eliminate problems. Unfortunately, small indexes still appeared: they didn't reach the specified volume, weren't rotated, and were removed by the global cleanup of indexes older than three days, since we removed time-based rotation. This led to data loss because the index disappeared completely from the cluster, and attempts to write to a nonexistent index broke the logic of the curator we used for management. The alias for writing transformed into an index and disrupted the rollover logic, causing uncontrolled growth of some indexes up to 600 GB.\u00a0<\/p>\n<p>For example, for the rollover config:<\/p>\n<pre><code class=\"plaintext\">curator-elk-rollover.yaml\n\n---\nactions:\n  1:\n    action: rollover\n    options:\n      name: \"nginx_write\"\n      conditions:\n        max_docs: 100000000\n  2:\n    action: rollover\n    options:\n      name: \"python_error_write\"\n      conditions:\n        max_docs: 10000000\n<\/code><\/pre>\n<p>In the absence of a rollover alias, the following error occurred:<\/p>\n<pre><code class=\"plaintext\">ERROR     alias \"nginx_write\" not found.\nERROR     Failed to complete action: rollover.  : Unable to perform index rollover with alias \"nginx_write\".\n<\/code><\/pre>\n<p>We left the solution to this problem for the next iteration and tackled another issue: we switched to a pull logic for Logstash, which processes incoming logs (removing unnecessary information and enriching them). We placed it in Docker, which we run through docker-compose; we also set up logstash-exporter there, which sends metrics to Prometheus for real-time monitoring of the log flow. This allowed us to smoothly adjust the number of Logstash instances responsible for processing each type of log.<\/p>\n<p>While improving the cluster, traffic to cian.ru grew to 12.8 million unique users per month. As a result, our transformations somewhat lagged behind the changes in production, and we found that the 'warm' nodes could not handle the load and were slowing down the entire log delivery. We received 'hot' data without failures, but we had to intervene in the delivery of others and perform a manual rollover to evenly distribute the indices.\u00a0<\/p>\n<p>At the same time, scaling and adjusting the settings of Logstash instances in the cluster was complicated by the fact that this was a local docker-compose, and all actions were performed manually (to add new endpoints, it was necessary to go through all servers manually and execute docker-compose up -d everywhere).<\/p>\n<h3>Log Redistribution<\/h3>\n<p>\nIn September of this year, we continued to decompose the monolith, the load on the cluster was increasing, and the log flow approached 30,000 messages per second.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"How we at CIAN tamed terabytes of logs\" src=\"\/wp-content\/uploads\/2019\/12\/00f00af4ad5fa0080a19f36d0ac4b19e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe began the next iteration with hardware upgrades. We reduced from five coordinators to three, replaced the data nodes, and gained both cost savings and storage capacity. We use two configurations for the nodes:\u00a0<\/p>\n<ul>\n<li>For 'hot' nodes: E3-1270 v6 \/ 960Gb SSD \/ 32 Gb x 3 x 2 (3 for Hot1 and 3 for Hot2).\n<\/li>\n<li>For 'warm' nodes: E3-1230 v6 \/ 4Tb SSD \/ 32 Gb x 4.\n<\/li>\n<\/ul>\n<p>\nIn this iteration, we moved the index with the access logs of the microservices, which occupies as much space as the logs of the front-end Nginx, to the second group of three 'hot' nodes. We now store data on the 'hot' nodes for 20 hours, after which it is transferred to the 'warm' nodes along with the other logs.\u00a0<\/p>\n<p>We resolved the issue of small index disappearance by reconfiguring their rotation. Now, the indices rotate every 23 hours regardless of the amount of data. This has slightly increased the number of shards (now around 800), but from the cluster's performance perspective, this is manageable.\u00a0<\/p>\n<p>As a result, the cluster now consists of six 'hot' nodes and only four 'warm' nodes. This causes a slight delay in requests over long intervals, but increasing the number of nodes in the future will resolve this problem.<\/p>\n<p>In this iteration, we fixed the issue with the lack of semi-automated scaling. For this, we deployed an infrastructure Nomad cluster \u2014 similar to the one already running in our production. Currently, the number of Logstash instances does not change automatically based on load, but we will get there.<\/p>\n<p><img decoding=\"async\" alt=\"How we at CIAN tamed terabytes of logs\" src=\"\/wp-content\/uploads\/2019\/12\/c06905f266238990d989bf2d7c84be3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Plans for the future<\/h3>\n<p>\nThe implemented configuration scales well, and we are currently storing 13.3 TB of data \u2014 all logs from the past four days, which is necessary for the urgent analysis of alerts. We convert part of the logs into metrics, which we consolidate in Graphite. To ease engineers' work, we have metrics for the infrastructure cluster and scripts for semi-automated fixes of common issues. After the planned increase in the number of data nodes next year, we will move to data retention from 4 to 7 days. This will be sufficient for operational work, as we always strive to investigate incidents as quickly as possible, while telemetry data is available for long-term investigations.\u00a0<\/p>\n<p>In October 2019, traffic to cian.ru grew to 15.3 million unique users per month. This was a serious test of the architectural solution for log delivery.\u00a0<\/p>\n<p>We are now preparing to update ElasticSearch to version 7. However, this requires updating the mapping of many indices in ElasticSearch, as they migrated from version 5.5 and were marked as deprecated in version 6 (and simply do not exist in version 7). This means that during the update process, there will inevitably be some force majeure that will temporarily leave us without logs. From version 7, we are especially looking forward to Kibana with an improved interface and new filters.\u00a0<\/p>\n<p>We achieved our primary goal: we stopped losing logs and reduced the downtime of the infrastructure cluster from 2-3 failures per week to just a couple of hours for maintenance each month. All of this work in production is almost imperceptible. However, now we can accurately determine what is happening with our service, we can do this quickly in a calm manner and not worry about losing logs. In general, we are satisfied, happy, and preparing for new achievements that we will share later.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/478564\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0426\u0418\u0410\u041d \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u043c \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0430\u0441 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u044b \u0431\u0435\u0440\u0435\u043c 4 \u0422\u0411 \u043b\u043e\u0433\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c \u0438 \u0447\u0442\u043e \u0441 \u043d\u0438\u043c\u0438 \u0434\u0435\u043b\u0430\u0435\u043c. \u0414\u0430, \u043b\u043e\u0433\u043e\u0432 \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0433\u043e, \u0438 \u0434\u043b\u044f \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53590","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0426\u0418\u0410\u041d.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-my-v-tsian-ukroshhali-terabajty-logov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u0432 \u0426\u0418\u0410\u041d \u0443\u043a\u0440\u043e\u0449\u0430\u043b\u0438 \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u044b \u043b\u043e\u0433\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0426\u0418\u0410\u041d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-my-v-tsian-ukroshhali-terabajty-logov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-04T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47How we at CIAN tamed terabytes of logs | ProHoster","description":"Hello everyone, my name is Alexander, and I work at CIAN.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-my-v-tsian-ukroshhali-terabajty-logov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u0432 \u0426\u0418\u0410\u041d \u0443\u043a\u0440\u043e\u0449\u0430\u043b\u0438 \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u044b \u043b\u043e\u0433\u043e\u0432 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0426\u0418\u0410\u041d.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-my-v-tsian-ukroshhali-terabajty-logov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-04T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53590","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-09 22:17:34","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:22:49","updated":"2026-02-09 22:17:34","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/53590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=53590"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/53590\/revisions"}],"predecessor-version":[{"id":160267,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/53590\/revisions\/160267"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=53590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=53590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=53590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}