<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Telemetry Machine blog</title>
<link>https://telemetrymachine.com/blog</link>
<description>Posts from Telemetry Machine.</description>
<language>en-us</language>
<atom:link href="https://telemetrymachine.com/blog/rss.xml" rel="self" type="application/rss+xml"/>
<item>
<title>Thanks for Your Attention</title>
<link>https://telemetrymachine.com/blog/thanks-for-your-attention</link>
<guid isPermaLink="true">https://telemetrymachine.com/blog/thanks-for-your-attention</guid>
<pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate>
<dc:creator>Jack Popov</dc:creator>
<description>Getting a startup off the ground is hard. You know what else is hard? Getting passersby to give a shit about your guitar solo.</description>
<content:encoded>&lt;p&gt;Hello! Thanks for giving me some of your attention. This post is a little meta, because it&apos;s all about how you get someone&apos;s attention.&lt;/p&gt;
&lt;p&gt;Why do I want your attention? Because I just launched my observability startup, &lt;a href=&quot;https://telemetrymachine.com&quot;&gt;Telemetry Machine&lt;/a&gt;, and now I&apos;m trying to do the seemingly impossible: getting noticed in the age of AI slop.&lt;/p&gt;
&lt;p&gt;I want to talk about another place where you have to capture and hold attention despite tremendous competition: street performance (aka busking).&lt;/p&gt;
&lt;p&gt;Recently, I found myself captivated by a busker. What captivated me wasn&apos;t his tricks. It was how he got people to notice and stay.&lt;/p&gt;
&lt;p&gt;My kid and I were on our way to the Transport Museum in Covent Garden, which is famous for its street performances. I had never stopped for one, because I think of them as extremely touristy. We had already walked past a magician.&lt;/p&gt;
&lt;p&gt;But then we heard yelling. I almost thought something violent was happening. My kid seemed curious, so I asked if he wanted to check it out. We walked inside to a busker&apos;s pitch, a performing spot with three benches that has &lt;a href=&quot;https://web.archive.org/web/20260511090247/https://pnet.busk.co/forum/performers-library/the-library/rex-boyd/6579-street-performing-at-covent-garden-london&quot;&gt;apparently been there for decades&lt;/a&gt;. A small man in a funny hat, dressed almost like a leprechaun, was walking around and screaming at people. I didn&apos;t realize it yet, but that screaming was very purposeful: it had just brought us over.&lt;/p&gt;
&lt;p&gt;We started to walk past, noncommittal. But then he looked me straight in the face and screamed, &quot;STOP!&quot; Of course I stopped on a dime. What was I going to do? Ignore him? (I would be a great victim for hypnosis.)&lt;/p&gt;
&lt;p&gt;He was just getting started, with almost no one around him. This is the hardest part of the show: working up the initial audience.&lt;/p&gt;
&lt;p&gt;About five minutes in, he had maybe ten people watching. He said something like: &quot;Okay, I&apos;m going to do a trick for you guys, but I want you to make lots of noise and clap, because people will hear you, think I&apos;m really good and walk over. And if we get a big audience, I&apos;ll feed off your energy and give you a really amazing show.&quot; He walked us through how to clap and cheer, which itself made a huge amount of noise.&lt;/p&gt;
&lt;p&gt;Then he did the trick. It wasn&apos;t anything major, but it was obviously not something we could have done. He did a handstand on a bench and rolled forward into a hat. But he did this with lots of showmanship and noise. We clapped and cheered.&lt;/p&gt;
&lt;p&gt;He had basically enrolled us in building his audience. He could have simply said, &quot;Hey, I&apos;m about to do a trick, please clap.&quot; What he said instead was much more convincing. Why should we clap? Straight up, because if we clap, it will be loud and people will come over. And we did want the audience to be big, because if we&apos;re sitting there and nobody else is around, it&apos;s kind of boring.&lt;/p&gt;
&lt;p&gt;Getting the first few people to make noise, I found out later, is &lt;a href=&quot;https://www.theory11.com/forums/threads/drawing-a-crowd.32944&quot;&gt;a well-known tool of buskers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Then he built up his &quot;finale&quot;. I say &quot;finale&quot; in quotes because, really, it was his only significant trick. He talked about how dangerous it was and what would happen if he fell.&lt;/p&gt;
&lt;p&gt;Before he did it, he gave us what I later learned is called the &lt;a href=&quot;https://www.theory11.com/forums/threads/drawing-a-crowd.32944&quot;&gt;hat line&lt;/a&gt;, where he said this is my living, this is how I feed my family, please pay for it. He spoke about that for maybe five minutes. I wonder if there&apos;s psychology to this. Five minutes in, we hadn&apos;t left. So we were showing ourselves, and each other, that we&apos;d pay.&lt;/p&gt;
&lt;p&gt;Then came the finale: a handstand, really high up and precarious. Everybody clapped. We were impressed, I think partly because we had spent 30 minutes investing ourselves in it.&lt;/p&gt;
&lt;p&gt;As soon as it was over, a couple of people walked away, but it felt like almost everyone, 30-40 people by now, got up to pay. The next performer was already waiting, geared up and miked.&lt;/p&gt;
&lt;p&gt;Watching a master at their craft is particularly enjoyable. In this case, the craft wasn&apos;t acrobatics. It was crowd work: understanding how to capture and manage our attention.&lt;/p&gt;
&lt;p&gt;It also humbled me in my own quest to find my first customers. Buskers start from nothing every single performance.&lt;/p&gt;
&lt;p&gt;Now, I&apos;m not going to talk about what I can learn about sales from this, because that would go way over my threshold for LinkedIn cringe. But what we&apos;re doing is not so different from busking. We&apos;re giving people something we think they want or need, and asking for money in return. The hard part is getting attention in the first place.&lt;/p&gt;
&lt;p&gt;Right now, &lt;a href=&quot;https://telemetrymachine.com/&quot;&gt;Telemetry Machine&lt;/a&gt; is at the almost-no-audience stage. We&apos;re working with our first few potential customers. (Early customers, I&apos;ve learned, are absolute angels.)&lt;/p&gt;
&lt;p&gt;Will we ever become masters at this, like that busker? Well hey, why don&apos;t you sign up to our blog and find out?&lt;/p&gt;</content:encoded>
</item>
<item>
<title>The New State of the Art in Observability</title>
<link>https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability</link>
<guid isPermaLink="true">https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability</guid>
<pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
<dc:creator>Jack Popov</dc:creator>
<category>observability</category>
<category>separation of storage and compute</category>
<category>object storage</category>
<description>There is a new state of the art in observability. Separation of storage and compute allows for dramatically lower prices with reasonable tradeoffs in performance.</description>
<content:encoded>&lt;p&gt;Observability databases have undergone a revolution in the past five years. I don&apos;t think most people have noticed this. I noticed, of course, because I&apos;ve been working in observability for years and saw these lessons slowly creep in. Now I see it everywhere.&lt;/p&gt;
&lt;p&gt;In short, a new state of the art has formed in observability.&lt;/p&gt;
&lt;p&gt;In this post, I&apos;ll take you from a traditional observability architecture – Prometheus – and show you how a modern observability system is profoundly different.&lt;/p&gt;
&lt;p&gt;This architecture is now widely used. It&apos;s used by ClickHouse (SharedMergeTree), Honeycomb, Datadog (Husky), Axiom (EventDB), InfluxDB (IOx), Loki, Elastic Serverless, and of course here at Telemetry Machine.&lt;/p&gt;
&lt;p&gt;I&apos;ll spoil it all now: the big secrets are object storage (like S3) and separation of storage and compute (unlinking your database processes from their disks). Everything else is details. And the details are very juicy.&lt;/p&gt;
&lt;p&gt;We applied all these lessons when making Telemetry Machine. For us, the goal was to make it as cheap as possible. If you&apos;re curious why we believe that observability wants to be cheap, &lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive&quot;&gt;read our big manifesto&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, what changed? Let&apos;s start with the grand old lady of observability, Prometheus.&lt;/p&gt;
&lt;h2 id=&quot;lets-start-with-a-disk&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#lets-start-with-a-disk&quot;&gt;Let&apos;s start with a disk&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The simplest way I know to picture a traditional observability database is a standalone Prometheus server.&lt;/p&gt;
&lt;p&gt;Data comes in. Prometheus writes it to a disk attached to the server. When you make a query, the same server reads that disk and answers you.&lt;/p&gt;
&lt;p&gt;The stateful storage processes are tied to particular disks. Once a machine is no longer enough, you must expand or repartition the data.&lt;/p&gt;
&lt;p&gt;Now, imagine if you suddenly get a giant spike in traffic. This is commonplace in observability. For example, if a large consumer app releases a bug, the amount you are ingesting could suddenly multiply dramatically.&lt;/p&gt;
&lt;p&gt;If you&apos;re lucky, you may be able to vertically scale the VM or pod. But horizontal scaling is difficult, because the processes are tied to the disks, and you will likely need to physically move data (e.g. if adding a new shard).&lt;/p&gt;
&lt;p&gt;And, of course, when the spike dies down, you have to undo that work.&lt;/p&gt;
&lt;p&gt;What can we do?&lt;/p&gt;
&lt;h2 id=&quot;the-answer-is-separation-of-storage-and-compute&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#the-answer-is-separation-of-storage-and-compute&quot;&gt;The answer is separation of storage and compute&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What if the data did not belong to any server or process?&lt;/p&gt;
&lt;p&gt;That is, your processes that write and read the data have no actual ownership to the data.&lt;/p&gt;
&lt;p&gt;The common way to accomplish this is via object storage like S3. The place your observability data permanently lives is no longer a disk tied to your database processes.&lt;/p&gt;
&lt;p&gt;What does that buy us?&lt;/p&gt;
&lt;p&gt;First, storage capacity is no longer tied to your servers. If you want more storage, you do not need to change disks or migrate anything.&lt;/p&gt;
&lt;p&gt;Second, you get horizontal scaling. If you need to suddenly scale up your ingestion a lot, you can do so easily, because they are now stateless.&lt;/p&gt;
&lt;p&gt;Third, you get cost savings. Traditionally, observability databases use SSDs so they can be fast. That&apos;s very expensive. Object storage is dramatically cheaper.&lt;/p&gt;
&lt;p&gt;But, so far we have merely said &quot;separate storage and compute&quot;. What does it actually concretely look like?&lt;/p&gt;
&lt;h2 id=&quot;lets-make-the-architecture-concrete&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#lets-make-the-architecture-concrete&quot;&gt;Let&apos;s make the architecture concrete&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fundamentally, an observability database has three jobs.&lt;/p&gt;
&lt;p&gt;It takes in data (ingestion). It answers questions about that data (querying). It maintains the data.&lt;/p&gt;
&lt;p&gt;The modern architecture gives those jobs to different pools of processes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Writers&lt;/strong&gt; read from a durable write-ahead log (at Telemetry Machine, we just use Kafka. We throw data into Kafka as early as possible). They collect records in batches, turn the batches into queryable files, and upload them to object storage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Query workers&lt;/strong&gt; find the objects relevant to a query, read the necessary objects in parallel, and combine the results. We use DataFusion.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintainers&lt;/strong&gt; tidy up the data: they merge small files (more on that later), delete old data, prepare indexes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is what it looks like at Telemetry Machine:&lt;/p&gt;
&lt;pre class=&quot;shiki shiki-themes everforest-light everforest-dark&quot; style=&quot;background-color:#fdf6e3;--shiki-dark-bg:#2d353b;color:#5c6a72;--shiki-dark:#d3c6aa&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;OTel exporters&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;API processes ──► Kafka ──► writers ── upload Parquet ──► object storage (R2)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                              │                               │          ▲&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;               register files │                    read files │          │ merge files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                              ▼                               ▼          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                           catalog ── visible file set ──► query workers │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                              ▲                          (DataFusion)    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                              │                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                              └──────── update catalog ──── maintainers ─┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We call it EventLake. Lake is the important word. Under the hood, it&apos;s all a data lake, but tuned for the constraints and non-constraints of observability data.&lt;/p&gt;
&lt;h2 id=&quot;what-do-we-put-in-object-storage&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#what-do-we-put-in-object-storage&quot;&gt;What do we put in object storage?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&apos;s focus on the data itself. For observability (and all analytical data, really), columnar storage is the ace up our sleeve. Because observability data is extremely repetitive (e.g. repeating the same log statement over and over), it compresses extremely well.&lt;/p&gt;
&lt;p&gt;Columnar storage can be used for both old and new-style observability architecture, so we don&apos;t go deep on it here. For the best explanation of columnar storage, see Martin Kleppmann&apos;s &lt;a href=&quot;https://dataintensive.net&quot;&gt;&lt;em&gt;Designing Data-Intensive Applications&lt;/em&gt;&lt;/a&gt;. For a public blog post, see &lt;a href=&quot;https://motherduck.com/learn/columnar-storage-guide/&quot;&gt;this explanation from MotherDuck&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What is important in our context is how we treat this columnar data: when a writer process writes a batch, it creates one file&lt;sup&gt;&lt;a href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#user-content-fn-writer-output-files&quot; id=&quot;user-content-fnref-writer-output-files&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;em&gt;and that file is immutable&lt;/em&gt;. This immutability is what enables concurrent writes and reads by stateless processes, because they never need to coordinate an in-place update to a file.&lt;/p&gt;
&lt;p&gt;A common format for such files is Parquet (used by us and InfluxDB, for example), but databases often write their own formats. Parquet is a great fit for object storage, since each file is internally self-describing and queryable by itself. For example, a Parquet file already has the metadata necessary for predicate and projection pushdown (i.e. queries only need to read the actual bytes relevant to the query, meaning we don&apos;t need to read the entire file). This is particularly useful when these files are stored in object storage, as object storage calls are slow.&lt;/p&gt;
&lt;p&gt;This is where the &quot;non-constraints&quot; of observability come in handy. Log files, traces, metrics, etc very rarely need to be mutated (only if you, e.g. want to rename an OTel attribute or if a type changes). The trade-off of immutable files is that if you &lt;em&gt;do&lt;/em&gt; need to mutate them, you need a lot of extra machinery, but this machinery is only rarely invoked for observability data.&lt;/p&gt;
&lt;h2 id=&quot;how-does-the-database-know-which-files-exist&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#how-does-the-database-know-which-files-exist&quot;&gt;How does the database know which files exist?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We now have a pile of immutable objects in S3. How does a query know which ones belong to the database?&lt;/p&gt;
&lt;p&gt;A good analogy is a filesystem like ext4. A filesystem is not merely the contents of your files. Every filesystem also has a little embedded database for tracking said files.&lt;/p&gt;
&lt;p&gt;Similarly, for observability data, we use a catalog.&lt;/p&gt;
&lt;p&gt;For example, here&apos;s some of what we store in the catalog for each Parquet file.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metadata&lt;/th&gt;&lt;th&gt;What it lets us do&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;R2 URI&lt;/td&gt;&lt;td&gt;Find the file in object storage.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Min/max timestamp&lt;/td&gt;&lt;td&gt;Skip files outside a query&apos;s time range.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Column min/max&lt;/td&gt;&lt;td&gt;Skip row groups that cannot match a query.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Partition&lt;/td&gt;&lt;td&gt;Narrow the query to the relevant part of the dataset.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;There is one aspect of the catalog which is crucially important, and core to what makes this architecture work: consistency is isolated to metadata. The consistency of the Parquet object is not important. The catalog decides which of those objects is actually visible to queries. For example, if a write must be retried, and an object is uploaded twice, there is no double-counting in a query as the catalog records the file only once.&lt;/p&gt;
&lt;p&gt;In our case, the catalog is simply Postgres.&lt;/p&gt;
&lt;h2 id=&quot;the-small-files-problem&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#the-small-files-problem&quot;&gt;The small files problem&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Of course, it&apos;s not all fun and games. One of the major bugbears that must be dealt with in this architecture is the &lt;em&gt;small file problem&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Remember, every time a writer reads a batch from the WAL, it uploads a file to object storage. Reasonably, this happens every few minutes. Given that you will run many writers (e.g. sharded across customer datasets), this means thousands of files per minute are created.&lt;/p&gt;
&lt;p&gt;You can&apos;t let these files build up. For example, each file is a row in your strongly consistent database, which is expensive. It also means queries are slower.&lt;/p&gt;
&lt;p&gt;The maintenance job that fixes this is compaction. Essentially, a maintainer reads in multiple files, merges the data, and writes out one big file. This is where the consistency of the catalog is crucial: to avoid double-counting data in queries, the old files must be retired and the new file activated atomically.&lt;/p&gt;
&lt;p&gt;Naturally, each maintainer is stateless, letting it be scaled independently of ingestion and query processes.&lt;/p&gt;
&lt;h2 id=&quot;object-storage-is-slow&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#object-storage-is-slow&quot;&gt;Object storage is slow&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you have used Thanos, you would have noticed that queries against Thanos (which go out to object storage) are much slower than regular Prometheus queries. The fact is, object storage means data is served over the network – even over the internet – and is much slower than local SSDs. This is one of the major trade-offs of the new architecture.&lt;/p&gt;
&lt;p&gt;Thankfully, there are ways to alleviate the slowness.&lt;/p&gt;
&lt;p&gt;First of all, both &lt;a href=&quot;https://developers.cloudflare.com/r2/api/workers/workers-api-reference/#ranged-reads&quot;&gt;R2&lt;/a&gt; and &lt;a href=&quot;https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html&quot;&gt;S3&lt;/a&gt; support ranged reads. This means you can download only the parts of a file that actually serve the query.&lt;/p&gt;
&lt;p&gt;Second, requests to an object store can be parallelized. Parquet stores row groups and column chunks at known byte offsets, so workers can fetch the required ranges concurrently. If you think about it, whereas a traditional database might be limited by its local disk, object storage makes the network your main limit. This means that for a very large query, if your network interface is not saturated, you may be leaving performance on the floor.&lt;/p&gt;
&lt;p&gt;Third, you can make use of two non-constraints: one, data that was recently accessed is more likely to be accessed again. This means that once you download data from the object store, you can cache it on a local disk. This is a trade-off you can make of performance vs cost. (You may think of it a little bit like the Linux page cache, but instead of caching disk data in memory, you are caching network data on disk. In fact, internally we use something like the Linux LRU algorithm.) Second, in observability recent data is much more valuable than older data. This means that recent data can be prefetched. Again, this lets us trade off cost versus performance.&lt;/p&gt;
&lt;p&gt;Object storage is not magic; it has trade-offs. That said, the dramatic cost difference between it and the disks usually recommended for observability&lt;sup&gt;&lt;a href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#user-content-fn-clickhouse-disks&quot; id=&quot;user-content-fnref-clickhouse-disks&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; makes dealing with the trade-offs worth it.&lt;/p&gt;
&lt;h2 id=&quot;putting-it-together&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#putting-it-together&quot;&gt;Putting it together&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&apos;s recap the old versus the new architecture.&lt;/p&gt;
&lt;p&gt;In the old world, the ingestion and query processes of a database ran on the same server, tied inextricably to the same disk. They were difficult to scale, it was difficult to deal with low disk space, and the architecture required expensive disks.&lt;/p&gt;
&lt;p&gt;In the state of the art, ingestion and query processes are stateless and independent from each other. They are similarly independent from the data, which is stored on remote disks, usually in object storage.&lt;/p&gt;
&lt;p&gt;There are trade-offs, mostly related to performance, but these can be largely alleviated. The cost gains are significant, and worth it.&lt;/p&gt;
&lt;h2 id=&quot;ps-use-telemetry-machine&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#ps-use-telemetry-machine&quot;&gt;P.S. Use Telemetry Machine&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Observability is expensive, and the cost to run the infrastructure is only one piece of it. This architecture helps dramatically, but it&apos;s not enough. We believe that observability is crucially important, and for that it must be widely adopted. One of the major blocks to wider use of observability is that it&apos;s too damn expensive. So, we made it cheap. Feel free to check us out at &lt;a href=&quot;https://telemetrymachine.com/&quot;&gt;telemetrymachine.com&lt;/a&gt; or &lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive&quot;&gt;read why we believe observability doesn&apos;t have to be expensive&lt;/a&gt;.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-writer-output-files&quot;&gt;
&lt;p&gt;A writer may produce several files from one batch. This does not change the architecture: every output file is immutable. &lt;a href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#user-content-fnref-writer-output-files&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-clickhouse-disks&quot;&gt;
&lt;p&gt;ClickHouse&apos;s self-hosted hardware guide says that for maximum performance it recommends “directly attaching provisioned IOPS SSD volumes from AWS.” See &lt;a href=&quot;https://clickhouse.com/docs/guides/oss/best-practices/sizing-and-hardware-recommendations&quot;&gt;&lt;em&gt;Sizing and hardware recommendations&lt;/em&gt;&lt;/a&gt;. &lt;a href=&quot;https://telemetrymachine.com/blog/the-new-state-of-the-art-in-observability#user-content-fnref-clickhouse-disks&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded>
</item>
<item>
<title>Observability Doesn&apos;t Have to Be Expensive</title>
<link>https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive</link>
<guid isPermaLink="true">https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive</guid>
<pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
<dc:creator>Jack Popov</dc:creator>
<description>Observability is treated like an essential engineering practice, but priced like enterprise software. It does not have to be.</description>
<content:encoded>&lt;p&gt;As software engineers, we learn many best practices. A few of these are non-negotiable: software that follows these practices is strictly better than software that doesn&apos;t. For example, version control, unit testing, and observability.&lt;/p&gt;
&lt;p&gt;Without version control, collaboration is impossible; without unit testing, software is buggy. Without observability, we can&apos;t tell if our users are hitting errors or slowness, or whether our service is completely down.&lt;/p&gt;
&lt;p&gt;Unfortunately, there&apos;s one big difference between observability and the other best practices: it&apos;s orders of magnitude more expensive. Thus, it&apos;s not nearly as widely adopted. Many projects avoid observability entirely. Even if a team does use it, they often operate in a failure mode: aggressive sampling, short retention, or turning off features.&lt;/p&gt;
&lt;p&gt;Why is it so expensive? Some vendors claim that it&apos;s because modern software is too complex, while others say it&apos;s because observability itself is expensive to operate. This paints an extremely incomplete picture.&lt;/p&gt;
&lt;p&gt;The truth is, almost every observability company is tuned to serve the biggest companies. This is only rational: it is widely assumed that big customers are the best customers. But serving big customers changes you. You hire salespeople, account managers, and many (many) engineers to win big accounts and squeeze as much revenue from them as possible. Inevitably, high prices follow.&lt;/p&gt;
&lt;p&gt;It doesn&apos;t have to be that way. There are thousands of serious engineering teams that need observability but not the big company sales dance. A business built to serve them is fundamentally different from existing observability companies: lean, efficient, and far less expensive to operate. There is no need to charge extraordinary prices to build a sustainable observability company.&lt;/p&gt;
&lt;p&gt;Every service, every Kubernetes cluster, every server should be observable. We&apos;ve been told that&apos;s too expensive. It doesn&apos;t have to be.&lt;/p&gt;
&lt;h2 id=&quot;why-observability-loves-big-customers&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#why-observability-loves-big-customers&quot;&gt;Why observability loves big customers&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Observability companies skew towards big customers for the same reason all B2B businesses do.&lt;/p&gt;
&lt;p&gt;It is no secret that most software companies optimize for revenue growth. This is especially true if they take investment.&lt;/p&gt;
&lt;p&gt;When you optimize for revenue growth, it&apos;s frequently advised to seek big customers. To name just a few reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A big customer can bring as much revenue as 100 smaller ones, but is not 100x more difficult to win.&lt;/li&gt;
&lt;li&gt;They have lower churn, e.g., because they are less likely to fail.&lt;/li&gt;
&lt;li&gt;They have more opportunity for account expansion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consider Datadog. When they filed their S-1 to go public, customers spending more than $100k a year already represented 48% of ARR. By 2025, that had grown to 90%.&lt;sup&gt;&lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#user-content-fn-datadog-2025-10k&quot; id=&quot;user-content-fnref-datadog-2025-10k&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Clearly, the money is in big customers.&lt;/p&gt;
&lt;h2 id=&quot;serving-big-companies-changes-you&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#serving-big-companies-changes-you&quot;&gt;Serving big companies changes you&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It&apos;s not enough to simply want big companies. You have to shape your company around them.&lt;/p&gt;
&lt;p&gt;To win big customers, you need salespeople. If someone is going to commit $100k a year, they want to talk to you. They want a contract. They want to know you can handle security review, compliance, support. They want to know you will cater to their needs.&lt;/p&gt;
&lt;p&gt;Since each large customer represents a meaningful chunk of revenue, losing one hurts. You need account managers and customer success staff, too.&lt;/p&gt;
&lt;p&gt;This means building out a large sales and marketing organization. In 2019, 39% of Datadog&apos;s employees were in sales and marketing, slightly more than in R&amp;#x26;D.&lt;sup&gt;&lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#user-content-fn-datadog-s1&quot; id=&quot;user-content-fnref-datadog-s1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That isn&apos;t all. Once a company is oriented around large customers, it is not enough to win those customers. Each account must be expanded. This is especially important if you need to grow fast and/or have investors.&lt;/p&gt;
&lt;p&gt;A great way to grow a customer is to build more features and charge for them. Because the customer is big, they likely have a need for those features, and they likely have the money to spend.&lt;/p&gt;
&lt;p&gt;This again takes a lot of people. In 2019, Datadog had 462 R&amp;#x26;D employees.&lt;sup&gt;&lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#user-content-fn-datadog-s1&quot; id=&quot;user-content-fnref-datadog-s1-2&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Of course, those engineers do a lot more than build enterprise features. But once a company is built around large accounts, the roadmap bends towards serving them. The core product inevitably suffers.&lt;/p&gt;
&lt;p&gt;This is the standard B2B SaaS playbook. And it worked: Datadog&apos;s market cap of tens of billions of dollars is eye-watering. The observability market supports many other successful companies, seemingly all of them targeting the biggest customers.&lt;/p&gt;
&lt;p&gt;Unfortunately, that leaves most of the market rationing telemetry, under-instrumenting, or priced out entirely.&lt;/p&gt;
&lt;h2 id=&quot;an-observability-company-for-the-rest-of-us&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#an-observability-company-for-the-rest-of-us&quot;&gt;An observability company for the rest of us&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What does a company built to serve the rest of us look like?&lt;/p&gt;
&lt;p&gt;First of all, it is lean. As we have seen, large teams lead to large costs.&lt;/p&gt;
&lt;p&gt;Second, it is efficient. Find ways to get infrastructure costs down.&lt;/p&gt;
&lt;p&gt;Third, it is focused. Nail the core observability features we all need.&lt;/p&gt;
&lt;p&gt;Finally, shape it around self-serve customers. Make pricing transparent. Write great documentation. Let people buy without excruciating sales calls.&lt;/p&gt;
&lt;p&gt;Such a company can solve the core promise of observability without being sucked down the enterprise pricing gravity well.&lt;/p&gt;
&lt;h2 id=&quot;observability-should-be-a-no-brainer&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#observability-should-be-a-no-brainer&quot;&gt;Observability should be a no-brainer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With all the discussion of observability&apos;s high price, something gets forgotten: observability is great.&lt;/p&gt;
&lt;p&gt;Who doesn&apos;t want to sleep well at night knowing their service is healthy?&lt;/p&gt;
&lt;p&gt;All software benefits from observability, and we all benefit when software runs well. We should want observability to be widely adopted.&lt;/p&gt;
&lt;p&gt;We&apos;ve been told that&apos;s too expensive.&lt;/p&gt;
&lt;p&gt;It doesn&apos;t have to be.&lt;/p&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-datadog-2025-10k&quot;&gt;
&lt;p&gt;Datadog, Inc., &lt;a href=&quot;https://www.sec.gov/Archives/edgar/data/1561550/000162828026008819/ddog-20251231.htm&quot;&gt;2025 Form 10-K&lt;/a&gt;. Used for the 2025 customer count and ARR concentration. &lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#user-content-fnref-datadog-2025-10k&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-datadog-s1&quot;&gt;
&lt;p&gt;Datadog, Inc., &lt;a href=&quot;https://www.sec.gov/Archives/edgar/data/1561550/000119312519240411/d745413ds1a.htm&quot;&gt;Form S-1/A filed September 9, 2019&lt;/a&gt;. Used for the 2019 customer count, ARR concentration, S&amp;#x26;M/R&amp;#x26;D headcount, and quoted expansion strategy. &lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#user-content-fnref-datadog-s1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt; &lt;a href=&quot;https://telemetrymachine.com/blog/observability-doesnt-have-to-be-expensive#user-content-fnref-datadog-s1-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2-2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded>
</item>
</channel>
</rss>
