[v8.3.x] Tempo: Add request histogram to service graph datalink
This commit is contained in:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user