mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
36
pkg/services/publicdashboards/service/logging.go
Normal file
36
pkg/services/publicdashboards/service/logging.go
Normal 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"
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user