Об этом проекте

Argos — это декларативная библиотека инструментирования OpenTelemetry, ориентированная на микросервисы Go, построенная вокруг заявленного принципа нулевого распределения памяти. В README она позиционируется как альтернатива двум другим подходам в экосистеме Go: нет эквивалента Java -javaagent для байткод-инструментирования, а вариант «zero-code» (eBPF) требует повышенных привилегий, недавнего ядра Linux и охватывает лишь ограниченный набор библиотек. Argos же выбирает низкокодовый путь: один вызов инициализации при старте, за которым следует явная, готовая обёртка для каждой фактически используемой клиентской библиотеки, без monkey‑patching и без использования reflection в горячем пути. Настройка и жизненный цикл Один вызов argos.Run объединяет Init, завершение работы, инициированное сигналами SIGINT/SIGTERM, и Shutdown, принимая функциональные опции типа WithServiceName. В README отмечается, что доступна более низкоуровневая пара Init/Shutdown, когда требуется больший контроль. Конфигурация может быть передана через функциональные опции или загружена из YAML‑файла. Корневой модуль предоставляет помощники Trace/TraceFunc, Resource, Propagation, Logger с глобальным фоновым логированием и пакет argostest. По умолчанию трассировки и метрики экспортируются через OTLP на localhost:4317 с политикой fail‑open, поэтому запросы продолжают работать даже если коллектор недоступен. Интеграции Обёртка каждого vendor SDK находится в собственном Go‑модуле с собственным go.mod, поэтому импорт одного не тянет за собой транзитивные зависимости другого. Документированное покрытие включает HTTP‑серверы (net/http, chi, gin, echo, fiber, gorilla/mux), любой http.RoundTripper в качестве HTTP‑клиента, любой драйвер database/sql, GORM, go‑redis v9, драйвер MongoDB v2, gocql для Cassandra, Sarama для Kafka, amqp091-go для RabbitMQ, Azure Service Bus, GCP Pub/Sub v2, gRPC, pkg/sftp и net/smtp. Каждый модуль, как заявлено, поставляется с реальными тестами, бенчмарком baseline‑versus‑instrumented и проходит проверки golangci‑lint, gosec и govulncheck. Для библиотек, пока не покрытых, предоставлен шаблон вклада и дерево решений. Корневой модуль намеренно не имеет зависимостей от vendor SDK. Примеры и инструментарий Документировано восемь запускаемых микросервисов, каждый со своим docker‑compose.yml и README. Шесть из них комбинируют один роутер с хранилищем или системой обмена сообщениями (например, gin + GORM/PostgreSQL + Kafka или fiber + Cassandra + SFTP); сервисы inventory‑api и inventory‑worker образуют cooperating pair, запрос к которому генерирует единый трассировочный граф, охватывающий оба процесса. CLI‑утилита cmd/doctor сканирует импорты Go‑проекта и предлагает любые соответствующие интеграции Argos, ещё не подключённые; флаг -strict превращает предложения в ошибку CI, а -init генерирует starter‑файл argos.config.yaml и фрагмент main.go. Репозиторий представляет собой multi‑module workspace Go, содержащий ядро, интеграции, cmd/doctor, samples, examples, сайт документации на mkdocs‑material, а также Docker‑окружение со стек‑ом Grafana LGTM и OTel Collector, плюс бэкенд‑системы, используемые в примерах. Цели Make охватывают сборку, тесты, бенчмарки, линтинг, форматирование, сканирование безопасности и подъём/спуск стеков телеметрии или бэкенда. Стабильность и заявленные ограничения Все модули всё ещё находятся в версии v0.x, поэтому публичный API любого модуля может меняться между минорными релизами, хотя уже опубликованные релизы остаются разрешимыми. Требования и доказательства описаны с явными оговорками: требуется Go 1.26 или новее, более ранние версии не поддерживаются. Опциональные функции захвата и маскирования лишь частично укреплены — capture.MaskSQL прошёл длительное фаззинг‑тестирование, в ходе которого был обнаружен и исправлен реальный баг, тогда как захват заголовков и тела для HTTP‑клиента, HTTP‑сервера и gRPC‑интеграций покрыт юнит‑тестами, но не проходил такого же фаззинга. Часовой тест нагрузки (soak test) для пары inventory‑api/inventory‑worker, задействовавший HTTP, gRPC, SQL, Redis, Kafka, MongoDB и Cassandra при смешанном трафике успехов и ошибок (~245 k запросов), не показал роста горутин или потребления памяти, однако это представлено как доказательство для протестированных интеграций, а не как всеобщая гарантия — для RabbitMQ, GCP Pub/Sub, Azure Service Bus, SFTP и SMTP отдельного soak‑теста нет, а запуски дольше часа не рассматривались. Бенчмарки представляют короткие всплески нагрузки, а не длительную проверку. Проект распространяется под лицензией MIT.