mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Tempo: Add span, trace vars to trace to metrics interpolation (#81046)
* Add scoped vars to query * Update import * Remove ternary
This commit is contained in:
parent
8a4f060f75
commit
0d9886a654
@ -16,7 +16,6 @@ import {
|
|||||||
} from '@grafana/data';
|
} from '@grafana/data';
|
||||||
import {
|
import {
|
||||||
TraceToProfilesOptions,
|
TraceToProfilesOptions,
|
||||||
TraceToMetricQuery,
|
|
||||||
TraceToMetricsOptions,
|
TraceToMetricsOptions,
|
||||||
TraceToLogsOptionsV2,
|
TraceToLogsOptionsV2,
|
||||||
TraceToLogsTag,
|
TraceToLogsTag,
|
||||||
@ -258,7 +257,9 @@ function legacyCreateSpanLinkFactory(
|
|||||||
// Get metrics links
|
// Get metrics links
|
||||||
if (metricsDataSourceSettings && traceToMetricsOptions?.queries) {
|
if (metricsDataSourceSettings && traceToMetricsOptions?.queries) {
|
||||||
for (const query of traceToMetricsOptions.queries) {
|
for (const query of traceToMetricsOptions.queries) {
|
||||||
const expr = buildMetricsQuery(query, traceToMetricsOptions?.tags || [], span);
|
const expr =
|
||||||
|
query.query ||
|
||||||
|
`histogram_quantile(0.5, sum(rate(traces_spanmetrics_latency_bucket{service="${span.process.serviceName}"}[5m])) by (le))`;
|
||||||
const dataLink: DataLink<PromQuery> = {
|
const dataLink: DataLink<PromQuery> = {
|
||||||
title: metricsDataSourceSettings.name,
|
title: metricsDataSourceSettings.name,
|
||||||
url: '',
|
url: '',
|
||||||
@ -272,10 +273,23 @@ function legacyCreateSpanLinkFactory(
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const tagsToUse =
|
||||||
|
traceToMetricsOptions.tags && traceToMetricsOptions.tags.length > 0
|
||||||
|
? traceToMetricsOptions.tags
|
||||||
|
: defaultKeys;
|
||||||
|
|
||||||
|
scopedVars = {
|
||||||
|
...scopedVars,
|
||||||
|
__tags: {
|
||||||
|
text: 'Tags',
|
||||||
|
value: getFormattedTags(span, tagsToUse),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
const link = mapInternalLinkToExplore({
|
const link = mapInternalLinkToExplore({
|
||||||
link: dataLink,
|
link: dataLink,
|
||||||
internalLink: dataLink.internal!,
|
internalLink: dataLink.internal!,
|
||||||
scopedVars: {},
|
scopedVars,
|
||||||
range: getTimeRangeFromSpan(span, {
|
range: getTimeRangeFromSpan(span, {
|
||||||
startMs: traceToMetricsOptions.spanStartTimeShift
|
startMs: traceToMetricsOptions.spanStartTimeShift
|
||||||
? rangeUtil.intervalToMs(traceToMetricsOptions.spanStartTimeShift)
|
? rangeUtil.intervalToMs(traceToMetricsOptions.spanStartTimeShift)
|
||||||
@ -568,34 +582,6 @@ function getTimeRangeFromSpan(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Interpolates span attributes into trace to metric query, or returns default query
|
|
||||||
function buildMetricsQuery(
|
|
||||||
query: TraceToMetricQuery,
|
|
||||||
tags: Array<{ key: string; value?: string }> = [],
|
|
||||||
span: TraceSpan
|
|
||||||
): string {
|
|
||||||
if (!query.query) {
|
|
||||||
return `histogram_quantile(0.5, sum(rate(traces_spanmetrics_latency_bucket{service="${span.process.serviceName}"}[5m])) by (le))`;
|
|
||||||
}
|
|
||||||
|
|
||||||
let expr = query.query;
|
|
||||||
if (tags.length && expr.indexOf('$__tags') !== -1) {
|
|
||||||
const spanTags = [...span.process.tags, ...span.tags];
|
|
||||||
const labels = tags.reduce<string[]>((acc, tag) => {
|
|
||||||
const tagValue = spanTags.find((t) => t.key === tag.key)?.value;
|
|
||||||
if (tagValue) {
|
|
||||||
acc.push(`${tag.value ? tag.value : tag.key}="${tagValue}"`);
|
|
||||||
}
|
|
||||||
return acc;
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const labelsQuery = labels?.join(', ');
|
|
||||||
expr = expr.replace(/\$__tags/g, labelsQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
return expr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Variables from trace that can be used in the query
|
* Variables from trace that can be used in the query
|
||||||
* @param trace
|
* @param trace
|
||||||
|
Loading…
Reference in New Issue
Block a user