{"id":2525,"date":"2021-07-02T10:58:00","date_gmt":"2021-07-02T08:58:00","guid":{"rendered":"https:\/\/geko2.factoryfy.com\/indexing-haproxy-custom-http-headers-into-elasticsearch\/"},"modified":"2021-11-08T15:31:34","modified_gmt":"2021-11-08T14:31:34","slug":"indexing-haproxy-custom-http-headers-into-elasticsearch","status":"publish","type":"post","link":"https:\/\/geko.cloud\/en\/indexing-haproxy-custom-http-headers-into-elasticsearch\/","title":{"rendered":"Indexing HAProxy custom HTTP headers into Elasticsearch"},"content":{"rendered":"<p><strong>Elasticsearch<\/strong> is a tool that allows indexing many types of content such as application logs, and in this article we will deal precisely with how to index the HTTP logs of a load balancer and proxy such as HAProxy, in the case of wanting to also record the fields of User-Agent, X-Forwarded-For and Referrer, which by default are not shown in the logs.<\/p>\n<p>Currently on the market there are many tools available to forward these logs to <strong>Elasticsearch<\/strong>, and in this case we will use Filebeat because it is a simple tool to install and configure, and it perfectly fulfills its mission. It is also interesting to mention that it has been developed by the same company as <strong>Elasticsearch<\/strong>.<\/p>\n<p>Although Filebeat already has a module for HAProxy that allows you to forward and index your logs in the default format, in case we want to add more fields to these logs or simply change their format, we will have to change the way <strong>Elasticsearch<\/strong> should do the data ingestion.<\/p>\n<h3>Adding more information to the HAProxy logs<\/h3>\n<p>Let&#8217;s suppose that we want the logs of HTTP requests to also show other fields such as User-Agent, X-Forwarded-For and Referrer, fields which are very good to have at your disposal when you want to monitor a website, but that they are not actually saved to the logs unless we specify it explicitly. To do this, simply add the following lines in the frontend sections of the HAProxy configuration file.<\/p>\n<pre>capture request header X-Forwarded-For len 15\r\ncapture request header User-Agent len 128\r\ncapture request header Referer len 128<\/pre>\n<p>Given that HAProxy by default stores in the logs the headers of the HTTP requests that have been set to be captured, it would not be necessary to do anything else except restart the service to apply the changes and verify that these fields are actually being shown in the logs.<\/p>\n<h3>Filebeat installation<\/h3>\n<p>Installing and configuring the Filebeat agent is very simple, just follow the instructions in the <a href=\"https:\/\/www.elastic.co\/guide\/en\/beats\/filebeat\/current\/filebeat-installation-configuration.html\">official documentation<\/a>.\u00a0It consists of the following steps:<\/p>\n<ol>\n<li>Agent installation based on operating system<\/li>\n<li>Elasticsearch \/ Kibana connection information settings.<\/li>\n<li>Module activation for HAProxy.<\/li>\n<li>Recommended resources load to <strong>Elasticsearch<\/strong>, such as index templates and some dashboards for Kibana.<\/li>\n<\/ol>\n<p>The first time the module connects to <strong>Elasticsearch<\/strong> it will create an ingest pipeline, which is the element that parses the logs.<\/p>\n<h3>Ingest Pipeline modification<\/h3>\n<p>By now we should be receiving the logs in <strong>Elasticsearch<\/strong>, but the User-Agent, X-Forwarded-For and Referrer fields would still not be visible despite being available in the HAProxy logs. This is because the ingest pipeline created by the Filebeat module does not take these fields into account, and therefore we will have to edit it.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4806\" src=\"https:\/\/geko2.factoryfy.com\/wp-content\/uploads\/cursor_and_ingest_node_pipelines_elastic.png\" alt=\"\" width=\"682\" height=\"428\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>We must edit the Grok processor patterns. When clicking on the processor to edit it, we should see the following patterns.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4807\" src=\"https:\/\/geko2.factoryfy.com\/wp-content\/uploads\/grok_ingest_node_pipelines_elastic.png\" alt=\"\" width=\"696\" height=\"630\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>We must add a new one with the following content and move it to the second position.<\/p>\n<pre>(%{NOTSPACE:process.name}[%{NUMBER:process.pid:long}]: )?%{IP:source.address}:%{NUMBER:source.port:long} [%{NOTSPACE:haproxy.request_date}] %{NOTSPACE:haproxy.frontend_name} %{NOTSPACE:haproxy.backend_name}\/%{NOTSPACE:haproxy.server_name} %{NUMBER:haproxy.http.request.time_wait_ms:long}\/%{NUMBER:haproxy.total_waiting_time_ms:long}\/%{NUMBER:haproxy.connection_wait_time_ms:long}\/%{NUMBER:haproxy.http.request.time_wait_without_data_ms:long}\/%{NUMBER:temp.duration:long} %{NUMBER:http.response.status_code:long} %{NUMBER:haproxy.bytes_read:long} %{NOTSPACE:haproxy.http.request.captured_cookie} %{NOTSPACE:haproxy.http.response.captured_cookie} %{NOTSPACE:haproxy.termination_state} %{NUMBER:haproxy.connections.active:long}\/%{NUMBER:haproxy.connections.frontend:long}\/%{NUMBER:haproxy.connections.backend:long}\/%{NUMBER:haproxy.connections.server:long}\/%{NUMBER:haproxy.connections.retries:long} %{NUMBER:haproxy.server_queue:long}\/%{NUMBER:haproxy.backend_queue:long} {%{IP:source.ip}|%{DATA:user_agent.original}|%{DATA:http.request.referrer}} \"%{GREEDYDATA:haproxy.http.request.raw_request_line}\"<\/pre>\n<p>It is very important that this new pattern is placed in the second position since the processor will use the first expression that is matched and it will ignore the rest.<\/p>\n<p>By now there should be a list of five patterns. Finally, we click the Update button and from that moment the new fields should already be visible.<\/p>\n<p>&nbsp;<\/p>\n<p>I hope you\u2019ve enjoyed this post and I encourage you to\u00a0<a href=\"https:\/\/geko2.factoryfy.com\/en\/blog\/\">check our blog for other posts<\/a>\u00a0that you might find helpful.\u00a0<a href=\"https:\/\/geko.cloud\/en\/contact\/\">Do not hesitate to contact us<\/a>\u00a0if you would like us to help you on your projects.<\/p>\n<p>See you on the next post!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Elasticsearch is a tool that allows indexing many types of content such as application logs, and in this article we will deal precisely with how to index the HTTP logs of a load balancer and proxy such as HAProxy, in the case of wanting to also record the fields of User-Agent, X-Forwarded-For and Referrer, which [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":5446,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[67],"tags":[75,80],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Indexing HAProxy custom HTTP headers into Elasticsearch - Geko Cloud<\/title>\n<meta name=\"description\" content=\"Elasticsearch can index many types of content, and in this post we will deal how to index HTTP logs from a load balancer and proxy like HAProxy.\" \/>\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\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Indexing HAProxy custom HTTP headers into Elasticsearch - Geko Cloud\" \/>\n<meta property=\"og:description\" content=\"Elasticsearch can index many types of content, and in this post we will deal how to index HTTP logs from a load balancer and proxy like HAProxy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/\" \/>\n<meta property=\"og:site_name\" content=\"Geko Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-02T08:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-08T14:31:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png\" \/>\n\t<meta property=\"og:image:width\" content=\"15060\" \/>\n\t<meta property=\"og:image:height\" content=\"6376\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Antonio Olmos\" \/>\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\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/\"},\"author\":{\"name\":\"Antonio Olmos\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/06c5401df344025908fdda04850a1dd0\"},\"headline\":\"Indexing HAProxy custom HTTP headers into Elasticsearch\",\"datePublished\":\"2021-07-02T08:58:00+00:00\",\"dateModified\":\"2021-11-08T14:31:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/\"},\"wordCount\":583,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/geko.cloud\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png\",\"keywords\":[\"Elasticsearch\",\"HAproxy\"],\"articleSection\":[\"Labs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/\",\"url\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/\",\"name\":\"Indexing HAProxy custom HTTP headers into Elasticsearch - Geko Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/geko.cloud\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png\",\"datePublished\":\"2021-07-02T08:58:00+00:00\",\"dateModified\":\"2021-11-08T14:31:34+00:00\",\"description\":\"Elasticsearch can index many types of content, and in this post we will deal how to index HTTP logs from a load balancer and proxy like HAProxy.\",\"breadcrumb\":{\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage\",\"url\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png\",\"contentUrl\":\"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png\",\"width\":15060,\"height\":6376,\"caption\":\"haproxy elasticsearch logos\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/geko.cloud\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Indexing HAProxy custom HTTP headers into 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\/06c5401df344025908fdda04850a1dd0\",\"name\":\"Antonio Olmos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/geko.cloud\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g\",\"caption\":\"Antonio Olmos\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Indexing HAProxy custom HTTP headers into Elasticsearch - Geko Cloud","description":"Elasticsearch can index many types of content, and in this post we will deal how to index HTTP logs from a load balancer and proxy like HAProxy.","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\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/","og_locale":"en_US","og_type":"article","og_title":"Indexing HAProxy custom HTTP headers into Elasticsearch - Geko Cloud","og_description":"Elasticsearch can index many types of content, and in this post we will deal how to index HTTP logs from a load balancer and proxy like HAProxy.","og_url":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/","og_site_name":"Geko Cloud","article_published_time":"2021-07-02T08:58:00+00:00","article_modified_time":"2021-11-08T14:31:34+00:00","og_image":[{"width":15060,"height":6376,"url":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png","type":"image\/png"}],"author":"Antonio Olmos","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\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#article","isPartOf":{"@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/"},"author":{"name":"Antonio Olmos","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/06c5401df344025908fdda04850a1dd0"},"headline":"Indexing HAProxy custom HTTP headers into Elasticsearch","datePublished":"2021-07-02T08:58:00+00:00","dateModified":"2021-11-08T14:31:34+00:00","mainEntityOfPage":{"@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/"},"wordCount":583,"commentCount":0,"publisher":{"@id":"https:\/\/geko.cloud\/es\/#organization"},"image":{"@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage"},"thumbnailUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png","keywords":["Elasticsearch","HAproxy"],"articleSection":["Labs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/","url":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/","name":"Indexing HAProxy custom HTTP headers into Elasticsearch - Geko Cloud","isPartOf":{"@id":"https:\/\/geko.cloud\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage"},"image":{"@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage"},"thumbnailUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png","datePublished":"2021-07-02T08:58:00+00:00","dateModified":"2021-11-08T14:31:34+00:00","description":"Elasticsearch can index many types of content, and in this post we will deal how to index HTTP logs from a load balancer and proxy like HAProxy.","breadcrumb":{"@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#primaryimage","url":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png","contentUrl":"https:\/\/geko.cloud\/wp-content\/uploads\/2021\/07\/haproxy-elasticsearch-logos-min.png","width":15060,"height":6376,"caption":"haproxy elasticsearch logos"},{"@type":"BreadcrumbList","@id":"https:\/\/geko.cloud\/es\/indexar-en-elasticsearch-las-cabeceras-http-personalizadas-de-haproxy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/geko.cloud\/en\/"},{"@type":"ListItem","position":2,"name":"Indexing HAProxy custom HTTP headers into 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\/06c5401df344025908fdda04850a1dd0","name":"Antonio Olmos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/geko.cloud\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/48f5ef4bb4ea8f8258470052a3ce4a44?s=96&d=mm&r=g","caption":"Antonio Olmos"}}]}},"_links":{"self":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2525"}],"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\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/comments?post=2525"}],"version-history":[{"count":3,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2525\/revisions"}],"predecessor-version":[{"id":5291,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/posts\/2525\/revisions\/5291"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/media\/5446"}],"wp:attachment":[{"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/media?parent=2525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/categories?post=2525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geko.cloud\/en\/wp-json\/wp\/v2\/tags?post=2525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}