[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-mikroservisy-kak-organizovat-raspredelyonnuyu-trassirovku-v-mikroservisakh":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},902,"kak-organizovat-raspredelyonnuyu-trassirovku-v-mikroservisakh",23,"mikroservisy","Микросервисы","🔗","Как организовать распределённую трассировку в микросервисах?","Distributed Tracing (распределённая трассировка) — это метод отслеживания прохождения запроса через цепочку микросервисов, позволяющий понять, какие сервисы были вызваны, сколько времени занял каждый вызов и где произошла ошибка.\n\n### Основные понятия\n\n- Trace — полный путь запроса через все сервисы (от входа до ответа).\n- Span — одна операция в рамках trace (например, вызов одного сервиса или запрос к БД).\n- Trace ID — уникальный идентификатор всего запроса (передаётся между сервисами).\n- Span ID — идентификатор конкретной операции.\n- Parent Span ID — ссылка на родительский span (для построения дерева вызовов).\n\n```\nTrace ID: abc123\n├── Span 1: API Gateway (50ms)\n│   ├── Span 2: Payment Service (30ms)\n│   │   ├── Span 3: DB Query (5ms)\n│   │   └── Span 4: Customer Service call (20ms)\n│   │       └── Span 5: DB Query (3ms)\n│   └── Span 6: Notification Service (10ms)\n```\n\n\u003Cdetails>\u003Csummary>Micrometer Tracing + Zipkin (Spring Boot 3+)\u003C\u002Fsummary>\n\n```xml\n\u003C!-- pom.xml -->\n\u003Cdependency>\n    \u003CgroupId>io.micrometer\u003C\u002FgroupId>\n    \u003CartifactId>micrometer-tracing-bridge-brave\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n\u003Cdependency>\n    \u003CgroupId>io.zipkin.reporter2\u003C\u002FgroupId>\n    \u003CartifactId>zipkin-reporter-brave\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n```\n\n```yaml\n# application.yml\nmanagement:\n  tracing:\n    sampling:\n      probability: 1.0  # 100% запросов трассируются (в prod обычно 0.1)\n  zipkin:\n    tracing:\n      endpoint: http:\u002F\u002Fzipkin:9411\u002Fapi\u002Fv2\u002Fspans\n\nlogging:\n  pattern:\n    level: \"%5p [${spring.application.name},%X{traceId},%X{spanId}]\"\n```\n\nTrace ID и Span ID автоматически прокидываются в логи:\n```\nINFO [payment-service,abc123def456,span789012] Processing payment #42\nINFO [customer-service,abc123def456,span345678] Fetching customer data\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>Создание кастомных span\u003C\u002Fsummary>\n\n```java\n@Service\n@RequiredArgsConstructor\npublic class PaymentService {\n    private final ObservationRegistry observationRegistry;\n\n    public void processPayment(PaymentRequest request) {\n        Observation.createNotStarted(\"payment.processing\", observationRegistry)\n            .lowCardinalityKeyValue(\"payment.type\", request.getType().name())\n            .observe(() -> {\n                \u002F\u002F Этот блок будет отдельным span\n                validatePayment(request);\n                executePayment(request);\n            });\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Инструменты визуализации\n\n- Zipkin — простой и легковесный, хорошо интегрируется со Spring.\n- Jaeger — более мощный, поддерживает сэмплирование, создан Uber.\n- Grafana Tempo — интеграция с Grafana, поддержка больших объёмов.\n\n> **На собеседовании:** объясните понятия Trace и Span, покажите, что знаете Micrometer Tracing как замену Spring Cloud Sleuth (устарел в Spring Boot 3). Частая ошибка — не упомянуть sampling в production (100% трассировка создаёт огромную нагрузку).","","middle",[15],"microservices",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Как организовать распределённую трассировку в микросервисах? — Gymterview","Distributed Tracing (распределённая трассировка) — это метод отслеживания прохождения запроса через цепочку микросервисов, позволяющий понять, какие сервисы был","Distributed Tracing (распределённая трассировка) — это метод отслеживания прохождения запроса через цепочку микросервисо",[15,13],"Distributed Tracing (распределённая трассировка) — это метод отслеживания прохождения запроса через цепочку микросервисов, позволяющий понять, какие сервисы были вызваны, сколько времени занял каждый вызов и где произошла ошибка.",true]