Skip to content

Commit e57aa8e

Browse files
committed
Implement client key file and client certificate file for all otlp exporters
1 parent 48fdb63 commit e57aa8e

File tree

16 files changed

+297
-26
lines changed

16 files changed

+297
-26
lines changed

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/_log_exporter/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434

3535
from opentelemetry.sdk.environment_variables import (
3636
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
37+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE,
38+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY,
3739
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION,
3840
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,
3941
OTEL_EXPORTER_OTLP_LOGS_HEADERS,
@@ -71,7 +73,10 @@ def __init__(
7173
and environ.get(OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE) is not None
7274
):
7375
credentials = _get_credentials(
74-
credentials, OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE
76+
credentials,
77+
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
78+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY,
79+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE,
7580
)
7681

7782
environ_timeout = environ.get(OTEL_EXPORTER_OTLP_LOGS_TIMEOUT)

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
)
6262
from opentelemetry.proto.resource.v1.resource_pb2 import Resource # noqa: F401
6363
from opentelemetry.sdk.environment_variables import (
64+
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE,
65+
OTEL_EXPORTER_OTLP_CLIENT_KEY,
6466
OTEL_EXPORTER_OTLP_CERTIFICATE,
6567
OTEL_EXPORTER_OTLP_COMPRESSION,
6668
OTEL_EXPORTER_OTLP_ENDPOINT,
@@ -118,22 +120,47 @@ def get_resource_data(
118120
return _get_resource_data(sdk_resource_scope_data, resource_class, name)
119121

120122

121-
def _load_credential_from_file(filepath) -> ChannelCredentials:
123+
def _get_file_content(file_path: str) -> bytes:
124+
file = open(file_path, "rb")
125+
content = file.read()
126+
file.close()
127+
return content
128+
129+
130+
def _load_credentials(
131+
certificate_file: str,
132+
client_key_file: str,
133+
client_certificate_file: str,
134+
) -> ChannelCredentials:
122135
try:
123-
with open(filepath, "rb") as creds_file:
124-
credential = creds_file.read()
125-
return ssl_channel_credentials(credential)
136+
root_certificates = _get_file_content(certificate_file)
137+
private_key = _get_file_content(client_key_file)
138+
certificate_chain = _get_file_content(client_certificate_file)
139+
return ssl_channel_credentials(
140+
root_certificates=root_certificates,
141+
private_key=private_key,
142+
certificate_chain=certificate_chain,
143+
)
126144
except FileNotFoundError:
127145
logger.exception("Failed to read credential file")
128146
return None
129147

130148

131-
def _get_credentials(creds, environ_key):
149+
def _get_credentials(
150+
creds: Optional[ChannelCredentials],
151+
certificate_file_env_key: str,
152+
client_key_file_env_key: str,
153+
client_certificate_file_env_key: str,
154+
) -> ChannelCredentials:
132155
if creds is not None:
133156
return creds
134-
creds_env = environ.get(environ_key)
135-
if creds_env:
136-
return _load_credential_from_file(creds_env)
157+
certificate_file = environ.get(certificate_file_env_key)
158+
client_key_file = environ.get(client_key_file_env_key)
159+
client_certificate_file = environ.get(client_certificate_file_env_key)
160+
if certificate_file:
161+
return _load_credentials(
162+
certificate_file, client_key_file, client_certificate_file
163+
)
137164
return ssl_channel_credentials()
138165

139166

@@ -214,7 +241,10 @@ def __init__(
214241
)
215242
else:
216243
credentials = _get_credentials(
217-
credentials, OTEL_EXPORTER_OTLP_CERTIFICATE
244+
credentials,
245+
OTEL_EXPORTER_OTLP_CERTIFICATE,
246+
OTEL_EXPORTER_OTLP_CLIENT_KEY,
247+
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE,
218248
)
219249
self._client = self._stub(
220250
secure_channel(

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/metric_exporter/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
from opentelemetry.proto.metrics.v1 import metrics_pb2 as pb2 # noqa: F401
4343
from opentelemetry.sdk.environment_variables import (
4444
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE,
45+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE,
46+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY,
4547
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION,
4648
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
4749
OTEL_EXPORTER_OTLP_METRICS_HEADERS,
@@ -113,7 +115,10 @@ def __init__(
113115
and environ.get(OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE) is not None
114116
):
115117
credentials = _get_credentials(
116-
credentials, OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE
118+
credentials,
119+
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE,
120+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY,
121+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE,
117122
)
118123

119124
environ_timeout = environ.get(OTEL_EXPORTER_OTLP_METRICS_TIMEOUT)

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/trace_exporter/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
)
4949
from opentelemetry.proto.trace.v1.trace_pb2 import Status # noqa: F401
5050
from opentelemetry.sdk.environment_variables import (
51+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE,
52+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY,
5153
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,
5254
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,
5355
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
@@ -105,7 +107,10 @@ def __init__(
105107
and environ.get(OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE) is not None
106108
):
107109
credentials = _get_credentials(
108-
credentials, OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE
110+
credentials,
111+
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,
112+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY,
113+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE,
109114
)
110115

111116
environ_timeout = environ.get(OTEL_EXPORTER_OTLP_TRACES_TIMEOUT)

exporter/opentelemetry-exporter-otlp-proto-grpc/tests/fixtures/test-client-cert.pem

Whitespace-only changes.

exporter/opentelemetry-exporter-otlp-proto-grpc/tests/fixtures/test-client-key.pem

Whitespace-only changes.

exporter/opentelemetry-exporter-otlp-proto-grpc/tests/logs/test_otlp_logs_exporter.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
from opentelemetry.sdk._logs.export import LogExportResult
5151
from opentelemetry.sdk.environment_variables import (
5252
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
53+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE,
54+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY,
5355
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION,
5456
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,
5557
OTEL_EXPORTER_OTLP_LOGS_HEADERS,
@@ -179,6 +181,10 @@ def test_exporting(self):
179181
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: "logs:4317",
180182
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE: THIS_DIR
181183
+ "/../fixtures/test.cert",
184+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE: THIS_DIR
185+
+ "/../fixtures/test-client-cert.pem",
186+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY: THIS_DIR
187+
+ "/../fixtures/test-client-key.pem",
182188
OTEL_EXPORTER_OTLP_LOGS_HEADERS: " key1=value1,KEY2 = VALUE=2",
183189
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT: "10",
184190
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION: "gzip",

exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_metrics_exporter.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
from opentelemetry.sdk.environment_variables import (
4444
OTEL_EXPORTER_OTLP_COMPRESSION,
4545
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE,
46+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE,
47+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY,
4648
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION,
4749
OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION,
4850
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
@@ -221,6 +223,10 @@ def test_preferred_temporality(self):
221223
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: "collector:4317",
222224
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE: THIS_DIR
223225
+ "/fixtures/test.cert",
226+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE: THIS_DIR
227+
+ "/fixtures/test-client-cert.pem",
228+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY: THIS_DIR
229+
+ "/fixtures/test-client-key.pem",
224230
OTEL_EXPORTER_OTLP_METRICS_HEADERS: " key1=value1,KEY2 = value=2",
225231
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT: "10",
226232
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION: "gzip",

exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_trace_exporter.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
from opentelemetry.sdk.environment_variables import (
5757
OTEL_EXPORTER_OTLP_COMPRESSION,
5858
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,
59+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE,
60+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY,
5961
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,
6062
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
6163
OTEL_EXPORTER_OTLP_TRACES_HEADERS,
@@ -232,6 +234,10 @@ def test_exporting(self):
232234
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "collector:4317",
233235
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE: THIS_DIR
234236
+ "/fixtures/test.cert",
237+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE: THIS_DIR
238+
+ "/fixtures/test-client-cert.pem",
239+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY: THIS_DIR
240+
+ "/fixtures/test-client-key.pem",
235241
OTEL_EXPORTER_OTLP_TRACES_HEADERS: " key1=value1,KEY2 = value=2",
236242
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT: "10",
237243
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION: "gzip",
@@ -879,20 +885,6 @@ def test_translate_key_values(self):
879885
self.assertTrue(isinstance(arr_value.values[1], AnyValue))
880886
self.assertEqual(arr_value.values[1].string_value, "123")
881887

882-
# Tracing specs currently does not support Mapping type attributes
883-
# map_value = _translate_key_values(
884-
# "map_type", {"asd": "123", "def": "456"}
885-
# )
886-
# self.assertTrue(isinstance(map_value, KeyValue))
887-
# self.assertEqual(map_value.key, "map_type")
888-
# self.assertTrue(isinstance(map_value.value, AnyValue))
889-
# self.assertTrue(isinstance(map_value.value.kvlist_value, KeyValueList))
890-
891-
# kvlist_value = map_value.value.kvlist_value
892-
# self.assertTrue(isinstance(kvlist_value.values[0], KeyValue))
893-
# self.assertEqual(kvlist_value.values[0].key, "asd")
894-
# self.assertEqual(kvlist_value.values[0].value.string_value, "123")
895-
896888
def test_dropped_values(self):
897889
span = get_span_with_dropped_attributes_events_links()
898890
# pylint:disable=protected-access

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/_log_exporter/__init__.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@
2828
from opentelemetry.exporter.otlp.proto.common._log_encoder import encode_logs
2929
from opentelemetry.sdk.environment_variables import (
3030
OTEL_EXPORTER_OTLP_CERTIFICATE,
31+
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE,
32+
OTEL_EXPORTER_OTLP_CLIENT_KEY,
3133
OTEL_EXPORTER_OTLP_COMPRESSION,
3234
OTEL_EXPORTER_OTLP_ENDPOINT,
3335
OTEL_EXPORTER_OTLP_HEADERS,
3436
OTEL_EXPORTER_OTLP_TIMEOUT,
3537
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,
3638
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
39+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE,
40+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY,
3741
OTEL_EXPORTER_OTLP_LOGS_HEADERS,
3842
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT,
3943
OTEL_EXPORTER_OTLP_LOGS_COMPRESSION,
@@ -67,6 +71,8 @@ def __init__(
6771
self,
6872
endpoint: Optional[str] = None,
6973
certificate_file: Optional[str] = None,
74+
client_key_file: Optional[str] = None,
75+
client_certificate_file: Optional[str] = None,
7076
headers: Optional[Dict[str, str]] = None,
7177
timeout: Optional[int] = None,
7278
compression: Optional[Compression] = None,
@@ -82,6 +88,20 @@ def __init__(
8288
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
8389
environ.get(OTEL_EXPORTER_OTLP_CERTIFICATE, True),
8490
)
91+
self._client_key_file = client_key_file or environ.get(
92+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_KEY,
93+
environ.get(OTEL_EXPORTER_OTLP_CLIENT_KEY, None),
94+
)
95+
self._client_certificate_file = client_certificate_file or environ.get(
96+
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE,
97+
environ.get(OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, None),
98+
)
99+
self._client_cert = self._client_certificate_file
100+
if self._client_certificate_file and self._client_key_file:
101+
self._client_cert = (
102+
self._client_certificate_file,
103+
self._client_key_file,
104+
)
85105
headers_string = environ.get(
86106
OTEL_EXPORTER_OTLP_LOGS_HEADERS,
87107
environ.get(OTEL_EXPORTER_OTLP_HEADERS, ""),
@@ -118,6 +138,7 @@ def _export(self, serialized_data: str):
118138
data=data,
119139
verify=self._certificate_file,
120140
timeout=self._timeout,
141+
cert=self._client_cert,
121142
)
122143

123144
@staticmethod

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/metric_exporter/__init__.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,15 @@
5151
from opentelemetry.sdk.environment_variables import (
5252
OTEL_EXPORTER_OTLP_ENDPOINT,
5353
OTEL_EXPORTER_OTLP_CERTIFICATE,
54+
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE,
55+
OTEL_EXPORTER_OTLP_CLIENT_KEY,
5456
OTEL_EXPORTER_OTLP_HEADERS,
5557
OTEL_EXPORTER_OTLP_TIMEOUT,
5658
OTEL_EXPORTER_OTLP_COMPRESSION,
5759
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
5860
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE,
61+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE,
62+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY,
5963
OTEL_EXPORTER_OTLP_METRICS_HEADERS,
6064
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT,
6165
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION,
@@ -96,6 +100,8 @@ def __init__(
96100
self,
97101
endpoint: Optional[str] = None,
98102
certificate_file: Optional[str] = None,
103+
client_key_file: Optional[str] = None,
104+
client_certificate_file: Optional[str] = None,
99105
headers: Optional[Dict[str, str]] = None,
100106
timeout: Optional[int] = None,
101107
compression: Optional[Compression] = None,
@@ -113,6 +119,20 @@ def __init__(
113119
OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE,
114120
environ.get(OTEL_EXPORTER_OTLP_CERTIFICATE, True),
115121
)
122+
self._client_key_file = client_key_file or environ.get(
123+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY,
124+
environ.get(OTEL_EXPORTER_OTLP_CLIENT_KEY, None),
125+
)
126+
self._client_certificate_file = client_certificate_file or environ.get(
127+
OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE,
128+
environ.get(OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, None),
129+
)
130+
self._client_cert = self._client_certificate_file
131+
if self._client_certificate_file and self._client_key_file:
132+
self._client_cert = (
133+
self._client_certificate_file,
134+
self._client_key_file,
135+
)
116136
headers_string = environ.get(
117137
OTEL_EXPORTER_OTLP_METRICS_HEADERS,
118138
environ.get(OTEL_EXPORTER_OTLP_HEADERS, ""),
@@ -152,6 +172,7 @@ def _export(self, serialized_data: str):
152172
data=data,
153173
verify=self._certificate_file,
154174
timeout=self._timeout,
175+
cert=self._client_cert,
155176
)
156177

157178
@staticmethod

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@
3131
from opentelemetry.sdk.environment_variables import (
3232
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,
3333
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,
34+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE,
35+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY,
3436
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
3537
OTEL_EXPORTER_OTLP_TRACES_HEADERS,
3638
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,
3739
OTEL_EXPORTER_OTLP_CERTIFICATE,
3840
OTEL_EXPORTER_OTLP_COMPRESSION,
41+
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE,
42+
OTEL_EXPORTER_OTLP_CLIENT_KEY,
3943
OTEL_EXPORTER_OTLP_ENDPOINT,
4044
OTEL_EXPORTER_OTLP_HEADERS,
4145
OTEL_EXPORTER_OTLP_TIMEOUT,
@@ -65,6 +69,8 @@ def __init__(
6569
self,
6670
endpoint: Optional[str] = None,
6771
certificate_file: Optional[str] = None,
72+
client_key_file: Optional[str] = None,
73+
client_certificate_file: Optional[str] = None,
6874
headers: Optional[Dict[str, str]] = None,
6975
timeout: Optional[int] = None,
7076
compression: Optional[Compression] = None,
@@ -80,6 +86,20 @@ def __init__(
8086
OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,
8187
environ.get(OTEL_EXPORTER_OTLP_CERTIFICATE, True),
8288
)
89+
self._client_key_file = client_key_file or environ.get(
90+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY,
91+
environ.get(OTEL_EXPORTER_OTLP_CLIENT_KEY, None),
92+
)
93+
self._client_certificate_file = client_certificate_file or environ.get(
94+
OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE,
95+
environ.get(OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, None),
96+
)
97+
self._client_cert = self._client_certificate_file
98+
if self._client_certificate_file and self._client_key_file:
99+
self._client_cert = (
100+
self._client_certificate_file,
101+
self._client_key_file,
102+
)
83103
headers_string = environ.get(
84104
OTEL_EXPORTER_OTLP_TRACES_HEADERS,
85105
environ.get(OTEL_EXPORTER_OTLP_HEADERS, ""),
@@ -116,6 +136,7 @@ def _export(self, serialized_data: str):
116136
data=data,
117137
verify=self._certificate_file,
118138
timeout=self._timeout,
139+
cert=self._client_cert,
119140
)
120141

121142
@staticmethod

0 commit comments

Comments
 (0)