{"id":477,"date":"2023-11-19T10:00:00","date_gmt":"2023-11-19T10:00:00","guid":{"rendered":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/"},"modified":"2023-11-19T10:00:00","modified_gmt":"2023-11-19T10:00:00","slug":"ebpf-observabilidad-kernel","status":"publish","type":"post","link":"https:\/\/jacar.es\/en\/ebpf-observabilidad-kernel\/","title":{"rendered":"eBPF: Kernel Observability Without Recompiling"},"content":{"rendered":"<p><strong>eBPF<\/strong> (extended Berkeley Packet Filter) is one of the most transformative technologies of recent years in Linux, yet it remains unknown outside specialised circles. It\u2019s the foundation many modern observability, networking, and security tools build on \u2014 Cilium, Pixie, Falco, Tetragon, and others. We cover what it is, why it matters, and where you\u2019ll find it (probably without knowing) in your stack.<\/p>\n<h2 id=\"the-core-idea\">The Core Idea<\/h2>\n<p>Traditionally, modifying Linux kernel behaviour required:<\/p>\n<ul>\n<li><strong>Compiling a module<\/strong> and loading it (risk: a bug = kernel panic).<\/li>\n<li><strong>Patching the kernel<\/strong> and recompiling (impractical in production).<\/li>\n<li><strong>Using userspace utilities<\/strong> that only saw what the kernel exposed (limited).<\/li>\n<\/ul>\n<p>eBPF changes this. It lets you <strong>load small programs in the kernel<\/strong> that execute in response to events (syscalls, network packets, file accesses, process changes). These programs:<\/p>\n<ul>\n<li>Load dynamically \u2014 no recompilation or reboot required.<\/li>\n<li>Are <strong>statically verified<\/strong> before executing \u2014 the kernel verifier rejects programs that could hang it, access disallowed memory, or loop endlessly.<\/li>\n<li>Run in a <strong>virtual machine<\/strong> inside the kernel, with restricted types and limited stack.<\/li>\n<li>Are JIT-compiled to native code for performance.<\/li>\n<\/ul>\n<p>Result: you can instrument the kernel in real time, with safety similar to userspace, and performance close to native code.<\/p>\n<h2 id=\"why-it-matters\">Why It Matters<\/h2>\n<p>Before eBPF, observing what happened inside the kernel required heavy tools (SystemTap, DTrace in its limited Linux versions) or instrumentation that significantly slowed the system. eBPF changed that equation: fine observability with small overhead.<\/p>\n<p>Use cases that open up:<\/p>\n<ul>\n<li><strong>Syscall and process tracing<\/strong> with no extra agent or reboots.<\/li>\n<li><strong>Packet filtering<\/strong> without going through iptables\/nftables (better performance).<\/li>\n<li><strong>Visibility into encrypted traffic<\/strong> by observing before\/after encryption in the kernel.<\/li>\n<li><strong>Runtime security auditing<\/strong> with details auditd doesn\u2019t capture.<\/li>\n<li><strong>Application profiling<\/strong> with function-level stack resolution without instrumenting the binary.<\/li>\n<\/ul>\n<h2 id=\"tools-built-on-ebpf\">Tools Built on eBPF<\/h2>\n<p>In 2023 there\u2019s a notable ecosystem of products that depend entirely on eBPF:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/cilium.io\/\">Cilium<\/a><\/strong>: Kubernetes networking with eBPF instead of iptables. Better performance and observability (Hubble) in the same package.<\/li>\n<li><strong><a href=\"https:\/\/pixielabs.ai\/\">Pixie<\/a><\/strong>: Kubernetes observability capturing HTTP, mySQL, DNS, etc. without instrumenting apps.<\/li>\n<li><strong><a href=\"https:\/\/falco.org\/\">Falco<\/a><\/strong>: runtime threat detection. Originally with kernel module; migrated to eBPF for greater compatibility.<\/li>\n<li><strong><a href=\"https:\/\/tetragon.io\/\">Tetragon<\/a><\/strong>: runtime security enforcement with declarative policies.<\/li>\n<li><strong>bcc\/bpftrace<\/strong>: libraries and tools to write eBPF programs more easily.<\/li>\n<li><strong>Parca<\/strong>: continuous low-overhead profiling of production processes.<\/li>\n<\/ul>\n<p>If you use Cilium or Pixie, you\u2019re already using eBPF whether you know it or not.<\/p>\n<h2 id=\"a-bpftrace-example\">A bpftrace Example<\/h2>\n<p>To see eBPF \u201clive\u201d, <code>bpftrace<\/code> is the simplest entry. Count syscalls per process in one line:<\/p>\n<div class=\"sourceCode\" id=\"cb1\">\n<pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb1-1\"><a href=\"#cb1-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"fu\">sudo<\/span> bpftrace <span class=\"at\">-e<\/span> <span class=\"st\">&#39;tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }&#39;<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>This loads an eBPF program that fires on every syscall, indexes by process name (<code>comm<\/code>), and increments a counter. Prints results on Ctrl-C. Without touching app code, without restarting anything.<\/p>\n<p>Other useful one-liners:<\/p>\n<ul>\n<li><code>read()<\/code> latency per process: <code>bpftrace -e 'kprobe:vfs_read { @start[tid] = nsecs; } kretprobe:vfs_read \/@start[tid]\/ { @ns[comm] = hist(nsecs - @start[tid]); delete(@start[tid]); }'<\/code><\/li>\n<li>TCP retransmissions: <code>bpftrace -e 'tracepoint:tcp:tcp_retransmit_skb { @[comm] = count(); }'<\/code><\/li>\n<\/ul>\n<h2 id=\"restrictions-worth-knowing\">Restrictions Worth Knowing<\/h2>\n<p>eBPF is not magic and has limits:<\/p>\n<ul>\n<li><strong>Strict verifier<\/strong>. The verifier rejects programs it considers unsafe even if they would work. Sometimes you have to rewrite logic to pass verification.<\/li>\n<li><strong>No free recursion<\/strong>. Loops are allowed in modern kernels but with bounded iterations.<\/li>\n<li><strong>Limited stack<\/strong> (512 bytes). You can\u2019t have large structures.<\/li>\n<li><strong>Kernel compatibility<\/strong>. Advanced features require relatively new kernels. RHEL 7 has very limited support; RHEL 9, Debian 12, Ubuntu 22.04 are reasonable.<\/li>\n<li><strong>Learning curve<\/strong>. Writing eBPF directly is complex. Most of us use bpftrace or frameworks like bcc.<\/li>\n<\/ul>\n<h2 id=\"how-to-start-learning\">How to Start Learning<\/h2>\n<p>If you want to dig deeper than \u201ceBPF is good\u201d:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.brendangregg.com\/\">Brendan Gregg<\/a> has the best public resources on tracing and eBPF \u2014 his book <strong>BPF Performance Tools<\/strong> (2019) remains current.<\/li>\n<li><a href=\"https:\/\/ebpf.io\/\">ebpf.io<\/a> \u2014 centralised site with tutorials, ecosystem, and references.<\/li>\n<li><strong>Practical lab<\/strong>: install bpftrace on your Linux, try the documentation one-liners, then write your own.<\/li>\n<li>For serious programming: learn Rust or C + libbpf-rs \/ Aya framework.<\/li>\n<\/ul>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>eBPF has redefined what\u2019s possible to observe and modify on a modern Linux system. It\u2019s beneath many modern Kubernetes and observability tools \u2014 understanding at least the concepts helps you decide between alternatives and debug when those tools behave unexpectedly. You don\u2019t have to write eBPF directly to benefit, but knowing it\u2019s there expands your repertoire.<\/p>\n<p>Follow us on jacar.es for more on observability, Linux kernel, and modern Cloud Native tools.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>eBPF lets you run safe code inside the kernel for tracing, networking, and security. Why it&#8217;s the foundation of modern observability tooling.<\/p>\n","protected":false},"author":1,"featured_media":478,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,19],"tags":[131,59,264,265,60,57],"class_list":["post-477","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arquitectura","category-tecnologia","tag-cilium","tag-ebpf","tag-kernel","tag-linux","tag-observabilidad","tag-pixie"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"en","enabled_languages":["es","en"],"languages":{"es":{"title":true,"content":true,"excerpt":true},"en":{"title":true,"content":true,"excerpt":true}}},"gutentor_comment":0,"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>eBPF: Kernel Observability Without Recompiling - Jacar<\/title>\n<meta name=\"description\" content=\"eBPF explained: how it safely runs code in the kernel, tools using it (Cilium, Pixie, Falco), and practical observability cases.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"eBPF: Kernel Observability Without Recompiling - Jacar\" \/>\n<meta property=\"og:description\" content=\"eBPF explained: how it safely runs code in the kernel, tools using it (Cilium, Pixie, Falco), and practical observability cases.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/\" \/>\n<meta property=\"og:site_name\" content=\"Jacar\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-19T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2020\/09\/favicon.png\" \/>\n\t<meta property=\"og:image:width\" content=\"252\" \/>\n\t<meta property=\"og:image:height\" content=\"229\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"javi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"javi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/\"},\"author\":{\"name\":\"javi\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/person\\\/54a7f7b4224b38fafc9866eb3e614208\"},\"headline\":\"eBPF: Kernel Observability Without Recompiling\",\"datePublished\":\"2023-11-19T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/\"},\"wordCount\":1473,\"publisher\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/19233346\\\/jwp-1280618-11407.jpg\",\"keywords\":[\"cilium\",\"ebpf\",\"kernel\",\"linux\",\"observabilidad\",\"pixie\"],\"articleSection\":[\"Arquitectura\",\"Tecnolog\u00eda\"],\"inLanguage\":\"en-US\"},{\"@type\":[\"WebPage\",\"ItemPage\"],\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/\",\"url\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/\",\"name\":\"eBPF: Kernel Observability Without Recompiling - Jacar\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/19233346\\\/jwp-1280618-11407.jpg\",\"datePublished\":\"2023-11-19T10:00:00+00:00\",\"description\":\"eBPF explained: how it safely runs code in the kernel, tools using it (Cilium, Pixie, Falco), and practical observability cases.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/#primaryimage\",\"url\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/19233346\\\/jwp-1280618-11407.jpg\",\"contentUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/19233346\\\/jwp-1280618-11407.jpg\",\"width\":1200,\"height\":675,\"caption\":\"Pantalla con m\u00e9tricas de sistema y gr\u00e1ficos en tiempo real\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jacar.es\\\/ebpf-observabilidad-kernel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/jacar.es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"eBPF: observabilidad en el kernel sin recompilar\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#website\",\"url\":\"https:\\\/\\\/jacar.es\\\/\",\"name\":\"Jacar\",\"description\":\"Passion for Technology\",\"publisher\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jacar.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\",\"name\":\"Jacar\",\"url\":\"https:\\\/\\\/jacar.es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/jacar.es\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/favicon.png\",\"contentUrl\":\"https:\\\/\\\/jacar.es\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/favicon.png\",\"width\":252,\"height\":229,\"caption\":\"Jacar\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/javiercanetearroyo\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/person\\\/54a7f7b4224b38fafc9866eb3e614208\",\"name\":\"javi\",\"sameAs\":[\"https:\\\/\\\/jacar.es\"],\"url\":\"https:\\\/\\\/jacar.es\\\/en\\\/author\\\/javi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"eBPF: Kernel Observability Without Recompiling - Jacar","description":"eBPF explained: how it safely runs code in the kernel, tools using it (Cilium, Pixie, Falco), and practical observability cases.","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:\/\/jacar.es\/ebpf-observabilidad-kernel\/","og_locale":"en_US","og_type":"article","og_title":"eBPF: Kernel Observability Without Recompiling - Jacar","og_description":"eBPF explained: how it safely runs code in the kernel, tools using it (Cilium, Pixie, Falco), and practical observability cases.","og_url":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/","og_site_name":"Jacar","article_published_time":"2023-11-19T10:00:00+00:00","og_image":[{"width":252,"height":229,"url":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2020\/09\/favicon.png","type":"image\/png"}],"author":"javi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"javi","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/#article","isPartOf":{"@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/"},"author":{"name":"javi","@id":"https:\/\/jacar.es\/#\/schema\/person\/54a7f7b4224b38fafc9866eb3e614208"},"headline":"eBPF: Kernel Observability Without Recompiling","datePublished":"2023-11-19T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/"},"wordCount":1473,"publisher":{"@id":"https:\/\/jacar.es\/#organization"},"image":{"@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/#primaryimage"},"thumbnailUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/11\/19233346\/jwp-1280618-11407.jpg","keywords":["cilium","ebpf","kernel","linux","observabilidad","pixie"],"articleSection":["Arquitectura","Tecnolog\u00eda"],"inLanguage":"en-US"},{"@type":["WebPage","ItemPage"],"@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/","url":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/","name":"eBPF: Kernel Observability Without Recompiling - Jacar","isPartOf":{"@id":"https:\/\/jacar.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/#primaryimage"},"image":{"@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/#primaryimage"},"thumbnailUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/11\/19233346\/jwp-1280618-11407.jpg","datePublished":"2023-11-19T10:00:00+00:00","description":"eBPF explained: how it safely runs code in the kernel, tools using it (Cilium, Pixie, Falco), and practical observability cases.","breadcrumb":{"@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jacar.es\/ebpf-observabilidad-kernel\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/#primaryimage","url":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/11\/19233346\/jwp-1280618-11407.jpg","contentUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2023\/11\/19233346\/jwp-1280618-11407.jpg","width":1200,"height":675,"caption":"Pantalla con m\u00e9tricas de sistema y gr\u00e1ficos en tiempo real"},{"@type":"BreadcrumbList","@id":"https:\/\/jacar.es\/ebpf-observabilidad-kernel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/jacar.es\/"},{"@type":"ListItem","position":2,"name":"eBPF: observabilidad en el kernel sin recompilar"}]},{"@type":"WebSite","@id":"https:\/\/jacar.es\/#website","url":"https:\/\/jacar.es\/","name":"Jacar","description":"Passion for Technology","publisher":{"@id":"https:\/\/jacar.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jacar.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jacar.es\/#organization","name":"Jacar","url":"https:\/\/jacar.es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jacar.es\/#\/schema\/logo\/image\/","url":"https:\/\/jacar.es\/wp-content\/uploads\/2020\/09\/favicon.png","contentUrl":"https:\/\/jacar.es\/wp-content\/uploads\/2020\/09\/favicon.png","width":252,"height":229,"caption":"Jacar"},"image":{"@id":"https:\/\/jacar.es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/javiercanetearroyo\/"]},{"@type":"Person","@id":"https:\/\/jacar.es\/#\/schema\/person\/54a7f7b4224b38fafc9866eb3e614208","name":"javi","sameAs":["https:\/\/jacar.es"],"url":"https:\/\/jacar.es\/en\/author\/javi\/"}]}},"_links":{"self":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts\/477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/comments?post=477"}],"version-history":[{"count":0,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts\/477\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/media\/478"}],"wp:attachment":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/media?parent=477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/categories?post=477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/tags?post=477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}