About this project
Argos is a declarative OpenTelemetry instrumentation library aimed at Go microservices, built around a stated zero-allocation discipline. The README frames it as an alternative to two other approaches in the Go ecosystem: there is no equivalent of Java's -javaagent bytecode instrumentation, and the "zero-code" option (eBPF) requires elevated privileges, a recent Linux kernel and covers only a limited set of libraries. Argos instead takes a low-code path: one initialization call at startup, followed by an explicit, drop-in wrapper for each client library actually in use, with no monkey-patching and no reflection on the hot path.
Setup and lifecycle
A single argos.Run call wires up Init, SIGINT/SIGTERM-triggered shutdown and Shutdown together, taking functional options such as WithServiceName. The README notes that a lower-level Init/Shutdown pair is available when more control is needed. Configuration can be supplied either through functional options or loaded from a YAML file. The root module exposes Trace/TraceFunc helpers, Resource, Propagation, Logger with global ambient logging, and an argostest package. By default traces and metrics export over OTLP to localhost:4317 and fail open, so requests keep working when no collector is running.
Integrations
Each vendor SDK wrapper lives in its own Go module with its own go.mod, so importing one does not pull in another's transitive dependencies. The documented coverage includes HTTP servers (net/http, chi, gin, echo, fiber, gorilla/mux), any http.RoundTripper as an HTTP client, any database/sql driver, GORM, go-redis v9, the MongoDB driver v2, gocql for Cassandra, Sarama for Kafka, amqp091-go for RabbitMQ, Azure Service Bus, GCP Pub/Sub v2, gRPC, pkg/sftp and net/smtp. Every module is said to ship real tests, a baseline-versus-instrumented benchmark, and to pass golangci-lint, gosec and govulncheck. A contribution template and decision tree are provided for libraries not yet covered. The root module deliberately has zero vendor SDK dependencies.
Samples and tooling
Eight runnable microservices are documented, each with its own docker-compose.yml and README. Six pair one router with a data or messaging stack (for example gin + GORM/PostgreSQL + Kafka, or fiber + Cassandra + SFTP); inventory-api and inventory-worker form a cooperating pair whose request produces a single trace spanning both processes. A cmd/doctor CLI scans a Go project's imports and suggests any matching Argos integration that is not yet wired up; -strict turns suggestions into a CI failure, and -init scaffolds a starter argos.config.yaml plus a main.go snippet. The repository is a Go workspace multi-module layout containing the core module, integrations, cmd/doctor, samples, examples, an mkdocs-material documentation site and a Docker setup with a Grafana LGTM and OTel Collector stack plus the backend systems used by the samples. Make targets cover build, test, bench, lint, formatting, security scanning and bringing the telemetry or backend stacks up and down.
Stability and stated limits
All modules are still v0.x, so the public API of any module may change between minor versions, though existing releases remain resolvable. Requirements and evidence are described with explicit caveats: Go 1.26 or later is required, with earlier versions unsupported. The opt-in capture and masking features are only partly hardened - capture.MaskSQL has been verified through sustained fuzz testing that found and fixed a real bug, while header and body capture on the HTTP client, HTTP server and gRPC integrations are covered by unit tests but have not had the same fuzzing pass. A one-hour soak test on the inventory-api/inventory-worker pair, exercising HTTP, gRPC, SQL, Redis, Kafka, MongoDB and Cassandra under mixed success and error traffic (~245k requests), showed no goroutine or memory growth, but this is presented as evidence for the integrations exercised, not a blanket guarantee - RabbitMQ, GCP Pub/Sub, Azure Service Bus, SFTP and SMTP have no dedicated soak test, and runs longer than an hour were not covered. Benchmarks are short-burst rather than sustained-load verification. The project is MIT licensed.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.