Zipkin
Тема дорожной карты · Observability
Zipkin — открытая система распределённой трассировки, изначально разработанная в Twitter и предназначенная для сбора данных о времени выполнения, необходимых для поиска и устранения проблем с задержкой в распределённых системах. Zipkin следует модели трассировки, вдохновлённой Dapper: приложения отправляют спаны в коллектор Zipkin через HTTP POST на /api/v2/spans, а UI Zipkin позволяет искать трассировки по сервису, операции и длительности. Хотя OpenTelemetry стал предпочтительным стандартом инструментирования, Zipkin по-прежнему широко используется, поскольку otel-collector может экспортировать трассировки в формате Zipkin с помощью экспортера zipkin, что упрощает интеграцию с существующей инфраструктурой наблюдаемости на базе Zipkin. Zipkin поддерживает несколько бэкендов хранения, включая в памяти (для тестирования), MySQL, Cassandra и Elasticsearch, настраиваемых через zipkin.yml или переменные окружения. Формат распространения Zipkin B3 (X-B3-TraceId, X-B3-SpanId) по-прежнему встречается в старых микросервисах и поддерживается наряду с современным заголовком W3C traceparent.
Как это работает
Zipkin захватывает пути запросов через сервисы. Trace = дерево spans; у каждого span — имя, длительность, атрибуты, parent span. Trace context (traceparent-заголовок по W3C) пробрасывается между сервисами — spans из разных сервисов соединяются в один trace. Storage: Jaeger, Tempo (Grafana-стек, масштабируется через object storage), Zipkin, SigNoz. Sampling at the head (решение per-request) или tail (решение после полного trace).
Когда применять
Tracing — когда сервисов > 2 или нужно дебажить latency. OpenTelemetry SDK + auto-instrumentation для популярных фреймворков (Spring, FastAPI, Express, Gin). Sampling 1-10% в production (head sampling); поднимайте до 100% на короткие debug-сессии. Tempo — если уже на Grafana-стеке; иначе Jaeger / SigNoz оба нормальны.
Типичные ошибки
Ловушки Zipkin: 100% sampling на высоком трафике (storage взрывается + perf-хит); сломанная context propagation (HTTP middleware, стрипающий W3C traceparent — каждый вызов = новый trace); spans без релевантного контекста (service, version, user-segment) — traces сложно фильтровать.