metrics.go (207 lines of code) (raw):

package main import ( "github.com/prometheus/client_golang/prometheus" ) var ( zonesActive prometheus.Gauge httpCountryRequests *TimestampedMetricVec httpCountryBytes *TimestampedMetricVec httpProtocolRequests *TimestampedMetricVec httpResponses *TimestampedMetricVec httpTLSRequests *TimestampedMetricVec httpColoRequests *TimestampedMetricVec httpColoBytes *TimestampedMetricVec httpCachedRequests *TimestampedMetricVec httpCachedBytes *TimestampedMetricVec firewallEvents *TimestampedMetricVec reputation *TimestampedMetricVec healthCheckEvents *TimestampedMetricVec networkErrorLogs *TimestampedMetricVec cfScrapes prometheus.Counter cfScrapeErrs prometheus.Counter cfLastSuccessTimestampSeconds prometheus.Gauge ) func registerMetrics(reg prometheus.Registerer) { // zone metrics zonesActive = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespace, Subsystem: "zones", Name: "active", Help: "Number of active zones in the target Cloudflare account", }, ) httpCountryRequests = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_country_requests_total", Help: "Number of HTTP requests by country.", }, []string{"zone", "client_country_name"}, ) httpColoBytes = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_colo_bytes_total", Help: "Number of HTTP bytes by Cloudflare colocation.", }, []string{"zone", "colocation"}, ) httpColoRequests = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_colo_requests_total", Help: "Number of HTTP requests by Cloudflare colocation.", }, []string{"zone", "colocation"}, ) httpCountryBytes = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_country_bytes_total", Help: "Number of HTTP bytes by country.", }, []string{"zone", "client_country_name"}, ) httpProtocolRequests = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_protocol_requests_total", Help: "Number of HTTP requests by protocol.", }, []string{"zone", "client_http_protocol"}, ) httpTLSRequests = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_tls_requests_total", Help: "Number of HTTP requests by TLS version.", }, []string{"zone", "client_tls_protocol"}, ) httpResponses = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_responses_total", Help: "Number of HTTP responses by status.", }, []string{"zone", "edge_response_status", "origin_response_status"}, ) httpCachedRequests = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_cached_requests_total", Help: "Number of cached HTTP requests served.", }, []string{"zone", "cacheStatus"}, ) httpCachedBytes = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "http_cached_bytes_total", Help: "Number of cached HTTP bytes served.", }, []string{"zone", "cacheStatus"}, ) firewallEvents = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "firewall_events_total", Help: "Number of firewall events.", }, []string{"zone", "action", "source", "ruleID", "edgeResponseStatus", "originResponseStatus"}, ) reputation = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "ip_reputation_requests_total", Help: "Requests grouped by country, IP reputation and Cloudflare product.", }, []string{"zone", "source", "reputation", "client_country_name"}, ) healthCheckEvents = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "health_check_events_total", Help: "Number of health check events.", }, []string{"zone", "failure_reason", "health_check_name", "health_status", "origin_response_status", "region", "scope"}, ) networkErrorLogs = NewTimestampedMetricVec( prometheus.CounterValue, prometheus.Opts{ Namespace: namespace, Subsystem: "zones", Name: "network_error_logs_total", Help: "Number of network error log events.", }, []string{"zone", "client_country_name", "client_ip_version", "colocation", "protocol", "phase", "type"}, ) // graphql metrics cfScrapes = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: namespace, Subsystem: "graphql", Name: "scrapes_total", Help: "Number of times this exporter has scraped cloudflare", }, ) cfScrapeErrs = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: namespace, Subsystem: "graphql", Name: "scrape_errors_total", Help: "Number of times this exporter has failed to scrape cloudflare", }, ) cfLastSuccessTimestampSeconds = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespace, Subsystem: "graphql", Name: "last_success_timestamp_seconds", Help: "Time that the analytics data was last updated.", }, ) if reg == nil { reg = prometheus.DefaultRegisterer } reg.MustRegister(zonesActive) reg.MustRegister(httpCountryRequests) reg.MustRegister(httpCountryBytes) reg.MustRegister(httpProtocolRequests) reg.MustRegister(httpTLSRequests) reg.MustRegister(httpColoBytes) reg.MustRegister(httpColoRequests) reg.MustRegister(httpResponses) reg.MustRegister(httpCachedRequests) reg.MustRegister(httpCachedBytes) reg.MustRegister(firewallEvents) reg.MustRegister(reputation) reg.MustRegister(healthCheckEvents) reg.MustRegister(networkErrorLogs) reg.MustRegister(cfScrapes) reg.MustRegister(cfScrapeErrs) reg.MustRegister(cfLastSuccessTimestampSeconds) }