mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
Prometheus: Add query tracking (#61004)
* merge fix * remove comments from debugging
This commit is contained in:
parent
e7cd6eb13c
commit
6be341d505
@ -51,6 +51,7 @@ import { renderLegendFormat } from './legend';
|
||||
import PrometheusMetricFindQuery from './metric_find_query';
|
||||
import { getInitHints, getQueryHints } from './query_hints';
|
||||
import { getOriginalMetricName, transform, transformV2 } from './result_transformer';
|
||||
import { trackQuery } from './tracking';
|
||||
import {
|
||||
ExemplarTraceIdDestination,
|
||||
PromDataErrorResponse,
|
||||
@ -440,13 +441,14 @@ export class PrometheusDatasource
|
||||
query(request: DataQueryRequest<PromQuery>): Observable<DataQueryResponse> {
|
||||
if (this.access === 'proxy') {
|
||||
const targets = request.targets.map((target) => this.processTargetV2(target, request));
|
||||
|
||||
return super
|
||||
.query({ ...request, targets: targets.flat() })
|
||||
.pipe(
|
||||
const startTime = new Date();
|
||||
return super.query({ ...request, targets: targets.flat() }).pipe(
|
||||
map((response) =>
|
||||
transformV2(response, request, { exemplarTraceIdDestinations: this.exemplarTraceIdDestinations })
|
||||
)
|
||||
),
|
||||
tap((response: DataQueryResponse) => {
|
||||
trackQuery(response, request, startTime);
|
||||
})
|
||||
);
|
||||
// Run queries trough browser/proxy
|
||||
} else {
|
||||
@ -607,6 +609,7 @@ export class PrometheusDatasource
|
||||
...this.getRangeScopedVars(options.range),
|
||||
});
|
||||
}
|
||||
|
||||
query.step = interval;
|
||||
|
||||
let expr = target.expr;
|
||||
|
46
public/app/plugins/datasource/prometheus/tracking.ts
Normal file
46
public/app/plugins/datasource/prometheus/tracking.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import { CoreApp, DataQueryRequest, DataQueryResponse } from '@grafana/data';
|
||||
import { reportInteraction, config } from '@grafana/runtime';
|
||||
|
||||
import { PromQuery } from './types';
|
||||
|
||||
export function trackQuery(
|
||||
response: DataQueryResponse,
|
||||
request: DataQueryRequest<PromQuery> & { targets: PromQuery[] },
|
||||
startTime: Date
|
||||
): void {
|
||||
const { app, targets: queries } = request;
|
||||
// We do want to track panel-editor and explore
|
||||
// We do not want to track queries from the dashboard or viewing a panel
|
||||
// also included in the tracking is cloud-alerting, unified-alerting, and unknown
|
||||
if (app === CoreApp.Dashboard || app === CoreApp.PanelViewer) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const query of queries) {
|
||||
reportInteraction('grafana_prometheus_query_executed', {
|
||||
app,
|
||||
grafana_version: config.buildInfo.version,
|
||||
has_data: response.data.some((frame) => frame.length > 0),
|
||||
has_error: response.error !== undefined,
|
||||
expr: query.expr,
|
||||
format: query.format,
|
||||
instant: query.instant,
|
||||
range: query.range,
|
||||
exemplar: query.exemplar,
|
||||
hinting: query.hinting,
|
||||
interval: query.interval,
|
||||
intervalFactor: query.intervalFactor,
|
||||
utcOffsetSec: query.utcOffsetSec,
|
||||
legend: query.legendFormat,
|
||||
valueWithRefId: query.valueWithRefId,
|
||||
requestId: query.requestId,
|
||||
showingGraph: query.showingGraph,
|
||||
showingTable: query.showingTable,
|
||||
editor_mode: query.editorMode,
|
||||
simultaneously_sent_query_count: queries.length,
|
||||
time_range_from: request?.range?.from?.toISOString(),
|
||||
time_range_to: request?.range?.to?.toISOString(),
|
||||
time_taken: Date.now() - startTime.getTime(),
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user