<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9" -->

---
title: Faster, smaller checkpoints: the File Log receiver now...
description: The OpenTelemetry Collector's File Log receiver now writes checkpoints as protobuf instead of JSON, starting with Collector Contrib v0.164.0. On the authors'...
canonical: https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Faster, smaller checkpoints: the File Log receiver now uses protobuf | daily.dev
og:description: The OpenTelemetry Collector's File Log receiver now writes checkpoints as protobuf instead of JSON, starting with Collector Contrib v0.164.0. On the authors'...
og:url: https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9
og:image: https://api.daily.dev/og/posts/110sSrmM9.png
og:image:alt: Faster, smaller checkpoints: the File Log receiver now uses protobuf
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Faster, smaller checkpoints: the File Log receiver now uses protobuf

**[OpenTelemetry](https://daily.dev/sources/opentelemetry)** · 5 min read · 0 upvotes · 0 comments

## Summary

The OpenTelemetry Collector's File Log receiver now writes checkpoints as protobuf instead of JSON, starting with Collector Contrib v0.164.0. On the authors' benchmarks, saving a checkpoint is almost 5 times faster, loading is more than 5 times faster, and the checkpoint is about 35% smaller. At 1,000 tracked files, encoding drops from 15.38 ms to 3.21 ms and decoding from 28.18 ms to 5.01 ms. Protobuf makes about 10% to 13% more allocations per save, but total bytes allocated per save fall by half. Existing JSON checkpoints are read automatically and rewritten as protobuf on the next save, so no action is needed from users.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://opentelemetry.io/blog/2026/filelog-protobuf-checkpoints>

## Questions this post answers

### What changed in OpenTelemetry Collector Contrib v0.164.0 for the File Log receiver's checkpoint format?

Checkpoints are now always written as protobuf instead of JSON. This makes saving a checkpoint almost 5 times faster and loading one more than 5 times faster, while shrinking the checkpoint itself by about 35%. For a single tracked file, the checkpoint size drops from 1,818 bytes to 1,186 bytes. Existing JSON checkpoints still load fine and get rewritten as protobuf on the next save.

_Teams tuning Collector CPU and storage overhead can track OpenTelemetry release changes like this on daily.dev._

### Do I need to migrate my existing file_storage checkpoints after upgrading the OpenTelemetry Collector to use protobuf checkpoints?

No migration is needed. Existing JSON checkpoints are still read when the Collector starts, and they get rewritten as protobuf automatically on the next save, so the upgrade is transparent and read offsets are preserved. The polls_to_archive archive setting uses the same encoding and benefits from the same improvements.

_Anyone planning a Collector upgrade can check breaking-change and migration notes like these on daily.dev._

### How much CPU does JSON encoding of File Log receiver checkpoints cost compared to protobuf at scale?

With the default 200ms poll interval and 1,000 tracked files, JSON encoding consumes roughly 77 ms of CPU every second just for checkpoint writes. Switching to protobuf cuts that to about 16 ms per second. The gain comes from storing fingerprints as raw bytes and using numeric field tags instead of repeated text field names.

_Engineers debugging high Collector CPU usage on Kubernetes nodes can follow performance fixes like this on daily.dev._

## Similar posts on daily.dev

- [Ensuring reliable OpenTelemetry ingestion at scale](https://daily.dev/posts/ensuring-reliable-opentelemetry-ingestion-at-scale-r8929yipq) · ClickHouse · 3 upvotes · 0 comments
- [Filtering and reducing AI agent telemetry with the OpenTelemetry Collector](https://daily.dev/posts/filtering-and-reducing-ai-agent-telemetry-with-the-opentelemetry-collector-cnhecn7ui) · CNCF · 2 upvotes · 1 comments
- [Parsing JSON-structured Docker logs with the OpenTelemetry Collector](https://daily.dev/posts/parsing-json-structured-docker-logs-with-the-opentelemetry-collector-afi2se6ed) · 37signals Dev · 0 upvotes · 0 comments
- [Protobuf-ES just got a lot faster · Buf](https://daily.dev/posts/protobuf-es-just-got-a-lot-faster-buf-rcovndatq) · Buf Blog · 18 upvotes · 1 comments
- [Reducing Log Volume with the OpenTelemetry Log Deduplication Processor](https://daily.dev/posts/reducing-log-volume-with-the-opentelemetry-log-deduplication-processor-9dbx2ffqc) · OpenTelemetry · 1 upvotes · 0 comments

---

Tags: [#performance](https://daily.dev/tags/performance), [#backend](https://daily.dev/tags/backend), [#golang](https://daily.dev/tags/golang), [#observability](https://daily.dev/tags/observability), [#opentelemetry](https://daily.dev/tags/opentelemetry)

[View this post on daily.dev](https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Faster, smaller checkpoints: the File Log receiver now uses protobuf","url":"https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9"},"datePublished":"2026-10-28T18:44:38.796Z","dateModified":"2026-10-28T19:03:23.963Z","description":"The OpenTelemetry Collector's File Log receiver now writes checkpoints as protobuf instead of JSON, starting with Collector Contrib v0.164.0. On the authors'...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/98d24ffd1665dd1b58f33da16e02e5b6?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/98d24ffd1665dd1b58f33da16e02e5b6?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"OpenTelemetry","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"OpenTelemetry","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/058cf331ff204b6aa421b376d509f16e","url":"https://daily.dev/sources/opentelemetry"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,backend,golang,observability,opentelemetry","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"OpenTelemetry","item":"https://daily.dev/sources/opentelemetry"},{"@type":"ListItem","position":3,"name":"Faster, smaller checkpoints: the File Log receiver now uses protobuf"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/faster-smaller-checkpoints-the-file-log-receiver-now-uses-protobuf-110ssrmm9#faq","mainEntity":[{"@type":"Question","name":"What changed in OpenTelemetry Collector Contrib v0.164.0 for the File Log receiver's checkpoint format?","acceptedAnswer":{"@type":"Answer","text":"Checkpoints are now always written as protobuf instead of JSON. This makes saving a checkpoint almost 5 times faster and loading one more than 5 times faster, while shrinking the checkpoint itself by about 35%. For a single tracked file, the checkpoint size drops from 1,818 bytes to 1,186 bytes. Existing JSON checkpoints still load fine and get rewritten as protobuf on the next save. Teams tuning Collector CPU and storage overhead can track OpenTelemetry release changes like this on daily.dev."}},{"@type":"Question","name":"Do I need to migrate my existing file_storage checkpoints after upgrading the OpenTelemetry Collector to use protobuf checkpoints?","acceptedAnswer":{"@type":"Answer","text":"No migration is needed. Existing JSON checkpoints are still read when the Collector starts, and they get rewritten as protobuf automatically on the next save, so the upgrade is transparent and read offsets are preserved. The polls_to_archive archive setting uses the same encoding and benefits from the same improvements. Anyone planning a Collector upgrade can check breaking-change and migration notes like these on daily.dev."}},{"@type":"Question","name":"How much CPU does JSON encoding of File Log receiver checkpoints cost compared to protobuf at scale?","acceptedAnswer":{"@type":"Answer","text":"With the default 200ms poll interval and 1,000 tracked files, JSON encoding consumes roughly 77 ms of CPU every second just for checkpoint writes. Switching to protobuf cuts that to about 16 ms per second. The gain comes from storing fingerprints as raw bytes and using numeric field tags instead of repeated text field names. Engineers debugging high Collector CPU usage on Kubernetes nodes can follow performance fixes like this on daily.dev."}}]}
```

