mirror of
https://github.com/eko/pihole-exporter.git
synced 2024-11-24 11:37:03 +01:00
227 lines
6.8 KiB
Go
227 lines
6.8 KiB
Go
package metrics
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
// DomainsBlocked - The number of domains being blocked by Pi-hole.
|
|
DomainsBlocked = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "domains_being_blocked",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of domains being blocked",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// DNSQueriesToday - The number of DNS requests made over Pi-hole over the current day.
|
|
DNSQueriesToday = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "dns_queries_today",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of DNS queries made over the current day",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// AdsBlockedToday - The number of ads blocked by Pi-hole over the current day.
|
|
AdsBlockedToday = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "ads_blocked_today",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of ads blocked over the current day",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// AdsPercentageToday - The percentage of ads blocked by Pi-hole over the current day.
|
|
AdsPercentageToday = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "ads_percentage_today",
|
|
Namespace: "pihole",
|
|
Help: "This represent the percentage of ads blocked over the current day",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// UniqueDomains - The number of unique domains seen by Pi-hole.
|
|
UniqueDomains = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "unique_domains",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of unique domains seen",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// QueriesForwarded - The number of queries forwarded by Pi-hole.
|
|
QueriesForwarded = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "queries_forwarded",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of queries forwarded",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// QueriesCached - The number of queries cached by Pi-hole.
|
|
QueriesCached = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "queries_cached",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of queries cached",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// ClientsEverSeen - The number of clients ever seen by Pi-hole.
|
|
ClientsEverSeen = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "clients_ever_seen",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of clients ever seen",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// UniqueClients - The number of unique clients seen by Pi-hole.
|
|
UniqueClients = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "unique_clients",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of unique clients seen",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// DNSQueriesAllTypes - The number of DNS queries made for all types by Pi-hole.
|
|
DNSQueriesAllTypes = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "dns_queries_all_types",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of DNS queries made for all types",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// Reply - The number of replies made for every types by Pi-hole.
|
|
Reply = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "reply",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of replies made for all types",
|
|
},
|
|
[]string{"hostname", "type"},
|
|
)
|
|
|
|
// TopQueries - The number of top queries made by Pi-hole by domain.
|
|
TopQueries = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "top_queries",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of top queries made by Pi-hole by domain",
|
|
},
|
|
[]string{"hostname", "domain"},
|
|
)
|
|
|
|
// TopAds - The number of top ads made by Pi-hole by domain.
|
|
TopAds = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "top_ads",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of top ads made by Pi-hole by domain",
|
|
},
|
|
[]string{"hostname", "domain"},
|
|
)
|
|
|
|
// TopSources - The number of top sources requests made by Pi-hole by source host.
|
|
TopSources = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "top_sources",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of top sources requests made by Pi-hole by source host",
|
|
},
|
|
[]string{"hostname", "source"},
|
|
)
|
|
|
|
// ForwardDestinations - The number of forward destinations requests made by Pi-hole by destination.
|
|
ForwardDestinations = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "forward_destinations",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of forward destinations requests made by Pi-hole by destination",
|
|
},
|
|
[]string{"hostname", "destination"},
|
|
)
|
|
|
|
// QueryTypes - The number of queries made by Pi-hole by type.
|
|
QueryTypes = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "querytypes",
|
|
Namespace: "pihole",
|
|
Help: "This represent the number of queries made by Pi-hole by type",
|
|
},
|
|
[]string{"hostname", "type"},
|
|
)
|
|
|
|
// Status - Is Pi-hole enabled?
|
|
Status = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "status",
|
|
Namespace: "pihole",
|
|
Help: "This if Pi-hole is enabled",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// QueriesLast10min - Number of queries in the last full slot of 10 minutes
|
|
QueriesLast10min = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "queries_last_10min",
|
|
Namespace: "pihole",
|
|
Help: "Number of queries in the last full slot of 10 minutes",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
|
|
// AdsLast10min - Number of ads in the last full slot of 10 minutes
|
|
AdsLast10min = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: "ads_last_10min",
|
|
Namespace: "pihole",
|
|
Help: "Number of ads in the last full slot of 10 minutes",
|
|
},
|
|
[]string{"hostname"},
|
|
)
|
|
)
|
|
|
|
// Init initializes all Prometheus metrics made available by Pi-hole exporter.
|
|
func Init() {
|
|
initMetric("domains_blocked", DomainsBlocked)
|
|
initMetric("dns_queries_today", DNSQueriesToday)
|
|
initMetric("ads_blocked_today", AdsBlockedToday)
|
|
initMetric("ads_percentag_today", AdsPercentageToday)
|
|
initMetric("unique_domains", UniqueDomains)
|
|
initMetric("queries_forwarded", QueriesForwarded)
|
|
initMetric("queries_cached", QueriesCached)
|
|
initMetric("clients_ever_seen", ClientsEverSeen)
|
|
initMetric("unique_clients", UniqueClients)
|
|
initMetric("dns_queries_all_types", DNSQueriesAllTypes)
|
|
initMetric("reply", Reply)
|
|
initMetric("top_queries", TopQueries)
|
|
initMetric("top_ads", TopAds)
|
|
initMetric("top_sources", TopSources)
|
|
initMetric("forward_destinations", ForwardDestinations)
|
|
initMetric("querytypes", QueryTypes)
|
|
initMetric("status", Status)
|
|
initMetric("queries_last_10min", QueriesLast10min)
|
|
initMetric("ads_last_10min", AdsLast10min)
|
|
}
|
|
|
|
func initMetric(name string, metric *prometheus.GaugeVec) {
|
|
prometheus.MustRegister(metric)
|
|
log.Info("New Prometheus metric registered: ", name)
|
|
}
|