DEV.co
Open-Source DevOps · go-graphite

go-carbon

go-carbon is a high-performance Graphite/Carbon server implementation written in Go, designed to ingest and persist time-series metrics from multiple sources (TCP, UDP, HTTP, Kafka). It replaces the default Python Carbon with a faster, more scalable alternative suitable for high-volume metric ingestion environments.

Source: GitHub — github.com/go-graphite/go-carbon
828
GitHub stars
116
Forks
Go
Primary language
MIT
License (OSI-approved)

Key facts

Objective fields from the source. Values we can't verify are shown as “Unknown” rather than guessed.

FieldValue
Repositorygo-graphite/go-carbon
Ownergo-graphite
Primary languageGo
LicenseMIT — OSI-approved
Stars828
Forks116
Open issues110
Latest releasev0.19.1 (2026-02-07)
Last updated2026-07-06
Sourcehttps://github.com/go-graphite/go-carbon

What go-carbon is

Go-based reimplementation of Graphite Carbon following Agent→Cache→Persister architecture. Supports plaintext, Pickle, HTTP, and Kafka protocols; multi-worker persistent storage; configurable retention schemas; optional GRPC interface; and hot-reload of configuration. Benchmarked at ~950k points/sec sustained with 1.2M peak on high-end hardware.

Quickstart

Get the go-carbon source

Clone the repository and explore it locally.

terminalbash
git clone https://github.com/go-graphite/go-carbon.gitcd go-carbon# follow the project's README for install & configuration

Need it deployed, integrated, or customized instead? DEV.co ships production installs.

Best use cases

High-volume metric ingestion at scale

Replaces default Carbon when processing 100k–1M+ metrics per minute. Demonstrates measurable performance gains in production environments with sustained load. Suitable for large infrastructure monitoring, cloud-native platforms, and centralized metrics collection.

Graphite-compatible drop-in replacement

Implements standard Carbon protocols and storage format (Whisper), allowing seamless migration from Python Carbon without rewriting collectors or dashboards. Supports hot config reload and gradual rollout.

Multi-source metric aggregation

Ingests metrics from TCP, UDP, HTTP, Kafka, and internal sources in a single daemon. Useful for heterogeneous environments where collectors emit via different protocols or for building metric gateways.

Implementation considerations

  • Data directory (Whisper) must be pre-configured; schema migrations are supported but require care. Plan storage capacity based on metric cardinality, retention policies, and performance targets.
  • Multi-worker sharding by metric name hash—tune `workers` config based on CPU cores and I/O; test under expected peak load before production rollout.
  • Memory footprint scales with cache size (`max-size` config, default 1M points); monitor in-memory cache behavior to prevent OOM in memory-constrained environments.
  • Requires explicit configuration of `storage-schemas.conf` and optional `storage-aggregation.conf` to match retention and rollup rules; misalignment with upstream collectors can lead to data loss or query misses.
  • Optional hot-reload (HUP signal) for schema changes; full restart needed for major config changes (ports, protocol options). Plan graceful shutdown to avoid metric loss during cache dump/restore.

When to avoid it — and what to weigh

  • Need modern time-series database features — go-carbon is a Carbon server focused on ingestion and Whisper persistence. Does not provide query optimization, downsampling policies, or compression comparable to modern time-series DBs (InfluxDB, Prometheus, VictoriaMetrics). Use if Graphite is your backend.
  • Require vendor support or SLA guarantees — Community-maintained open-source project with no commercial support contract. Escalations and incident response depend on community contributors. Not suitable for risk-averse enterprises without internal Go expertise.
  • Strict isolation or containerized deployment only — Designed for traditional daemon deployment (systemd, init.d). Whisper file-system locking and multi-worker coordination assume local or NFS storage. Kubernetes native storage patterns may require wrapper logic.
  • Unfamiliar with Graphite ecosystem — Requires understanding of storage-schemas.conf, aggregation rules, Whisper file format, and Graphite query semantics. Significant operational learning curve if migrating from other metric systems.

License & commercial use

MIT License. Permissive, OSI-approved, allows commercial use, modification, and distribution with minimal restrictions (attribution required, liability disclaimer applies).

MIT license permits commercial use without restrictions or licensing fees. No copyleft requirement; proprietary modifications and derivative works allowed. However, license does not include warranties or support. Verify your specific compliance requirements and consider maintenance/support strategy independently.

DEV.co evaluation signals

Editorial assessment — not user reviews. Directional, with an explicit confidence level.

SignalAssessment
MaintenanceActive
DocumentationAdequate
License clarityClear
Deployment complexityModerate
DEV.co fitGood
Assessment confidenceHigh
Security considerations

Listens on TCP/UDP ports (default 2003) and optional HTTP endpoint; network ACLs and firewall rules essential in untrusted networks. Accepts metrics from remote sources without authentication by default—restrict via network isolation or firewall. No built-in TLS/mTLS for plaintext/pickle protocols (requires reverse proxy if needed). File permissions on Whisper directory and config files should follow principle of least privilege. No mention of audit logging or compliance features; code is open-source and auditable.

Alternatives to consider

Python Carbon (graphite-carbon)

Original implementation; slower under high load but mature, widely deployed, and simpler resource footprint on low-spec hardware. Choose if you do not face scale constraints or prefer Python-based customization.

VictoriaMetrics

Modern high-performance time-series database with compression, clustering, and advanced query features. Better long-term scalability and query performance, but requires migration away from Whisper and Graphite ecosystem.

InfluxDB (OSS or Cloud)

Purpose-built time-series DB with powerful query language (InfluxQL, Flux) and clustering. Easier long-term scaling and multi-user isolation, but requires rewriting collectors and dashboards; not a Carbon replacement.

Software development agency

Build on go-carbon with DEV.co software developers

Evaluate go-carbon for your monitoring pipeline. Benchmark performance on your load profile, test schema migration, and integrate with existing Graphite dashboards. Contact us to discuss deployment and integration strategy.

Talk to DEV.co

Related open-source tools

Surfaced by semantic similarity across the DEV.co open-source index.

Related on DEV.co

Explore the category and the services that help you build with it.

go-carbon FAQ

Can I migrate from Python Carbon without downtime?
Yes, in principle: go-carbon uses the same Whisper file format and protocols. Start both in parallel (different ports or servers), back-fill history if needed, and switch metric sources. Hot-reload (HUP signal) allows schema updates without stopping the daemon. Test thoroughly on non-critical metrics first.
What is the recommended instance size and worker count?
README benchmarks show ~950k points/sec on 2xE5-2620v3 (12 cores), 128GB RAM, local SSDs. Tune `workers` config to match CPU cores (typically 4–16 for medium installations). Monitor memory (cache size), disk I/O (Whisper writes), and CPU (multi-threaded persister). Start conservative and load-test incrementally.
Is GRPC API stable and widely used?
GRPC is mentioned as an alternative to Carbonlink but is not the primary interface. Adoption level unclear from README; treat as secondary feature. Standard plaintext/pickle protocols are the proven path for integration with Graphite-web and collectors.
How do I handle metrics cardinality and bloom filters?
README mentions experimental bloom filter option (`bloom-size` config) for multi-million metric setups to reduce cache overhead. Trie+DFA indexing is an option for query optimization when migrating from trigram index. Requires careful tuning; test on test data before production deployment.

Work with a software development agency

From first prototype to production, DEV.co delivers software development services around tools like go-carbon. Our software development agency staffs experienced software developers and web developers for custom software development, web development, integrations, and ongoing support across open-source devops and beyond.

Ready to scale your Graphite metrics infrastructure?

Evaluate go-carbon for your monitoring pipeline. Benchmark performance on your load profile, test schema migration, and integrate with existing Graphite dashboards. Contact us to discuss deployment and integration strategy.