Skip to content

Commit 12eb9f9

Browse files
update opentelemetry conventions
1 parent f42e1ab commit 12eb9f9

File tree

4 files changed

+32
-9
lines changed

4 files changed

+32
-9
lines changed

elastic_transport/_async_transport.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,9 @@ async def perform_request( # type: ignore[override, return]
260260
node: BaseAsyncNode = self.node_pool.get() # type: ignore[assignment]
261261
start_time = self._loop.time()
262262
try:
263-
otel_span.set_node_metadata(node.host, node.port, node.base_url, target)
263+
otel_span.set_node_metadata(
264+
node.host, node.port, node.base_url, target, method
265+
)
264266
resp = await node.perform_request(
265267
method,
266268
target,

elastic_transport/_otel.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,25 @@ def __init__(
4949
self.body_strategy = body_strategy
5050
self.endpoint_id = endpoint_id
5151

52+
if self.otel_span:
53+
self.otel_span.set_attribute("db.system.name", "elasticsearch")
54+
if self.endpoint_id:
55+
self.otel_span.set_attribute("db.operation.name", self.endpoint_id)
56+
5257
def set_node_metadata(
53-
self, host: str, port: int, base_url: str, target: str
58+
self,
59+
host: str,
60+
port: int,
61+
base_url: str,
62+
target: str,
63+
method: str,
5464
) -> None:
5565
if self.otel_span is None:
5666
return
5767

5868
# url.full does not contain auth info which is passed as headers
5969
self.otel_span.set_attribute("url.full", base_url + target)
70+
self.otel_span.set_attribute("http.request.method", method)
6071
self.otel_span.set_attribute("server.address", host)
6172
self.otel_span.set_attribute("server.port", port)
6273

@@ -66,10 +77,10 @@ def set_elastic_cloud_metadata(self, headers: Mapping[str, str]) -> None:
6677

6778
cluster_name = headers.get("X-Found-Handling-Cluster")
6879
if cluster_name is not None:
69-
self.otel_span.set_attribute("db.elasticsearch.cluster.name", cluster_name)
80+
self.otel_span.set_attribute("db.namespace", cluster_name)
7081
node_name = headers.get("X-Found-Handling-Instance")
7182
if node_name is not None:
72-
self.otel_span.set_attribute("db.elasticsearch.node.name", node_name)
83+
self.otel_span.set_attribute("elasticsearch.node.name", node_name)
7384

7485
def set_db_statement(self, serialized_body: bytes) -> None:
7586
if self.otel_span is None:
@@ -79,5 +90,5 @@ def set_db_statement(self, serialized_body: bytes) -> None:
7990
return
8091
elif self.body_strategy == "raw" and self.endpoint_id in SEARCH_ENDPOINTS:
8192
self.otel_span.set_attribute(
82-
"db.statement", serialized_body.decode("utf-8")
93+
"db.query.text", serialized_body.decode("utf-8")
8394
)

elastic_transport/_transport.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,9 @@ def perform_request( # type: ignore[return]
338338
node = self.node_pool.get()
339339
start_time = time.time()
340340
try:
341-
otel_span.set_node_metadata(node.host, node.port, node.base_url, target)
341+
otel_span.set_node_metadata(
342+
node.host, node.port, node.base_url, target, method
343+
)
342344
resp = node.perform_request(
343345
method,
344346
target,

tests/test_otel.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def test_no_span():
4141
9200,
4242
"http://localhost:9200/",
4343
"_ml/anomaly_detectors/my-job/_open",
44+
"POST",
4445
)
4546
span.set_elastic_cloud_metadata(
4647
{
@@ -65,6 +66,7 @@ def test_detailed_span():
6566
9200,
6667
"http://localhost:9200/",
6768
"_ml/anomaly_detectors/my-job/_open",
69+
"POST",
6870
)
6971
span.set_elastic_cloud_metadata(
7072
{
@@ -77,11 +79,15 @@ def test_detailed_span():
7779
assert len(spans) == 1
7880
assert spans[0].name == "ml.open_job"
7981
assert spans[0].attributes == {
82+
"db.system.name": "elasticsearch",
8083
"url.full": "http://localhost:9200/_ml/anomaly_detectors/my-job/_open",
84+
"http.request.method": "POST",
8185
"server.address": "localhost",
8286
"server.port": 9200,
83-
"db.elasticsearch.cluster.name": "e9106fc68e3044f0b1475b04bf4ffd5f",
84-
"db.elasticsearch.node.name": "instance-0000000001",
87+
"db.operation.name": "my-job/_open",
88+
"http.request.method": "POST",
89+
"db.namespace": "e9106fc68e3044f0b1475b04bf4ffd5f",
90+
"elasticsearch.node.name": "instance-0000000001",
8591
}
8692

8793

@@ -95,5 +101,7 @@ def test_db_statement():
95101
assert len(spans) == 1
96102
assert spans[0].name == "search"
97103
assert spans[0].attributes == {
98-
"db.statement": '{"query":{"match_all":{}}}',
104+
"db.system.name": "elasticsearch",
105+
"db.operation.name": "search",
106+
"db.query.text": '{"query":{"match_all":{}}}',
99107
}

0 commit comments

Comments
 (0)