mirror of
https://github.com/grafana/grafana.git
synced 2024-11-27 03:11:01 -06:00
41d432b5ae
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
592 lines
19 KiB
Go
592 lines
19 KiB
Go
package metrics
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
// ExporterName is used as namespace for exposing prometheus metrics
|
|
const ExporterName = "grafana"
|
|
|
|
var (
|
|
// MInstanceStart is a metric counter for started instances
|
|
MInstanceStart prometheus.Counter
|
|
|
|
// MPageStatus is a metric page http response status
|
|
MPageStatus *prometheus.CounterVec
|
|
|
|
// MApiStatus is a metric api http response status
|
|
MApiStatus *prometheus.CounterVec
|
|
|
|
// MProxyStatus is a metric proxy http response status
|
|
MProxyStatus *prometheus.CounterVec
|
|
|
|
// MHttpRequestTotal is a metric http request counter
|
|
MHttpRequestTotal *prometheus.CounterVec
|
|
|
|
// MHttpRequestSummary is a metric http request summary
|
|
MHttpRequestSummary *prometheus.SummaryVec
|
|
|
|
// MApiUserSignUpStarted is a metric amount of users who started the signup flow
|
|
MApiUserSignUpStarted prometheus.Counter
|
|
|
|
// MApiUserSignUpCompleted is a metric amount of users who completed the signup flow
|
|
MApiUserSignUpCompleted prometheus.Counter
|
|
|
|
// MApiUserSignUpInvite is a metric amount of users who have been invited
|
|
MApiUserSignUpInvite prometheus.Counter
|
|
|
|
// MApiDashboardSave is a metric summary for dashboard save duration
|
|
MApiDashboardSave prometheus.Summary
|
|
|
|
// MApiDashboardGet is a metric summary for dashboard get duration
|
|
MApiDashboardGet prometheus.Summary
|
|
|
|
// MApiDashboardSearch is a metric summary for dashboard search duration
|
|
MApiDashboardSearch prometheus.Summary
|
|
|
|
// MApiAdminUserCreate is a metric api admin user created counter
|
|
MApiAdminUserCreate prometheus.Counter
|
|
|
|
// MApiLoginPost is a metric api login post counter
|
|
MApiLoginPost prometheus.Counter
|
|
|
|
// MApiLoginOAuth is a metric api login oauth counter
|
|
MApiLoginOAuth prometheus.Counter
|
|
|
|
// MApiLoginSAML is a metric api login SAML counter
|
|
MApiLoginSAML prometheus.Counter
|
|
|
|
// MApiOrgCreate is a metric api org created counter
|
|
MApiOrgCreate prometheus.Counter
|
|
|
|
// MApiDashboardSnapshotCreate is a metric dashboard snapshots created
|
|
MApiDashboardSnapshotCreate prometheus.Counter
|
|
|
|
// MApiDashboardSnapshotExternal is a metric external dashboard snapshots created
|
|
MApiDashboardSnapshotExternal prometheus.Counter
|
|
|
|
// MApiDashboardSnapshotGet is a metric loaded dashboards
|
|
MApiDashboardSnapshotGet prometheus.Counter
|
|
|
|
// MApiDashboardInsert is a metric dashboards inserted
|
|
MApiDashboardInsert prometheus.Counter
|
|
|
|
// MAlertingResultState is a metric alert execution result counter
|
|
MAlertingResultState *prometheus.CounterVec
|
|
|
|
// MAlertingNotificationSent is a metric counter for how many alert notifications been sent
|
|
MAlertingNotificationSent *prometheus.CounterVec
|
|
|
|
// MAlertingNotificationSent is a metric counter for how many alert notifications that failed
|
|
MAlertingNotificationFailed *prometheus.CounterVec
|
|
|
|
// MAwsCloudWatchGetMetricStatistics is a metric counter for getting metric statistics from aws
|
|
MAwsCloudWatchGetMetricStatistics prometheus.Counter
|
|
|
|
// MAwsCloudWatchListMetrics is a metric counter for getting list of metrics from aws
|
|
MAwsCloudWatchListMetrics prometheus.Counter
|
|
|
|
// MAwsCloudWatchGetMetricData is a metric counter for getting metric data time series from aws
|
|
MAwsCloudWatchGetMetricData prometheus.Counter
|
|
|
|
// MDBDataSourceQueryByID is a metric counter for getting datasource by id
|
|
MDBDataSourceQueryByID prometheus.Counter
|
|
|
|
// LDAPUsersSyncExecutionTime is a metric summary for LDAP users sync execution duration
|
|
LDAPUsersSyncExecutionTime prometheus.Summary
|
|
|
|
// MRenderingRequestTotal is a metric counter for image rendering requests
|
|
MRenderingRequestTotal *prometheus.CounterVec
|
|
|
|
// MRenderingQueue is a metric gauge for image rendering queue size
|
|
MRenderingQueue prometheus.Gauge
|
|
)
|
|
|
|
// Timers
|
|
var (
|
|
// MDataSourceProxyReqTimer is a metric summary for dataproxy request duration
|
|
MDataSourceProxyReqTimer prometheus.Summary
|
|
|
|
// MAlertingExecutionTime is a metric summary of alert execution duration
|
|
MAlertingExecutionTime prometheus.Summary
|
|
|
|
// MRenderingSummary is a metric summary for image rendering request duration
|
|
MRenderingSummary *prometheus.SummaryVec
|
|
)
|
|
|
|
// StatTotals
|
|
var (
|
|
// MAlertingActiveAlerts is a metric amount of active alerts
|
|
MAlertingActiveAlerts prometheus.Gauge
|
|
|
|
// MStatTotalDashboards is a metric total amount of dashboards
|
|
MStatTotalDashboards prometheus.Gauge
|
|
|
|
// MStatTotalUsers is a metric total amount of users
|
|
MStatTotalUsers prometheus.Gauge
|
|
|
|
// MStatActiveUsers is a metric number of active users
|
|
MStatActiveUsers prometheus.Gauge
|
|
|
|
// MStatTotalOrgs is a metric total amount of orgs
|
|
MStatTotalOrgs prometheus.Gauge
|
|
|
|
// MStatTotalPlaylists is a metric total amount of playlists
|
|
MStatTotalPlaylists prometheus.Gauge
|
|
|
|
// StatsTotalViewers is a metric total amount of viewers
|
|
StatsTotalViewers prometheus.Gauge
|
|
|
|
// StatsTotalEditors is a metric total amount of editors
|
|
StatsTotalEditors prometheus.Gauge
|
|
|
|
// StatsTotalAdmins is a metric total amount of admins
|
|
StatsTotalAdmins prometheus.Gauge
|
|
|
|
// StatsTotalActiveViewers is a metric total amount of viewers
|
|
StatsTotalActiveViewers prometheus.Gauge
|
|
|
|
// StatsTotalActiveEditors is a metric total amount of active editors
|
|
StatsTotalActiveEditors prometheus.Gauge
|
|
|
|
// StatsTotalActiveAdmins is a metric total amount of active admins
|
|
StatsTotalActiveAdmins prometheus.Gauge
|
|
|
|
// StatsTotalDataSources is a metric total number of defined datasources, labeled by pluginId
|
|
StatsTotalDataSources *prometheus.GaugeVec
|
|
|
|
// StatsTotalAnnotations is a metric of total number of annotations stored in Grafana.
|
|
StatsTotalAnnotations prometheus.Gauge
|
|
|
|
// StatsTotalDashboardVersions is a metric of total number of dashboard versions stored in Grafana.
|
|
StatsTotalDashboardVersions prometheus.Gauge
|
|
|
|
// grafanaBuildVersion is a metric with a constant '1' value labeled by version, revision, branch, and goversion from which Grafana was built
|
|
grafanaBuildVersion *prometheus.GaugeVec
|
|
|
|
grafanaPluginBuildInfoDesc *prometheus.GaugeVec
|
|
)
|
|
|
|
func init() {
|
|
httpStatusCodes := []string{"200", "404", "500", "unknown"}
|
|
objectiveMap := map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}
|
|
|
|
MInstanceStart = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "instance_start_total",
|
|
Help: "counter for started instances",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MPageStatus = newCounterVecStartingAtZero(
|
|
prometheus.CounterOpts{
|
|
Name: "page_response_status_total",
|
|
Help: "page http response status",
|
|
Namespace: ExporterName,
|
|
}, []string{"code"}, httpStatusCodes...)
|
|
|
|
MApiStatus = newCounterVecStartingAtZero(
|
|
prometheus.CounterOpts{
|
|
Name: "api_response_status_total",
|
|
Help: "api http response status",
|
|
Namespace: ExporterName,
|
|
}, []string{"code"}, httpStatusCodes...)
|
|
|
|
MProxyStatus = newCounterVecStartingAtZero(
|
|
prometheus.CounterOpts{
|
|
Name: "proxy_response_status_total",
|
|
Help: "proxy http response status",
|
|
Namespace: ExporterName,
|
|
}, []string{"code"}, httpStatusCodes...)
|
|
|
|
MHttpRequestTotal = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "http_request_total",
|
|
Help: "http request counter",
|
|
},
|
|
[]string{"handler", "statuscode", "method"},
|
|
)
|
|
|
|
MHttpRequestSummary = prometheus.NewSummaryVec(
|
|
prometheus.SummaryOpts{
|
|
Name: "http_request_duration_milliseconds",
|
|
Help: "http request summary",
|
|
Objectives: objectiveMap,
|
|
},
|
|
[]string{"handler", "statuscode", "method"},
|
|
)
|
|
|
|
MApiUserSignUpStarted = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_user_signup_started_total",
|
|
Help: "amount of users who started the signup flow",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiUserSignUpCompleted = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_user_signup_completed_total",
|
|
Help: "amount of users who completed the signup flow",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiUserSignUpInvite = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_user_signup_invite_total",
|
|
Help: "amount of users who have been invited",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiDashboardSave = prometheus.NewSummary(prometheus.SummaryOpts{
|
|
Name: "api_dashboard_save_milliseconds",
|
|
Help: "summary for dashboard save duration",
|
|
Objectives: objectiveMap,
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiDashboardGet = prometheus.NewSummary(prometheus.SummaryOpts{
|
|
Name: "api_dashboard_get_milliseconds",
|
|
Help: "summary for dashboard get duration",
|
|
Objectives: objectiveMap,
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiDashboardSearch = prometheus.NewSummary(prometheus.SummaryOpts{
|
|
Name: "api_dashboard_search_milliseconds",
|
|
Help: "summary for dashboard search duration",
|
|
Objectives: objectiveMap,
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiAdminUserCreate = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_admin_user_created_total",
|
|
Help: "api admin user created counter",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiLoginPost = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_login_post_total",
|
|
Help: "api login post counter",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiLoginOAuth = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_login_oauth_total",
|
|
Help: "api login oauth counter",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiLoginSAML = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_login_saml_total",
|
|
Help: "api login saml counter",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiOrgCreate = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_org_create_total",
|
|
Help: "api org created counter",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiDashboardSnapshotCreate = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_dashboard_snapshot_create_total",
|
|
Help: "dashboard snapshots created",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiDashboardSnapshotExternal = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_dashboard_snapshot_external_total",
|
|
Help: "external dashboard snapshots created",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiDashboardSnapshotGet = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_dashboard_snapshot_get_total",
|
|
Help: "loaded dashboards",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MApiDashboardInsert = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "api_models_dashboard_insert_total",
|
|
Help: "dashboards inserted ",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MAlertingResultState = prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Name: "alerting_result_total",
|
|
Help: "alert execution result counter",
|
|
Namespace: ExporterName,
|
|
}, []string{"state"})
|
|
|
|
MAlertingNotificationSent = prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Name: "alerting_notification_sent_total",
|
|
Help: "counter for how many alert notifications have been sent",
|
|
Namespace: ExporterName,
|
|
}, []string{"type"})
|
|
|
|
MAlertingNotificationFailed = prometheus.NewCounterVec(prometheus.CounterOpts{
|
|
Name: "alerting_notification_failed_total",
|
|
Help: "counter for how many alert notifications have failed",
|
|
Namespace: ExporterName,
|
|
}, []string{"type"})
|
|
|
|
MAwsCloudWatchGetMetricStatistics = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "aws_cloudwatch_get_metric_statistics_total",
|
|
Help: "counter for getting metric statistics from aws",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MAwsCloudWatchListMetrics = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "aws_cloudwatch_list_metrics_total",
|
|
Help: "counter for getting list of metrics from aws",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MAwsCloudWatchGetMetricData = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "aws_cloudwatch_get_metric_data_total",
|
|
Help: "counter for getting metric data time series from aws",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MDBDataSourceQueryByID = newCounterStartingAtZero(prometheus.CounterOpts{
|
|
Name: "db_datasource_query_by_id_total",
|
|
Help: "counter for getting datasource by id",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
LDAPUsersSyncExecutionTime = prometheus.NewSummary(prometheus.SummaryOpts{
|
|
Name: "ldap_users_sync_execution_time",
|
|
Help: "summary for LDAP users sync execution duration",
|
|
Objectives: objectiveMap,
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MRenderingRequestTotal = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Name: "rendering_request_total",
|
|
Help: "counter for image rendering requests",
|
|
Namespace: ExporterName,
|
|
},
|
|
[]string{"status"},
|
|
)
|
|
|
|
MRenderingSummary = prometheus.NewSummaryVec(
|
|
prometheus.SummaryOpts{
|
|
Name: "rendering_request_duration_milliseconds",
|
|
Help: "summary of image rendering request duration",
|
|
Objectives: objectiveMap,
|
|
Namespace: ExporterName,
|
|
},
|
|
[]string{"status"},
|
|
)
|
|
|
|
MRenderingQueue = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "rendering_queue_size",
|
|
Help: "size of image rendering queue",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MDataSourceProxyReqTimer = prometheus.NewSummary(prometheus.SummaryOpts{
|
|
Name: "api_dataproxy_request_all_milliseconds",
|
|
Help: "summary for dataproxy request duration",
|
|
Objectives: objectiveMap,
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MAlertingExecutionTime = prometheus.NewSummary(prometheus.SummaryOpts{
|
|
Name: "alerting_execution_time_milliseconds",
|
|
Help: "summary of alert execution duration",
|
|
Objectives: objectiveMap,
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MAlertingActiveAlerts = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "alerting_active_alerts",
|
|
Help: "amount of active alerts",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatTotalDashboards = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_dashboard",
|
|
Help: "total amount of dashboards",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatTotalUsers = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_total_users",
|
|
Help: "total amount of users",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatActiveUsers = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_active_users",
|
|
Help: "number of active users",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatTotalOrgs = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_total_orgs",
|
|
Help: "total amount of orgs",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatTotalPlaylists = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_total_playlists",
|
|
Help: "total amount of playlists",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalViewers = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_viewers",
|
|
Help: "total amount of viewers",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalEditors = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_editors",
|
|
Help: "total amount of editors",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalAdmins = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_admins",
|
|
Help: "total amount of admins",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalActiveViewers = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_active_viewers",
|
|
Help: "total amount of viewers",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalActiveEditors = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_active_editors",
|
|
Help: "total amount of active editors",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalActiveAdmins = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_active_admins",
|
|
Help: "total amount of active admins",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalDataSources = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
|
Name: "stat_totals_datasource",
|
|
Help: "total number of defined datasources, labeled by pluginId",
|
|
Namespace: ExporterName,
|
|
}, []string{"plugin_id"})
|
|
|
|
grafanaBuildVersion = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
|
Name: "build_info",
|
|
Help: "A metric with a constant '1' value labeled by version, revision, branch, and goversion from which Grafana was built",
|
|
Namespace: ExporterName,
|
|
}, []string{"version", "revision", "branch", "goversion", "edition"})
|
|
|
|
grafanaPluginBuildInfoDesc = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
|
Name: "plugin_build_info",
|
|
Help: "A metric with a constant '1' value labeled by pluginId, pluginType and version from which Grafana plugin was built",
|
|
Namespace: ExporterName,
|
|
}, []string{"plugin_id", "plugin_type", "version"})
|
|
|
|
StatsTotalDashboardVersions = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_dashboard_versions",
|
|
Help: "total amount of dashboard versions in the database",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
StatsTotalAnnotations = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_totals_annotations",
|
|
Help: "total amount of annotations in the database",
|
|
Namespace: ExporterName,
|
|
})
|
|
}
|
|
|
|
// SetBuildInformation sets the build information for this binary
|
|
func SetBuildInformation(version, revision, branch string) {
|
|
edition := "oss"
|
|
if setting.IsEnterprise {
|
|
edition = "enterprise"
|
|
}
|
|
|
|
grafanaBuildVersion.WithLabelValues(version, revision, branch, runtime.Version(), edition).Set(1)
|
|
}
|
|
|
|
func SetPluginBuildInformation(pluginID, pluginType, version string) {
|
|
grafanaPluginBuildInfoDesc.WithLabelValues(pluginID, pluginType, version).Set(1)
|
|
}
|
|
|
|
func initMetricVars() {
|
|
prometheus.MustRegister(
|
|
MInstanceStart,
|
|
MPageStatus,
|
|
MApiStatus,
|
|
MProxyStatus,
|
|
MHttpRequestTotal,
|
|
MHttpRequestSummary,
|
|
MApiUserSignUpStarted,
|
|
MApiUserSignUpCompleted,
|
|
MApiUserSignUpInvite,
|
|
MApiDashboardSave,
|
|
MApiDashboardGet,
|
|
MApiDashboardSearch,
|
|
MDataSourceProxyReqTimer,
|
|
MAlertingExecutionTime,
|
|
MApiAdminUserCreate,
|
|
MApiLoginPost,
|
|
MApiLoginOAuth,
|
|
MApiLoginSAML,
|
|
MApiOrgCreate,
|
|
MApiDashboardSnapshotCreate,
|
|
MApiDashboardSnapshotExternal,
|
|
MApiDashboardSnapshotGet,
|
|
MApiDashboardInsert,
|
|
MAlertingResultState,
|
|
MAlertingNotificationSent,
|
|
MAlertingNotificationFailed,
|
|
MAwsCloudWatchGetMetricStatistics,
|
|
MAwsCloudWatchListMetrics,
|
|
MAwsCloudWatchGetMetricData,
|
|
MDBDataSourceQueryByID,
|
|
LDAPUsersSyncExecutionTime,
|
|
MRenderingRequestTotal,
|
|
MRenderingSummary,
|
|
MRenderingQueue,
|
|
MAlertingActiveAlerts,
|
|
MStatTotalDashboards,
|
|
MStatTotalUsers,
|
|
MStatActiveUsers,
|
|
MStatTotalOrgs,
|
|
MStatTotalPlaylists,
|
|
StatsTotalViewers,
|
|
StatsTotalEditors,
|
|
StatsTotalAdmins,
|
|
StatsTotalActiveViewers,
|
|
StatsTotalActiveEditors,
|
|
StatsTotalActiveAdmins,
|
|
StatsTotalDataSources,
|
|
grafanaBuildVersion,
|
|
grafanaPluginBuildInfoDesc,
|
|
StatsTotalDashboardVersions,
|
|
StatsTotalAnnotations,
|
|
)
|
|
}
|
|
|
|
func newCounterVecStartingAtZero(opts prometheus.CounterOpts, labels []string, labelValues ...string) *prometheus.CounterVec {
|
|
counter := prometheus.NewCounterVec(opts, labels)
|
|
|
|
for _, label := range labelValues {
|
|
counter.WithLabelValues(label).Add(0)
|
|
}
|
|
|
|
return counter
|
|
}
|
|
|
|
func newCounterStartingAtZero(opts prometheus.CounterOpts, labelValues ...string) prometheus.Counter {
|
|
counter := prometheus.NewCounter(opts)
|
|
counter.Add(0)
|
|
|
|
return counter
|
|
}
|