[v8.3.x] Tempo: Add request histogram to service graph datalink

This commit is contained in:
Connor Lindsey
2022-02-01 20:07:44 +01:00
committed by GitHub
parent 2bd51b506e
commit 9b628f4742
3 changed files with 64 additions and 6 deletions
@@ -97,7 +97,10 @@ describe('Tempo data source', () => {
expect(response.data).toHaveLength(2);
expect(response.data[0].name).toBe('Nodes');
expect(response.data[0].fields[0].values.length).toBe(3);
// Test Links
expect(response.data[0].fields[0].config.links.length).toBeGreaterThan(0);
expect(response.data[0].fields[0].config.links).toEqual(serviceGraphLinks);
expect(response.data[1].name).toBe('Edges');
expect(response.data[1].fields[0].values.length).toBe(2);
@@ -328,3 +331,40 @@ const mockInvalidJson = {
},
],
};
const serviceGraphLinks = [
{
url: '',
title: 'Request rate',
internal: {
query: {
expr: 'rate(traces_service_graph_request_total{server="${__data.fields.id}"}[$__interval])',
},
datasourceUid: 'prom',
datasourceName: 'Prometheus',
},
},
{
url: '',
title: 'Request histogram',
internal: {
query: {
expr:
'histogram_quantile(0.9, rate(traces_service_graph_request_server_seconds_bucket{server="${__data.fields.id}"}[$__interval]))',
},
datasourceUid: 'prom',
datasourceName: 'Prometheus',
},
},
{
url: '',
title: 'Failed request rate',
internal: {
query: {
expr: 'rate(traces_service_graph_request_failed_total{server="${__data.fields.id}"}[$__interval])',
},
datasourceUid: 'prom',
datasourceName: 'Prometheus',
},
},
];
@@ -18,7 +18,13 @@ import { identity, pick, pickBy, groupBy, startCase } from 'lodash';
import { LokiOptions, LokiQuery } from '../loki/types';
import { PrometheusDatasource } from '../prometheus/datasource';
import { PromQuery } from '../prometheus/types';
import { failedMetric, mapPromMetricsToServiceMap, serviceMapMetrics, totalsMetric } from './graphTransform';
import {
failedMetric,
histogramMetric,
mapPromMetricsToServiceMap,
serviceMapMetrics,
totalsMetric,
} from './graphTransform';
import {
transformTrace,
transformTraceList,
@@ -301,8 +307,21 @@ function serviceMapQuery(request: DataQueryRequest<TempoQuery>, datasourceUid: s
const { nodes, edges } = mapPromMetricsToServiceMap(responses, request.range);
nodes.fields[0].config = {
links: [
makePromLink('Total requests', totalsMetric, datasourceUid),
makePromLink('Failed requests', failedMetric, datasourceUid),
makePromLink(
'Request rate',
`rate(${totalsMetric}{server="\${__data.fields.id}"}[$__interval])`,
datasourceUid
),
makePromLink(
'Request histogram',
`histogram_quantile(0.9, rate(${histogramMetric}{server="\${__data.fields.id}"}[$__interval]))`,
datasourceUid
),
makePromLink(
'Failed request rate',
`rate(${failedMetric}{server="\${__data.fields.id}"}[$__interval])`,
datasourceUid
),
],
};
@@ -133,14 +133,13 @@ function findTraceDuration(view: DataFrameView<Row>): number {
export const secondsMetric = 'traces_service_graph_request_server_seconds_sum';
export const totalsMetric = 'traces_service_graph_request_total';
export const failedMetric = 'traces_service_graph_request_failed_total';
export const histogramMetric = 'traces_service_graph_request_server_seconds_bucket';
export const serviceMapMetrics = [
secondsMetric,
totalsMetric,
failedMetric,
// We don't show histogram in node graph at the moment but we could later add that into a node context menu.
// 'traces_service_graph_request_seconds_bucket',
// 'traces_service_graph_request_seconds_count',
histogramMetric,
// These are used for debugging the tempo collection so probably not useful for service map right now.
// 'traces_service_graph_unpaired_spans_total',
// 'traces_service_graph_untagged_spans_total',