|
23 | 23 | OTEL_METRICS_EXPORTER,
|
24 | 24 | OTEL_TRACES_EXPORTER,
|
25 | 25 | )
|
| 26 | +from opentelemetry.exporter.otlp.proto.grpc import _USER_AGENT_HEADER_VALUE |
| 27 | +from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter as GRPCOTLPLogExporter |
| 28 | +from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter as GRPCOTLPMetricExporter |
| 29 | +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter as GRPCOTLPSpanExporter |
| 30 | +from opentelemetry.exporter.otlp.proto.http import _OTLP_HTTP_HEADERS |
| 31 | +from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter as HTTPOTLPLogExporter |
| 32 | +from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as HTTPOTLPMetricExporter |
| 33 | +from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter as HTTPOTLPSpanExporter |
26 | 34 | from opentelemetry.instrumentation.distro import BaseDistro
|
27 | 35 | from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
28 | 36 | from opentelemetry.instrumentation.system_metrics import (
|
|
44 | 52 | from opentelemetry._opamp.client import OpAMPClient
|
45 | 53 | from opentelemetry._opamp.proto import opamp_pb2 as opamp_pb2
|
46 | 54 |
|
| 55 | +from elasticotel.distro import version |
47 | 56 | from elasticotel.distro.environment_variables import ELASTIC_OTEL_OPAMP_ENDPOINT, ELASTIC_OTEL_SYSTEM_METRICS_ENABLED
|
48 | 57 | from elasticotel.distro.resource_detectors import get_cloud_resource_detectors
|
49 | 58 | from elasticotel.distro.config import opamp_handler
|
50 | 59 |
|
51 | 60 |
|
52 | 61 | logger = logging.getLogger(__name__)
|
53 | 62 |
|
| 63 | +EDOT_GRPC_USER_AGENT_HEADER_VALUE = "elastic-otlp-grpc-python/" + version.__version__ |
| 64 | +EDOT_HTTP_USER_AGENT_HEADER_VALUE = "elastic-otlp-http-python/" + version.__version__ |
| 65 | + |
54 | 66 |
|
55 | 67 | class ElasticOpenTelemetryConfigurator(_OTelSDKConfigurator):
|
56 | 68 | def _configure(self, **kwargs):
|
| 69 | + # override GRPC and HTTP user agent headers, GRPC works since OTel SDK 1.35.0, HTTP currently requires an hack |
| 70 | + otlp_grpc_exporter_options = { |
| 71 | + "channel_options": ( |
| 72 | + ("grpc.primary_user_agent", f"{EDOT_GRPC_USER_AGENT_HEADER_VALUE} {_USER_AGENT_HEADER_VALUE}"), |
| 73 | + ) |
| 74 | + } |
| 75 | + otlp_http_exporter_options = { |
| 76 | + "headers": { |
| 77 | + **_OTLP_HTTP_HEADERS, |
| 78 | + "User-Agent": f"{EDOT_HTTP_USER_AGENT_HEADER_VALUE} {_OTLP_HTTP_HEADERS['User-Agent']}", |
| 79 | + } |
| 80 | + } |
| 81 | + kwargs["exporter_args_map"] = { |
| 82 | + GRPCOTLPLogExporter: otlp_grpc_exporter_options, |
| 83 | + GRPCOTLPMetricExporter: otlp_grpc_exporter_options, |
| 84 | + GRPCOTLPSpanExporter: otlp_grpc_exporter_options, |
| 85 | + HTTPOTLPLogExporter: otlp_http_exporter_options, |
| 86 | + HTTPOTLPMetricExporter: otlp_http_exporter_options, |
| 87 | + HTTPOTLPSpanExporter: otlp_http_exporter_options, |
| 88 | + } |
| 89 | + # TODO: Remove the following line after rebasing on top of upstream 1.37.0 |
| 90 | + _OTLP_HTTP_HEADERS["User-Agent"] = otlp_http_exporter_options["headers"]["User-Agent"] |
| 91 | + |
57 | 92 | super()._configure(**kwargs)
|
58 | 93 |
|
59 | 94 | enable_opamp = False
|
|
0 commit comments