{"id":2673,"date":"2020-02-12T13:02:44","date_gmt":"2020-02-12T12:02:44","guid":{"rendered":"https:\/\/geko2.factoryfy.com\/extract-user_agent-fields-from-logs-using-aws-elasticsearch\/"},"modified":"2021-11-03T17:24:44","modified_gmt":"2021-11-03T16:24:44","slug":"extract-user_agent-fields-from-logs-using-aws-elasticsearch","status":"publish","type":"post","link":"https:\/\/geko.cloud\/en\/extract-user_agent-fields-from-logs-using-aws-elasticsearch\/","title":{"rendered":"Extract user_agent fields from logs using AWS ElasticSearch"},"content":{"rendered":"<p>ElasticSearch service has become one of the preferred services where sysops department store logs and metrics information.<\/p>\n<p>Recently, we faced with a problem that we already solved related with the user_agent field we get from nginx json logs.<\/p>\n<p>When a new request transaction goes to our web services we want to get some certain relevant information about the agent who is trying to get that information.<\/p>\n<p>Example:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-714\" src=\"https:\/\/geko2.factoryfy.com\/wp-content\/uploads\/elk-useragent.png\" alt=\"\" width=\"360\" height=\"216\" \/><\/p>\n<p>In the past, elastic search comes with an specific plugin that generate those fields with all the agent information. And even the AWS elasticsearch services has come with this plugin.<\/p>\n<p>Usefull links:<\/p>\n<p>https:\/\/docs.amazonaws.cn\/en_us\/elasticsearch-service\/latest\/developerguide\/aes-supported-plugins.html<\/p>\n<p>https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/plugins\/master\/ingest-user-agent.html<\/p>\n<p>But now, the plugin has been replaced by a specific <strong>processor<\/strong> inside Elasticsearch engine.<\/p>\n<p>&nbsp;<\/p>\n<h3><strong>Then, how we can make it work with the logs ingest?<\/strong><\/h3>\n<p>The quickest answer is just using a pipeline that calls our user agent processor inside the ingest controller using the next schema:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-720\" src=\"https:\/\/geko2.factoryfy.com\/wp-content\/uploads\/fluent-elk.png\" alt=\"\" width=\"773\" height=\"268\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>In our case, we use <strong>fluentbit<\/strong> inside our customer web servers to collect the json file that nginx generates and then all the agents send that info by streaming to a <strong>fluentd agrgregator<\/strong> service where we had configured the <strong>OUTPUT plugins<\/strong> of several databases and storage collectors. In our case, elasticsearch.<\/p>\n<p>Inside the Elasticsearch we create a new <strong>pipeline<\/strong> and just need to tell the name of the user agent field we get from json:<\/p>\n<pre class=\"programlisting prettyprint lang-console prettyprinted\"><span class=\"kwd\">PUT<\/span> <span class=\"str\">_ingest<\/span><span class=\"pun\">\/<\/span><span class=\"str\">pipeline<\/span><span class=\"pun\">\/<\/span><span class=\"str\">nginx<\/span>\r\n<span class=\"pun\">{<\/span>\r\n  <span class=\"str\">\"description\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"Add user agent info from nginx user agent\"<\/span><span class=\"pun\">,<\/span>\r\n  <span class=\"str\">\"processors\"<\/span> <span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n      <span class=\"str\">\"user_agent\"<\/span> <span class=\"pun\">:<\/span> <span class=\"pun\">{<\/span>\r\n        <span class=\"str\">\"field\"<\/span> <span class=\"pun\">:<\/span> <span class=\"str\">\"nginx-agent-field\"<\/span>\r\n      <span class=\"pun\">}<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n  <span class=\"pun\">]<\/span>\r\n<span class=\"pun\">}<\/span><\/pre>\n<p>So now we have created the <strong>pipeline<\/strong> telling the field name of our <strong>nginx user agent<\/strong>. Now how we connect pipeline with the logs ingest from aggregator?<\/p>\n<p>Easy, we just need to specify the <strong>pipeline ingest<\/strong> inside our <strong>tdagent<\/strong> configuration in the match rule like this<\/p>\n<p><strong>\/etc\/td-agent\/td-agent.conf:<\/strong><\/p>\n<pre> @type \"elasticsearch\"\r\n host elasticsearchtest.eu-west-1.es.amazonaws.com\r\n port 443\r\n scheme https\r\n ssl_verify true\r\n ssl_version TLSv1_2\r\n type_name \"access_log\"\r\n logstash_prefix \"nginx\"\r\n logstash_format true\r\n include_tag_key true\r\n pipeline nginx\r\n tag_key \"@log_name\"\r\n flush_interval 10s\r\n\r\n chunk_limit_size 4MB\r\n total_limit_size 512MB\r\n flush_interval 30s\r\n flush_thread_count 2\r\n queue_limit_length 15\r\n retry_max_interval 30\r\n retry_forever true\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>As you can see we configure the ingest using pipeline attribute with the pipeline name we already created before, in our case nginx:<\/p>\n<p>pipeline nginx<\/p>\n<p>Just adding the pipeline with the user agent processor, now our ingest will add for every row in our elasticsearch database the user agent information in the fly.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\">Advice!: After few weeks of test in real production environment with the pipeline method, we can say that this processor needs too much CPU to process in real time and build the transformations. So we decided to configure a filter inside fluentd to use ua plugin in aggregator layer and it works much better now!<\/span><\/p>\n<div>\n<blockquote>\n<div>#td-agent-gem\u00a0install\u00a0fluent-plugin-ua-parser<\/div>\n<\/blockquote>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Hope it helps! <a href=\"https:\/\/geko.cloud\/en\/contact\/\">Contact us<\/a> if you have any questions!\u00a0\u00a0 \u00a0\ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ElasticSearch service has become one of the preferred services where sysops department store logs and metrics information. Recently, we faced with a problem that we already solved related with the user_agent field we get from nginx json logs. When a new request transaction goes to our web services we want to get some certain relevant [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2375,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[67],"tags":[72,75],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Extract user_agent fields from logs using AWS ElasticSearch<\/title>\n<meta name=\"description\" content=\"In this post we will explain how to create pipelines in elasticsearch to use your user agent processor to get user information in real time using fluentbit and fluentd as log collector from nginx json files.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extract user_agent fields from logs using AWS ElasticSearch\" \/>\n<meta property=\"og:description\" content=\"In this post we will explain how to create pipelines in elasticsearch to use your user agent processor to get user information in real time using fluentbit and fluentd as log collector from nginx json files.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/\" \/>\n<meta property=\"og:site_name\" content=\"Geko Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-12T12:02:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-03T16:24:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png\" \/>\n\t<meta property=\"og:image:width\" content=\"773\" \/>\n\t<meta property=\"og:image:height\" content=\"268\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jose Luis S\u00e1nchez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geko_cloud\" \/>\n<meta name=\"twitter:site\" content=\"@geko_cloud\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/\"},\"author\":{\"name\":\"Jose Luis S\u00e1nchez\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/d06aff498ebfbc75b5010ebe92af41ed\"},\"headline\":\"Extract user_agent fields from logs using AWS ElasticSearch\",\"datePublished\":\"2020-02-12T12:02:44+00:00\",\"dateModified\":\"2021-11-03T16:24:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/\"},\"wordCount\":430,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/geko.cloud\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png\",\"keywords\":[\"AWS\",\"Elasticsearch\"],\"articleSection\":[\"Labs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/\",\"url\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/\",\"name\":\"Extract user_agent fields from logs using AWS ElasticSearch\",\"isPartOf\":{\"@id\":\"https:\/\/geko.cloud\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png\",\"datePublished\":\"2020-02-12T12:02:44+00:00\",\"dateModified\":\"2021-11-03T16:24:44+00:00\",\"description\":\"In this post we will explain how to create pipelines in elasticsearch to use your user agent processor to get user information in real time using fluentbit and fluentd as log collector from nginx json files.\",\"breadcrumb\":{\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage\",\"url\":\"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png\",\"contentUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png\",\"width\":773,\"height\":268,\"caption\":\"fluentbit ngnix elasticsearch\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/geko.cloud\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extract user_agent fields from logs using AWS ElasticSearch\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/geko.cloud\/es\/#website\",\"url\":\"https:\/\/geko.cloud\/es\/\",\"name\":\"Geko Cloud\",\"description\":\"Servicios de consultor\u00eda cloud y devops\",\"publisher\":{\"@id\":\"https:\/\/geko.cloud\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/geko.cloud\/es\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/geko.cloud\/es\/#organization\",\"name\":\"Geko Cloud\",\"url\":\"https:\/\/geko.cloud\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png\",\"contentUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png\",\"width\":1650,\"height\":809,\"caption\":\"Geko Cloud\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/geko_cloud\",\"https:\/\/www.instagram.com\/gekocloud\/\",\"https:\/\/www.linkedin.com\/company\/gekocloud\",\"https:\/\/www.youtube.com\/channel\/UC5EFLCqUM7fEaXSa_0nWowQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/d06aff498ebfbc75b5010ebe92af41ed\",\"name\":\"Jose Luis S\u00e1nchez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ebfd055d4dba456220c682523fcc237c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ebfd055d4dba456220c682523fcc237c?s=96&d=mm&r=g\",\"caption\":\"Jose Luis S\u00e1nchez\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extract user_agent fields from logs using AWS ElasticSearch","description":"In this post we will explain how to create pipelines in elasticsearch to use your user agent processor to get user information in real time using fluentbit and fluentd as log collector from nginx json files.","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:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/","og_locale":"en_US","og_type":"article","og_title":"Extract user_agent fields from logs using AWS ElasticSearch","og_description":"In this post we will explain how to create pipelines in elasticsearch to use your user agent processor to get user information in real time using fluentbit and fluentd as log collector from nginx json files.","og_url":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/","og_site_name":"Geko Cloud","article_published_time":"2020-02-12T12:02:44+00:00","article_modified_time":"2021-11-03T16:24:44+00:00","og_image":[{"width":773,"height":268,"url":"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png","type":"image\/png"}],"author":"Jose Luis S\u00e1nchez","twitter_card":"summary_large_image","twitter_creator":"@geko_cloud","twitter_site":"@geko_cloud","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#article","isPartOf":{"@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/"},"author":{"name":"Jose Luis S\u00e1nchez","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/d06aff498ebfbc75b5010ebe92af41ed"},"headline":"Extract user_agent fields from logs using AWS ElasticSearch","datePublished":"2020-02-12T12:02:44+00:00","dateModified":"2021-11-03T16:24:44+00:00","mainEntityOfPage":{"@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/"},"wordCount":430,"commentCount":0,"publisher":{"@id":"https:\/\/geko.cloud\/es\/#organization"},"image":{"@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage"},"thumbnailUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png","keywords":["AWS","Elasticsearch"],"articleSection":["Labs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/","url":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/","name":"Extract user_agent fields from logs using AWS ElasticSearch","isPartOf":{"@id":"https:\/\/geko.cloud\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage"},"image":{"@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage"},"thumbnailUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png","datePublished":"2020-02-12T12:02:44+00:00","dateModified":"2021-11-03T16:24:44+00:00","description":"In this post we will explain how to create pipelines in elasticsearch to use your user agent processor to get user information in real time using fluentbit and fluentd as log collector from nginx json files.","breadcrumb":{"@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#primaryimage","url":"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png","contentUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/fluent-elk.png","width":773,"height":268,"caption":"fluentbit ngnix elasticsearch"},{"@type":"BreadcrumbList","@id":"https:\/\/geko.cloud\/es\/extrae-los-campos-user_agent-de-los-registros-con-aws-elasticsearch\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/geko.cloud\/en\/"},{"@type":"ListItem","position":2,"name":"Extract user_agent fields from logs using AWS ElasticSearch"}]},{"@type":"WebSite","@id":"https:\/\/geko.cloud\/es\/#website","url":"https:\/\/geko.cloud\/es\/","name":"Geko Cloud","description":"Servicios de consultor\u00eda cloud y devops","publisher":{"@id":"https:\/\/geko.cloud\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/geko.cloud\/es\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/geko.cloud\/es\/#organization","name":"Geko Cloud","url":"https:\/\/geko.cloud\/es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/","url":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png","contentUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/10\/geko_logo-positivo.png","width":1650,"height":809,"caption":"Geko Cloud"},"image":{"@id":"https:\/\/geko.cloud\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/geko_cloud","https:\/\/www.instagram.com\/gekocloud\/","https:\/\/www.linkedin.com\/company\/gekocloud","https:\/\/www.youtube.com\/channel\/UC5EFLCqUM7fEaXSa_0nWowQ"]},{"@type":"Person","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/d06aff498ebfbc75b5010ebe92af41ed","name":"Jose Luis S\u00e1nchez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ebfd055d4dba456220c682523fcc237c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ebfd055d4dba456220c682523fcc237c?s=96&d=mm&r=g","caption":"Jose Luis S\u00e1nchez"}}]}},"_links":{"self":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2673"}],"collection":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/comments?post=2673"}],"version-history":[{"count":2,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2673\/revisions"}],"predecessor-version":[{"id":5187,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2673\/revisions\/5187"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/media\/2375"}],"wp:attachment":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/media?parent=2673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/categories?post=2673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/tags?post=2673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}