From 90f82cf1af0d7542ff240eabb2696b34e2c87893 Mon Sep 17 00:00:00 2001 From: Domas Date: Mon, 14 Apr 2025 09:47:24 +0300 Subject: [PATCH] Tempo: Fix span metrics query when filtered by prefixed service graph labels (#103773) fix span metrics queries for sevice graph explore when filtered with client_ or server_ prefix --- .../plugins/datasource/tempo/datasource.test.ts | 14 ++++++++++++++ public/app/plugins/datasource/tempo/datasource.ts | 7 ++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/tempo/datasource.test.ts b/public/app/plugins/datasource/tempo/datasource.test.ts index 9b715503516..e12b53d7f70 100644 --- a/public/app/plugins/datasource/tempo/datasource.test.ts +++ b/public/app/plugins/datasource/tempo/datasource.test.ts @@ -748,6 +748,20 @@ describe('Tempo service graph view', () => { expect(builtQuery).toBe( 'topk(5, sum(rate(traces_spanmetrics_calls_total{service="${app}",service="$app"}[$__range])) by (span_name))' ); + + targets = { + targets: [ + { queryType: 'serviceMap', serviceMapQuery: '{client="app",client_deployment_environment="production"}' }, + ], + } as DataQueryRequest; + builtQuery = buildExpr( + { expr: 'sum(rate(traces_spanmetrics_calls_total{}[$__range])) by (span_name)', params: [], topk: 5 }, + '', + targets + ); + expect(builtQuery).toBe( + 'topk(5, sum(rate(traces_spanmetrics_calls_total{service="app",deployment_environment="production"}[$__range])) by (span_name))' + ); }); it('should build link expr correctly', () => { diff --git a/public/app/plugins/datasource/tempo/datasource.ts b/public/app/plugins/datasource/tempo/datasource.ts index a0da5493bd5..618f1b642d5 100644 --- a/public/app/plugins/datasource/tempo/datasource.ts +++ b/public/app/plugins/datasource/tempo/datasource.ts @@ -1549,7 +1549,12 @@ export function buildExpr( query = serviceMapQueryMatch[1]; } // map serviceGraph metric tags to serviceGraphView metric tags - query = query.replace('client', 'service').replace('server', 'service'); + query = query + // client_deployment_environment="prod" -> deployment_environment="prod" + .replaceAll('client_', '') + .replaceAll('server_', '') + .replace('client', 'service') // client="fooservice" -> service="fooservice" + .replace('server', 'service'); return query.includes('span_name') ? metric.params.concat(query) : metric.params