<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ollie</title><link>https://gke-labs.github.io/in-cluster-observability/</link><description>Recent content on Ollie</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://gke-labs.github.io/in-cluster-observability/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting started</title><link>https://gke-labs.github.io/in-cluster-observability/docs/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gke-labs.github.io/in-cluster-observability/docs/getting-started/</guid><description>&lt;p&gt;This walks from a fresh clone to per-pod HTTP metrics on a real nginx Deployment, scraped from the agent&amp;rsquo;s &lt;code&gt;:9090&lt;/code&gt; endpoint with &lt;code&gt;k8s.pod.name&lt;/code&gt; / &lt;code&gt;k8s.namespace.name&lt;/code&gt; / &lt;code&gt;k8s.deployment.name&lt;/code&gt; labels attached by OBI.&lt;/p&gt;
&lt;p&gt;Kind is the reference cluster — the same flow works on any Linux 6.x cluster with eBPF support (GKE 1.33+ on cos-125+, EKS with &lt;code&gt;bottlerocket&lt;/code&gt;, k3s with &lt;code&gt;--snapshotter=overlayfs&lt;/code&gt;, etc.); only the image-loading step differs.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A clone of &lt;a href="https://github.com/gke-labs/in-cluster-observability"&gt;&lt;code&gt;github.com/gke-labs/in-cluster-observability&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;kubectl&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;go&lt;/code&gt; 1.26+.&lt;/li&gt;
&lt;li&gt;A kernel with BTF + CO-RE (any 5.10+ kernel built with &lt;code&gt;CONFIG_DEBUG_INFO_BTF=y&lt;/code&gt;; Kind&amp;rsquo;s default node image qualifies).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="1-spin-up-a-kind-cluster"&gt;1. Spin up a Kind cluster&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kind create cluster --name ollie-v03
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The default single-node cluster is enough. Multi-node works too — the agent is a DaemonSet, you&amp;rsquo;ll get one agent per node.&lt;/p&gt;</description></item><item><title>What works today</title><link>https://gke-labs.github.io/in-cluster-observability/docs/what-works-today/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gke-labs.github.io/in-cluster-observability/docs/what-works-today/</guid><description>&lt;p&gt;Ollie is at &lt;strong&gt;v0.3 dev preview&lt;/strong&gt;. The capture path works end-to-end on real clusters, but several pieces from the original requirements (CRD-driven onboarding, in-cluster store + PromQL, HPA custom-metrics API, AI-agent streaming, TLS uprobes, peer.k8s.* on the L7 path) are still ahead. This page is the inventory.&lt;/p&gt;
&lt;h2 id="whats-captured"&gt;What&amp;rsquo;s captured&lt;/h2&gt;
&lt;h3 id="l4-tcp--every-flow-on-the-node"&gt;L4 TCP — every flow on the node&lt;/h3&gt;
&lt;p&gt;OBI&amp;rsquo;s network mode attaches an in-kernel socket filter and observes every TCP byte flowing through the node, regardless of which process owns it. The metric you&amp;rsquo;ll see is:&lt;/p&gt;</description></item><item><title>Architecture</title><link>https://gke-labs.github.io/in-cluster-observability/docs/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gke-labs.github.io/in-cluster-observability/docs/architecture/</guid><description>&lt;p&gt;Ollie is built on top of &lt;a href="https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation"&gt;OpenTelemetry eBPF Instrumentation (OBI)&lt;/a&gt;. OBI does the eBPF capture and K8s metadata enrichment; Ollie adds the production deployment scaffolding plus an OTLP receiver carve-out that future milestones use as the hook point for CRD-driven onboarding (v0.4) and the in-cluster store (v0.5).&lt;/p&gt;
&lt;p&gt;This page describes the data path that&amp;rsquo;s actually shipping in v0.3. For the full design log and the reasoning behind each choice, see the &lt;a href="https://github.com/gke-labs/in-cluster-observability/blob/main/docs/design/decisions.md"&gt;ADRs in the repo&lt;/a&gt; — especially &lt;a href="https://github.com/gke-labs/in-cluster-observability/blob/main/docs/design/decisions.md#adr-0018-obi-as-sibling-container-not-embedded-library"&gt;ADR-0018&lt;/a&gt; (sibling-container model) and &lt;a href="https://github.com/gke-labs/in-cluster-observability/blob/main/docs/design/decisions.md#adr-0021-lean-v03--agent-re-uses-obis-native-enrichment"&gt;ADR-0021&lt;/a&gt; (lean v0.3 pivot to OBI native enrichment).&lt;/p&gt;</description></item><item><title>Roadmap</title><link>https://gke-labs.github.io/in-cluster-observability/docs/roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gke-labs.github.io/in-cluster-observability/docs/roadmap/</guid><description>&lt;p&gt;The project is on a milestone cadence — &lt;code&gt;v0.1&lt;/code&gt; → &lt;code&gt;v0.2&lt;/code&gt; → &lt;code&gt;v0.3&lt;/code&gt; → &amp;hellip; → &lt;code&gt;v1.0&lt;/code&gt;. Each milestone branch in upstream is the integration point for that milestone&amp;rsquo;s work, and milestone PRs stack (each one PRs to the previous) so the bottom of the stack collapses into &lt;code&gt;main&lt;/code&gt; once a milestone is ready to ship.&lt;/p&gt;
&lt;p&gt;Issue numbers below link to upstream &lt;code&gt;gke-labs/in-cluster-observability&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="shipped"&gt;Shipped&lt;/h2&gt;
&lt;h3 id="v01-foundation--single-go-module-public-package-skeletons"&gt;v0.1 Foundation — single Go module, public-package skeletons&lt;/h3&gt;
&lt;p&gt;Issues &lt;a href="https://github.com/gke-labs/in-cluster-observability/milestone/1"&gt;#64–#69&lt;/a&gt;. Established the single AP root, the &lt;code&gt;pkg/{capture,store,query,sink,topology,controller,schema,obsapi}&lt;/code&gt; public API skeletons with stability tags, the OBI adapter shell, the distroless agent image, and the minimal DaemonSet manifest. Nothing observable yet — the binary stays alive on signals; that&amp;rsquo;s it.&lt;/p&gt;</description></item><item><title>Contributing</title><link>https://gke-labs.github.io/in-cluster-observability/docs/contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gke-labs.github.io/in-cluster-observability/docs/contributing/</guid><description>&lt;p&gt;The canonical contributor reference is &lt;a href="https://github.com/gke-labs/in-cluster-observability/blob/main/AGENTS.md"&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/a&gt; in the repo root — it covers conventions, build commands, layout, and the OBI integration boundary. This page is a short pointer.&lt;/p&gt;
&lt;h2 id="filing-issues"&gt;Filing issues&lt;/h2&gt;
&lt;p&gt;All issues and milestones live in upstream &lt;code&gt;gke-labs/in-cluster-observability&lt;/code&gt;. Even if you&amp;rsquo;re working on a fork, file issues against upstream — the fork&amp;rsquo;s issue tracker is intentionally empty. &lt;code&gt;gh repo set-default&lt;/code&gt; is configured in the upstream clone so &lt;code&gt;gh issue list&lt;/code&gt; / &lt;code&gt;gh issue create&lt;/code&gt; target upstream by default.&lt;/p&gt;</description></item></channel></rss>