Update metrics (#51117)

pull/51370/head
Joey Tawadrous 3 years ago committed by GitHub
parent f7db3d2ae6
commit 6b407f7265
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      docs/sources/datasources/tempo.md
  2. 28
      public/app/plugins/datasource/tempo/datasource.test.ts
  3. 4
      public/app/plugins/datasource/tempo/graphTransform.ts

@ -205,7 +205,7 @@ To display the APM table:
1. Select the **Service Graph** query type and run the query. 1. Select the **Service Graph** query type and run the query.
1. (Optional): filter your results. 1. (Optional): filter your results.
Note: The metric traces_spanmetrics_calls_total is used to display the name, rate & error rate columns and traces_spanmetrics_duration_seconds_bucket is used to display the duration column (these metrics will need to exist in your Prometheus datasource). Note: The metric traces_spanmetrics_calls_total is used to display the name, rate & error rate columns and traces_spanmetrics_latency_bucket is used to display the duration column (these metrics will need to exist in your Prometheus datasource).
Click a row in the rate, error rate, or duration columns to open a query in Prometheus with the span name of that row automatically set in the query. Click a row in the links column to open a query in Tempo with the span name of that row automatically set in the query. Click a row in the rate, error rate, or duration columns to open a query in Prometheus with the span name of that row automatically set in the query. Click a row in the links column to open a query in Tempo with the span name of that row automatically set in the query.

@ -392,7 +392,7 @@ describe('Tempo apm table', () => {
expect(response.data[0].fields[3].config.decimals).toBe(2); expect(response.data[0].fields[3].config.decimals).toBe(2);
expect(response.data[0].fields[3].config.links[0].title).toBe('Error Rate'); expect(response.data[0].fields[3].config.links[0].title).toBe('Error Rate');
expect(response.data[0].fields[3].config.links[0].internal.query.expr).toBe( expect(response.data[0].fields[3].config.links[0].internal.query.expr).toBe(
'sum(rate(traces_spanmetrics_calls_total{span_status="STATUS_CODE_ERROR",span_name="${__data.fields[0]}"}[$__rate_interval]))' 'sum(rate(traces_spanmetrics_calls_total{status_code="STATUS_CODE_ERROR",span_name="${__data.fields[0]}"}[$__rate_interval]))'
); );
expect(response.data[0].fields[3].config.links[0].internal.query.range).toBe(true); expect(response.data[0].fields[3].config.links[0].internal.query.range).toBe(true);
expect(response.data[0].fields[3].config.links[0].internal.query.exemplar).toBe(true); expect(response.data[0].fields[3].config.links[0].internal.query.exemplar).toBe(true);
@ -412,7 +412,7 @@ describe('Tempo apm table', () => {
expect(response.data[0].fields[5].config.unit).toBe('s'); expect(response.data[0].fields[5].config.unit).toBe('s');
expect(response.data[0].fields[5].config.links[0].title).toBe('Duration'); expect(response.data[0].fields[5].config.links[0].title).toBe('Duration');
expect(response.data[0].fields[5].config.links[0].internal.query.expr).toBe( expect(response.data[0].fields[5].config.links[0].internal.query.expr).toBe(
'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{span_name="${__data.fields[0]}"}[$__rate_interval])) by (le))' 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{span_name="${__data.fields[0]}"}[$__rate_interval])) by (le))'
); );
expect(response.data[0].fields[5].config.links[0].internal.query.range).toBe(true); expect(response.data[0].fields[5].config.links[0].internal.query.range).toBe(true);
expect(response.data[0].fields[5].config.links[0].internal.query.exemplar).toBe(true); expect(response.data[0].fields[5].config.links[0].internal.query.exemplar).toBe(true);
@ -445,25 +445,25 @@ describe('Tempo apm table', () => {
builtQuery = buildExpr( builtQuery = buildExpr(
{ {
expr: 'topk(5, sum(rate(traces_spanmetrics_calls_total{}[$__range])) by (span_name))', expr: 'topk(5, sum(rate(traces_spanmetrics_calls_total{}[$__range])) by (span_name))',
params: ['span_status="STATUS_CODE_ERROR"'], params: ['status_code="STATUS_CODE_ERROR"'],
}, },
'span_name=~"HTTP Client|HTTP GET|HTTP GET - root|HTTP POST|HTTP POST - post"', 'span_name=~"HTTP Client|HTTP GET|HTTP GET - root|HTTP POST|HTTP POST - post"',
targets targets
); );
expect(builtQuery).toBe( expect(builtQuery).toBe(
'topk(5, sum(rate(traces_spanmetrics_calls_total{span_status="STATUS_CODE_ERROR",span_name=~"HTTP Client|HTTP GET|HTTP GET - root|HTTP POST|HTTP POST - post"}[$__range])) by (span_name))' 'topk(5, sum(rate(traces_spanmetrics_calls_total{status_code="STATUS_CODE_ERROR",span_name=~"HTTP Client|HTTP GET|HTTP GET - root|HTTP POST|HTTP POST - post"}[$__range])) by (span_name))'
); );
builtQuery = buildExpr( builtQuery = buildExpr(
{ {
expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{}[$__range])) by (le))', expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{}[$__range])) by (le))',
params: ['span_status="STATUS_CODE_ERROR"'], params: ['status_code="STATUS_CODE_ERROR"'],
}, },
'span_name=~"HTTP Client"', 'span_name=~"HTTP Client"',
targets targets
); );
expect(builtQuery).toBe( expect(builtQuery).toBe(
'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{span_status="STATUS_CODE_ERROR",span_name=~"HTTP Client"}[$__range])) by (le))' 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{status_code="STATUS_CODE_ERROR",span_name=~"HTTP Client"}[$__range])) by (le))'
); );
targets = { targets: [{ queryType: 'serviceMap', serviceMapQuery: '{client="app",service="app"}' }] } as any; targets = { targets: [{ queryType: 'serviceMap', serviceMapQuery: '{client="app",service="app"}' }] } as any;
@ -527,7 +527,7 @@ describe('Tempo apm table', () => {
it('should make apm request correctly', () => { it('should make apm request correctly', () => {
const apmRequest = makeApmRequest([ const apmRequest = makeApmRequest([
'topk(5, sum(rate(traces_spanmetrics_calls_total{service="app"}[$__range])) by (span_name))"', 'topk(5, sum(rate(traces_spanmetrics_calls_total{service="app"}[$__range])) by (span_name))"',
'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{span_status="STATUS_CODE_ERROR",service="app",service="app",span_name=~"HTTP Client"}[$__range])) by (le))', 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{status_code="STATUS_CODE_ERROR",service="app",service="app",span_name=~"HTTP Client"}[$__range])) by (le))',
]); ]);
expect(apmRequest).toEqual([ expect(apmRequest).toEqual([
{ {
@ -537,8 +537,8 @@ describe('Tempo apm table', () => {
}, },
{ {
refId: refId:
'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{span_status="STATUS_CODE_ERROR",service="app",service="app",span_name=~"HTTP Client"}[$__range])) by (le))', 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{status_code="STATUS_CODE_ERROR",service="app",service="app",span_name=~"HTTP Client"}[$__range])) by (le))',
expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{span_status="STATUS_CODE_ERROR",service="app",service="app",span_name=~"HTTP Client"}[$__range])) by (le))', expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{status_code="STATUS_CODE_ERROR",service="app",service="app",span_name=~"HTTP Client"}[$__range])) by (le))',
instant: true, instant: true,
}, },
]); ]);
@ -627,12 +627,12 @@ const rateMetric = new MutableDataFrame({
const errorRateMetric = new MutableDataFrame({ const errorRateMetric = new MutableDataFrame({
refId: refId:
'topk(5, sum(rate(traces_spanmetrics_calls_total{span_status="STATUS_CODE_ERROR",span_name=~"HTTP Client|HTTP GET - root"}[$__range])) by (span_name))', 'topk(5, sum(rate(traces_spanmetrics_calls_total{status_code="STATUS_CODE_ERROR",span_name=~"HTTP Client|HTTP GET - root"}[$__range])) by (span_name))',
fields: [ fields: [
{ name: 'Time', values: [1653725618609, 1653725618609] }, { name: 'Time', values: [1653725618609, 1653725618609] },
{ name: 'span_name', values: ['HTTP Client', 'HTTP GET - root'] }, { name: 'span_name', values: ['HTTP Client', 'HTTP GET - root'] },
{ {
name: 'Value #topk(5, sum(rate(traces_spanmetrics_calls_total{span_status="STATUS_CODE_ERROR"}[$__range])) by (span_name))', name: 'Value #topk(5, sum(rate(traces_spanmetrics_calls_total{status_code="STATUS_CODE_ERROR"}[$__range])) by (span_name))',
values: [3.75164671814457, 3.121331111401608], values: [3.75164671814457, 3.121331111401608],
}, },
], ],
@ -640,11 +640,11 @@ const errorRateMetric = new MutableDataFrame({
const durationMetric = new MutableDataFrame({ const durationMetric = new MutableDataFrame({
refId: refId:
'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{span_name=~"HTTP GET - root"}[$__range])) by (le))', 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{span_name=~"HTTP GET - root"}[$__range])) by (le))',
fields: [ fields: [
{ name: 'Time', values: [1653725618609] }, { name: 'Time', values: [1653725618609] },
{ {
name: 'Value #histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{span_name=~"HTTP GET - root"}[$__range])) by (le))', name: 'Value #histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{span_name=~"HTTP GET - root"}[$__range])) by (le))',
values: [0.12003505696757232], values: [0.12003505696757232],
}, },
], ],

@ -142,10 +142,10 @@ export const rateMetric = {
}; };
export const errorRateMetric = { export const errorRateMetric = {
expr: 'topk(5, sum(rate(traces_spanmetrics_calls_total{}[$__range])) by (span_name))', expr: 'topk(5, sum(rate(traces_spanmetrics_calls_total{}[$__range])) by (span_name))',
params: ['span_status="STATUS_CODE_ERROR"'], params: ['status_code="STATUS_CODE_ERROR"'],
}; };
export const durationMetric = { export const durationMetric = {
expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_duration_seconds_bucket{}[$__range])) by (le))', expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{}[$__range])) by (le))',
params: [], params: [],
}; };

Loading…
Cancel
Save