<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Faro on Nicole van der Hoeven</title><link>https://nicolevanderhoeven.com/tags/faro/</link><description>Recent content in Faro on Nicole van der Hoeven</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Nicole van der Hoeven</copyright><lastBuildDate>Wed, 05 Nov 2025 03:07:38 +0100</lastBuildDate><atom:link href="https://nicolevanderhoeven.com/tags/faro/index.xml" rel="self" type="application/rss+xml"/><item><title>Spice Runner</title><link>https://nicolevanderhoeven.com/projects/spice-runner/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://nicolevanderhoeven.com/projects/spice-runner/</guid><description>&lt;p&gt;&lt;strong&gt;Spice Runner&lt;/strong&gt; is a browser-based endless runner. Think of the &amp;ldquo;unable to connect&amp;rdquo; dinosaur game in Chrome, except you are a Fremen running across the sands of Arrakis, jumping sandworms and Harkonnen ornithopters. It&amp;rsquo;s the demo app for my talk &lt;a href="https://nicolevanderhoeven.com/blog/20251105-the-spice-must-flow/"&gt;&lt;em&gt;The Spice Must Flow: The Fremen Guide to Sustainable Observability&lt;/em&gt;&lt;/a&gt;, and it exists to make one point: even a simple, throwaway game generates a surprising amount of telemetry, and that telemetry has real financial and environmental costs.&lt;/p&gt;
&lt;p&gt;The Fremen live on a planet that is rich in spice and poor in water, and they thrive by wasting nothing. Our systems are rich in telemetry and poor in budget, and in carbon. Spice Runner is a small, playable version of that problem: a real app, with real players, running on real infrastructure that scales up and down with them while I watch what it costs.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nicolevanderhoeven.com/assets/projects/spice-runner-gameplay.gif" alt="Spice Runner gameplay: a Fremen runner jumps sandworms as an ornithopter flies overhead" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;h2 id="what-it-demonstrates"&gt;What it demonstrates&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Real user monitoring with &lt;a href="https://grafana.com/oss/faro/"&gt;Grafana Faro&lt;/a&gt;.&lt;/strong&gt; Game sessions, game starts, scores, collisions, restarts, and game overs are all sent as custom events, so the dashboard shows how people actually play.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A leaderboard that&amp;rsquo;s instrumented end to end.&lt;/strong&gt; A Go API backed by PostgreSQL and Redis serves a public top-10 leaderboard. It&amp;rsquo;s instrumented with OpenTelemetry for traces and custom metrics, so a score can be followed from the browser through the API to the database and the cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics, logs, and traces on Kubernetes.&lt;/strong&gt; Prometheus, Grafana Loki, and Grafana Tempo run in the cluster, with Grafana Alloy as the collector and Grafana for dashboards. Telemetry is also sent to Grafana Cloud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autoscaling that follows the players.&lt;/strong&gt; &lt;a href="https://keda.sh/"&gt;KEDA&lt;/a&gt; scales the game&amp;rsquo;s pods on HTTP request rate, CPU, and memory, and the GKE Cluster Autoscaler adds and removes nodes behind them. Production settings keep at least one pod running and cap it at 20, with a separate demo profile that is far more eager for live demonstrations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy monitoring with &lt;a href="https://sustainable-computing.io/"&gt;Kepler&lt;/a&gt;.&lt;/strong&gt; Power and energy use are tracked per workload, so &amp;ldquo;what does this cost the planet?&amp;rdquo; is a query rather than a guess.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Load testing with &lt;a href="https://k6.io"&gt;k6&lt;/a&gt;.&lt;/strong&gt; k6 drives load against the leaderboard API and, with a browser script, plays the game to keep the dashboard populated.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-dashboard"&gt;The dashboard&lt;/h2&gt;
&lt;p&gt;The live dashboard on Grafana Play shows real player data as it happens. The dashboard is also entirely AI-generated: it was built with &lt;a href="https://grafana.com/docs/grafana-cloud/machine-learning/assistant/"&gt;Grafana Assistant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://nicole.to/spicedashboard"&gt;Open the live dashboard&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
&lt;p&gt;The app has two layers. The first is the game and its leaderboard: a vanilla JavaScript game served by Nginx, with a Go leaderboard API backed by PostgreSQL and Redis. The second is the observability stack: Faro instruments the browser, and the Nginx exporter, Alloy, Loki, Tempo, and Prometheus cover the backend. Everything runs on Google Kubernetes Engine, with persistent volumes so telemetry survives pod restarts, and autoscalers at both the pod and node level.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nicolevanderhoeven.com/assets/projects/spice-runner-architecture.png" alt="Spice Runner architecture: the game and leaderboard, the observability stack, and the autoscalers" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;h2 id="the-talk"&gt;The talk&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;The Spice Must Flow&lt;/em&gt; uses Dune as its framing. It covers the hidden environmental and financial costs of an observability stack, how hard it is to measure the cost of ephemeral resources on Kubernetes, how to use KEDA to right-size resources when you don&amp;rsquo;t know what the right size is, and the most effective thing you can do to cut cost: deleting the telemetry you don&amp;rsquo;t need.&lt;/p&gt;
&lt;p&gt;I first gave it at &lt;a href="https://oredev.org/"&gt;Øredev 2025&lt;/a&gt; in Malmö, Sweden. You can read the &lt;a href="https://nicolevanderhoeven.com/blog/20251105-the-spice-must-flow/"&gt;write-up and abstract&lt;/a&gt; and see the &lt;a href="https://nicole.to/spiceslides"&gt;slides&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="run-it-yourself"&gt;Run it yourself&lt;/h2&gt;
&lt;p&gt;Everything you need to deploy it on your own GKE cluster, including the Kubernetes manifests, the dashboards, and the load tests, is in the &lt;a href="https://github.com/nicolevanderhoeven/spice-runner"&gt;GitHub repository&lt;/a&gt;. Its README has a quick start.&lt;/p&gt;</description></item><item><title>The Spice Must Flow: The Fremen Guide to Sustainable Observability (Øredev 2025)</title><link>https://nicolevanderhoeven.com/blog/20251105-the-spice-must-flow/</link><pubDate>Wed, 05 Nov 2025 03:07:38 +0100</pubDate><guid>https://nicolevanderhoeven.com/blog/20251105-the-spice-must-flow/</guid><description>&lt;p&gt;Today I gave a talk at &lt;a href="https://oredev.org/"&gt;Øredev 2025&lt;/a&gt; in Malmö, Sweden, titled +The Spice Must Flow: The Fremen Guide to Sustainable Observability&amp;quot;_. The presentation focused on how to implement sustainable observability practices using open-source tools like Grafana, Prometheus, Loki, Tempo, KEDA, and Kepler. Here&amp;rsquo;s the abstract:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nobody wants to be wasteful. But how do you balance that with the need for enough data to fix things when they go wrong? After all, no matter how much it costs, there are SLOs to keep. The spice&amp;ndash; the telemetry&amp;ndash; must flow.&lt;/p&gt;
&lt;p&gt;The Fremen are a people who live on the planet Arrakis, simultaneously rich in spice while poor in water. But the Fremen have managed to thrive, not just survive, on very little while continuing to produce spice. What would it take to apply this &amp;ldquo;desert planet thinking&amp;rdquo; to observability?&lt;/p&gt;
&lt;p&gt;In this talk, you&amp;rsquo;ll learn about the hidden environmental and financial costs of your observability stack and how to reduce them. You&amp;rsquo;ll learn about the complications of measuring cost for ephemeral resources on Kubernetes, how to use KEDA to &amp;ldquo;right-size&amp;rdquo; resources when you don&amp;rsquo;t know what the right size is, and how to convince your teams to drop all but the most meaningful telemetry data. In the end, the spice must flow, but there must still be enough water to sustain all.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here are some resources mentioned in the talk:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can play the game Spice Runner &lt;a href="https://nicole.to/spicegame"&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicole.to/spicerepo"&gt;The spice-runner repo&lt;/a&gt; containing everything you need to know about how to deploy it yourself&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicole.to/spiceslides"&gt;The slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicole.to/spicedashboard"&gt;The Spice Runner dashboard&lt;/a&gt; for observing the application&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolevanderhoeven.com/projects/spice-runner/"&gt;More about Spice Runner&lt;/a&gt;: architecture, tech stack, and what it demonstrates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://nicolevanderhoeven.com/assets/2025-11-05-oredev.JPG" alt="Photo of me at Øredev 2025" loading="lazy" decoding="async"&gt;
&lt;/p&gt;</description></item><item><title>Real User Monitoring With Grafana Faro (Grafana Office Hours #17)</title><link>https://nicolevanderhoeven.com/blog/20231027-goh17-real-user-monitoring-with-grafana-faro/</link><pubDate>Fri, 27 Oct 2023 07:00:19 +0200</pubDate><guid>https://nicolevanderhoeven.com/blog/20231027-goh17-real-user-monitoring-with-grafana-faro/</guid><description>&lt;p&gt;My friend &lt;a href="https://testingwithmarie.com"&gt;Marie Cruz&lt;/a&gt; and I chat with Software Engineers Kostas Pelelis and Marco Schaefer to discuss what Grafana Faro is, why it&amp;rsquo;s important to have a real user monitoring solution, and how to get started with it.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/lUYj28znIu8?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="useful-links"&gt;Useful links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://grafana.com/docs/grafana-cloud/monitor-applications/frontend-observability/"&gt;Frontend observability docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grafana/faro-web-sdk"&gt;Grafana Faro repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>