[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-nablyudaemost-chto-takoe-opentelemetry":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},765,"chto-takoe-opentelemetry",20,"nablyudaemost","Наблюдаемость","📊","Что такое OpenTelemetry?","OpenTelemetry (OTel) — vendor-neutral open-source стандарт и набор инструментов для генерации, сбора и экспорта телеметрии (traces, metrics, logs). Проект CNCF, объединивший OpenTracing и OpenCensus.\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                     Ваше приложение                              │\n│                                                                  │\n│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐           │\n│  │  OTel SDK    │  │ Auto-instrum │  │ Manual spans │           │\n│  │  (Traces,    │  │ (JDBC, HTTP, │  │ (ваш код)   │           │\n│  │   Metrics,   │  │  Kafka, gRPC)│  │              │           │\n│  │   Logs)      │  │              │  │              │           │\n│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘           │\n│         └──────────────────┼─────────────────┘                   │\n│                            ▼                                     │\n│                  ┌──────────────────┐                            │\n│                  │  OTLP Exporter   │                            │\n│                  └────────┬─────────┘                            │\n└───────────────────────────┼──────────────────────────────────────┘\n                            │ OTLP (gRPC\u002FHTTP)\n                            ▼\n                  ┌──────────────────┐\n                  │  OTel Collector  │\n                  │                  │\n                  │ Receivers → Processors → Exporters             │\n                  └──┬──────────┬──────────┬───────────────────────┘\n                     │          │          │\n                     ▼          ▼          ▼\n               ┌─────────┐ ┌────────┐ ┌────────┐\n               │  Jaeger  │ │Promethe│ │  Loki  │\n               │  Tempo   │ │  us    │ │        │\n               └─────────┘ └────────┘ └────────┘\n```\n\n### Три сигнала OpenTelemetry\n\n1. **Traces** — распределённые трейсы (stable)\n2. **Metrics** — метрики с поддержкой Counter, Gauge, Histogram (stable)\n3. **Logs** — логи с корреляцией трейсами (stable с 2024)\n\n### Auto-instrumentation vs Manual\n\n**Auto-instrumentation** — Java-агент, автоматически инструментирующий популярные библиотеки:\n\n```bash\njava -javaagent:opentelemetry-javaagent.jar \\\n  -Dotel.service.name=order-service \\\n  -Dotel.exporter.otlp.endpoint=http:\u002F\u002Fotel-collector:4317 \\\n  -Dotel.traces.sampler=parentbased_traceidratio \\\n  -Dotel.traces.sampler.arg=0.1 \\\n  -jar order-service.jar\n```\n\nПоддерживаемые библиотеки (автоматически): Spring MVC\u002FWebFlux, JDBC, Hibernate, Kafka, RabbitMQ, gRPC, OkHttp, RestTemplate, WebClient, Jedis, Lettuce, Logback, Log4j2.\n\n\u003Cdetails>\u003Csummary>Manual instrumentation — явное создание спанов\u003C\u002Fsummary>\n\n```java\nimport io.opentelemetry.api.OpenTelemetry;\nimport io.opentelemetry.api.trace.Span;\nimport io.opentelemetry.api.trace.Tracer;\nimport io.opentelemetry.context.Scope;\n\n@Service\npublic class OrderService {\n    private final Tracer tracer;\n\n    public OrderService(OpenTelemetry openTelemetry) {\n        this.tracer = openTelemetry.getTracer(\"order-service\");\n    }\n\n    public Order processOrder(OrderRequest request) {\n        Span span = tracer.spanBuilder(\"processOrder\")\n            .setAttribute(\"order.type\", request.getType())\n            .setAttribute(\"order.items.count\", request.getItems().size())\n            .startSpan();\n\n        try (Scope scope = span.makeCurrent()) {\n            Order order = createOrder(request);\n            span.setAttribute(\"order.id\", order.getId());\n            span.addEvent(\"Order validated\");\n\n            processPayment(order);\n            span.addEvent(\"Payment processed\");\n\n            return order;\n        } catch (Exception e) {\n            span.setStatus(StatusCode.ERROR, e.getMessage());\n            span.recordException(e);\n            throw e;\n        } finally {\n            span.end();\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>Конфигурация OTel Collector\u003C\u002Fsummary>\n\n```yaml\n# otel-collector-config.yaml\nreceivers:\n  otlp:\n    protocols:\n      grpc:\n        endpoint: 0.0.0.0:4317\n      http:\n        endpoint: 0.0.0.0:4318\n\nprocessors:\n  batch:\n    timeout: 5s\n    send_batch_size: 1024\n  memory_limiter:\n    check_interval: 1s\n    limit_mib: 512\n  attributes:\n    actions:\n      - key: environment\n        value: production\n        action: upsert\n  tail_sampling:\n    decision_wait: 10s\n    policies:\n      - name: errors-policy\n        type: status_code\n        status_code:\n          status_codes: [ERROR]\n      - name: slow-traces-policy\n        type: latency\n        latency:\n          threshold_ms: 500\n      - name: probabilistic-policy\n        type: probabilistic\n        probabilistic:\n          sampling_percentage: 5\n\nexporters:\n  otlp\u002Ftempo:\n    endpoint: tempo:4317\n    tls:\n      insecure: true\n  prometheus:\n    endpoint: 0.0.0.0:8889\n  loki:\n    endpoint: http:\u002F\u002Floki:3100\u002Floki\u002Fapi\u002Fv1\u002Fpush\n\nservice:\n  pipelines:\n    traces:\n      receivers: [otlp]\n      processors: [memory_limiter, batch, tail_sampling]\n      exporters: [otlp\u002Ftempo]\n    metrics:\n      receivers: [otlp]\n      processors: [memory_limiter, batch]\n      exporters: [prometheus]\n    logs:\n      receivers: [otlp]\n      processors: [memory_limiter, batch, attributes]\n      exporters: [loki]\n```\n\n\u003C\u002Fdetails>\n\n### OTel vs Vendor-specific решения\n\n| Аспект | OpenTelemetry | Jaeger \u002F Zipkin |\n|--------|--------------|----------------|\n| Стандарт | Vendor-neutral (CNCF) | Специфичный формат |\n| Сигналы | Traces + Metrics + Logs | Только traces |\n| Переключение бэкенда | Изменение конфига exporter'а | Переписывание интеграций |\n| Auto-instrumentation | Единый Java-агент | Отдельные библиотеки |\n| Будущее | Активно развивается, стандарт индустрии | Jaeger v2 использует OTel SDK |\n\n### Важное\n- OpenTelemetry — это **стандарт и SDK**, а не бэкенд для хранения. Данные экспортируются в Jaeger, Tempo, Datadog и т.д.\n- **OTel Collector** — рекомендуемый промежуточный слой между приложениями и бэкендами. Позволяет менять бэкенд без изменения приложений.\n- **Auto-instrumentation** покрывает 80-90% потребностей. Manual instrumentation нужен только для кастомной бизнес-логики.\n- **OTLP (OpenTelemetry Protocol)** — единый протокол для всех сигналов (gRPC и HTTP).\n\n### Частые ошибки\n- **Смешивание OTel с Jaeger\u002FZipkin SDK**: используйте только OTel SDK, а Jaeger\u002FTempo — только как бэкенд.\n- **Отправка напрямую в бэкенд** без Collector: теряется возможность батчинга, семплирования, обогащения данных.\n- **Не настроен memory_limiter в Collector**: при высокой нагрузке Collector может съесть всю память.\n- **Забыть про context propagation**: OTel автоматически передаёт контекст для HTTP и gRPC, но для Kafka\u002FRabbitMQ нужна дополнительная настройка.\n\n### Как используется в 2026\n- **OpenTelemetry** — стандарт индустрии. Все крупные вендоры (Datadog, New Relic, Dynatrace, Splunk) поддерживают OTLP.\n- **OTel Java Agent 2.x** — с поддержкой виртуальных потоков (Project Loom), нативных образов (GraalVM).\n- **OTel Logs** — stable API, заменяет прямую интеграцию с Logstash\u002FFluentd.\n- **OTel Profiling** — экспериментальный сигнал для continuous profiling.\n- **Spring Boot 3.x** — нативная интеграция через Micrometer Observation API -> OTel bridge.\n\n> **На собеседовании:** ключевое — OTel является vendor-neutral стандартом, не бэкендом. Объясните роль Collector как промежуточного слоя. Покажите понимание разницы между auto-instrumentation (Java-агент) и manual instrumentation. Сильный ответ включает упоминание OTLP как единого протокола и трёх сигналов (traces, metrics, logs).","","middle",[15],"observability",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое OpenTelemetry? — Gymterview","OpenTelemetry (OTel) — vendor-neutral open-source стандарт и набор инструментов для генерации, сбора и экспорта телеметрии (traces, metrics, logs). Проект CNCF,","OpenTelemetry (OTel) — vendor-neutral open-source стандарт и набор инструментов для генерации, сбора и экспорта телеметр",[15,13],"OpenTelemetry (OTel) — vendor-neutral open-source стандарт и набор инструментов для генерации, сбора и экспорта телеметрии (traces, metrics, logs). Проект CNCF, объединивший OpenTracing и OpenCensus.",true]