PublicDashboards: Add metric for public dashboard datasource query success (#55701)

Adds metric for which datasource queries are successful or not with pubdash.
This commit is contained in:
owensmallwood
2022-09-27 12:25:56 -06:00
committed by GitHub
parent 1485209287
commit 664aa795c1
4 changed files with 55 additions and 3 deletions

View File

@@ -4,6 +4,7 @@ import (
"runtime"
"github.com/grafana/grafana/pkg/infra/metrics/metricutil"
pubdash "github.com/grafana/grafana/pkg/services/publicdashboards/models"
"github.com/grafana/grafana/pkg/setting"
"github.com/prometheus/client_golang/prometheus"
)
@@ -104,6 +105,9 @@ var (
// MPublicDashboardRequestCount is a metric counter for public dashboards requests
MPublicDashboardRequestCount prometheus.Counter
// MPublicDashboardDatasourceQuerySuccess is a metric counter for successful queries labelled by datasource
MPublicDashboardDatasourceQuerySuccess *prometheus.CounterVec
)
// Timers
@@ -419,6 +423,12 @@ func init() {
Namespace: ExporterName,
})
MPublicDashboardDatasourceQuerySuccess = metricutil.NewCounterVecStartingAtZero(prometheus.CounterOpts{
Name: "public_dashboard_datasource_query_success",
Help: "counter for queries to public dashboard datasources labelled by datasource type and success status success/failed",
Namespace: ExporterName,
}, []string{"datasource", "status"}, map[string][]string{"status": pubdash.QueryResultStatuses})
MStatTotalDashboards = prometheus.NewGauge(prometheus.GaugeOpts{
Name: "stat_totals_dashboard",
Help: "total amount of dashboards",
@@ -664,5 +674,6 @@ func initMetricVars() {
StatsTotalDataKeys,
MStatTotalPublicDashboards,
MPublicDashboardRequestCount,
MPublicDashboardDatasourceQuerySuccess,
)
}

View File

@@ -24,6 +24,11 @@ func (e PublicDashboardErr) Error() string {
return "Dashboard Error"
}
const QuerySuccess = "success"
const QueryFailure = "failure"
var QueryResultStatuses = []string{QuerySuccess, QueryFailure}
var (
ErrPublicDashboardFailedGenerateUniqueUid = PublicDashboardErr{
Reason: "failed to generate unique public dashboard id",

View File

@@ -0,0 +1,36 @@
package service
import (
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/metrics"
"github.com/grafana/grafana/pkg/services/publicdashboards/models"
)
/**
A place to record relevant logs and metrics within the service layer of public dashboards
*/
func LogQuerySuccess(datasources []string, log log.Logger) {
log.Info("Successfully queried datasources for public dashboard", "datasources", datasources)
label := getLabelName(datasources)
metrics.MPublicDashboardDatasourceQuerySuccess.WithLabelValues(label, models.QuerySuccess).Inc()
}
func LogQueryFailure(datasources []string, log log.Logger, err error) {
log.Error("Error querying datasources for public dashboard", "error", err.Error(), "datasources", datasources)
label := getLabelName(datasources)
metrics.MPublicDashboardDatasourceQuerySuccess.WithLabelValues(label, models.QueryFailure).Inc()
}
func getLabelName(datasources []string) string {
size := len(datasources)
switch size {
case 0:
return "none"
case 1:
return datasources[0]
default:
return "mixed"
}
}

View File

@@ -207,15 +207,15 @@ func (pd *PublicDashboardServiceImpl) GetQueryDataResponse(ctx context.Context,
res, err := pd.QueryDataService.QueryDataMultipleSources(ctx, anonymousUser, skipCache, metricReq, true)
// We want to track which datasources were successful and which were not
reqDatasources := metricReq.GetUniqueDatasourceTypes()
if err != nil {
pd.log.Error("Error querying datasources for public dashboard", "error", err.Error(), "datasources", reqDatasources)
LogQueryFailure(reqDatasources, pd.log, err)
return nil, err
}
LogQuerySuccess(reqDatasources, pd.log)
pd.log.Info("Successfully queried datasources for public dashboard", "datasources", reqDatasources)
queries.SanitizeMetadataFromQueryData(res)
return res, nil
}