metrics

package
v0.19.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2026 License: MPL-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package metrics provides Prometheus metrics for AWL subsystems.

Index

Constants

This section is empty.

Variables

View Source
var (
	DNSQueriesTotal = promauto.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "dns",
		Name:      "queries_total",
		Help:      "Total DNS queries handled.",
	}, []string{"handler"})

	DNSQueryErrorsTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "dns",
		Name:      "query_errors_total",
		Help:      "Total DNS query errors (upstream failures).",
	})

	DNSQueryDurationSeconds = promauto.NewHistogram(prometheus.HistogramOpts{
		Namespace: namespace,
		Subsystem: "dns",
		Name:      "query_duration_seconds",
		Help:      "DNS query duration in seconds.",
		Buckets:   []float64{0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 10},
	})
)
View Source
var (
	NodeInfo = promauto.NewGaugeVec(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "node",
		Name:      "info",
		Help:      "Static node information.",
	}, []string{"version", "peer_id", "go_version", "os", "arch"})

	NodeUptimeSeconds = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "node",
		Name:      "uptime_seconds",
		Help:      "Node uptime in seconds.",
	})

	NodeStartTimestamp = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "node",
		Name:      "start_timestamp",
		Help:      "Unix timestamp of node start.",
	})
)
View Source
var (
	P2PBootstrapPeersTotal = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "p2p",
		Name:      "bootstrap_peers_total",
		Help:      "Total number of configured bootstrap peers.",
	})

	P2PBootstrapPeersConnected = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "p2p",
		Name:      "bootstrap_peers_connected",
		Help:      "Number of connected bootstrap peers.",
	})

	P2PDHTRoutingTableSize = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "p2p",
		Name:      "dht_routing_table_size",
		Help:      "DHT routing table size.",
	})

	P2POpenConnections = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "p2p",
		Name:      "open_connections",
		Help:      "Number of open connections.",
	})

	P2POpenStreams = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "p2p",
		Name:      "open_streams",
		Help:      "Number of open streams.",
	})

	P2PConnectedPeers = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "p2p",
		Name:      "connected_peers",
		Help:      "Total number of connected peers (all, not just known).",
	})

	P2PPeerLatencySeconds = promauto.NewGaugeVec(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "p2p",
		Name:      "peer_latency_seconds",
		Help:      "Last measured latency to known peers in seconds.",
	}, []string{"peer_id"})
)
View Source
var (
	PeersKnownTotal = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "known_total",
		Help:      "Total number of known peers.",
	})

	PeersConnected = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "connected",
		Help:      "Number of currently connected known peers.",
	})

	PeersConfirmedTotal = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "confirmed_total",
		Help:      "Number of confirmed (mutual) peers.",
	})

	PeersBlockedTotal = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "blocked_total",
		Help:      "Number of blocked peers.",
	})

	PeersAuthRequestsIngoing = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "auth_requests_ingoing",
		Help:      "Number of pending ingoing auth requests.",
	})

	PeersAuthRequestsOutgoing = promauto.NewGauge(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "auth_requests_outgoing",
		Help:      "Number of pending outgoing auth requests.",
	})

	PeersAuthRequestsSentTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "auth_requests_sent_total",
		Help:      "Total number of auth requests sent.",
	})

	PeersAuthRequestsReceivedTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "auth_requests_received_total",
		Help:      "Total number of auth requests received.",
	})

	PeersStatusRequestsSentTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "status_requests_sent_total",
		Help:      "Total number of status requests sent.",
	})

	PeersStatusRequestsReceivedTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "status_requests_received_total",
		Help:      "Total number of status requests received.",
	})

	PeersConnectionEventsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "peers",
		Name:      "connection_events_total",
		Help:      "Total peer connection events.",
	}, []string{"event"})
)
View Source
var (
	SOCKS5ConnectionsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "socks5",
		Name:      "connections_total",
		Help:      "Total SOCKS5 connections.",
	}, []string{"direction"})

	SOCKS5ActiveConnections = promauto.NewGaugeVec(prometheus.GaugeOpts{
		Namespace: namespace,
		Subsystem: "socks5",
		Name:      "active_connections",
		Help:      "Current active SOCKS5 connections.",
	}, []string{"direction"})

	// TODO: add?
	SOCKS5BytesTransferredTotal = promauto.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "socks5",
		Name:      "bytes_transferred_total",
		Help:      "Total bytes transferred via SOCKS5.",
	}, []string{"direction"})

	SOCKS5ErrorsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "socks5",
		Name:      "errors_total",
		Help:      "Total SOCKS5 errors.",
	}, []string{"direction", "reason"})

	SOCKS5ConnectionDurationSeconds = promauto.NewHistogramVec(prometheus.HistogramOpts{
		Namespace: namespace,
		Subsystem: "socks5",
		Name:      "connection_duration_seconds",
		Help:      "SOCKS5 connection duration in seconds.",
		Buckets:   append(slices.Clone(prometheus.DefBuckets), 20, 40, 80, 160, 320, 640, 1280),
	}, []string{"direction"})
)
View Source
var (
	VPNPacketsSentTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "packets_sent_total",
		Help:      "Total VPN packets written to tunnel streams.",
	})

	VPNPacketsReceivedTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "packets_received_total",
		Help:      "Total VPN packets received from tunnel streams.",
	})

	VPNBytesSentTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "bytes_sent_total",
		Help:      "Total VPN bytes sent via tunnel streams.",
	})

	VPNBytesReceivedTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "bytes_received_total",
		Help:      "Total VPN bytes received from tunnel streams.",
	})

	VPNPacketsDroppedTotal = promauto.NewCounterVec(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "packets_dropped_total",
		Help:      "Total VPN packets dropped.",
	}, []string{"reason"})

	VPNTunReadErrorsTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "tun_read_errors_total",
		Help:      "Total TUN device read errors.",
	})

	VPNTunWriteErrorsTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "tun_write_errors_total",
		Help:      "Total TUN device write errors.",
	})

	VPNStreamOpenErrorsTotal = promauto.NewCounter(prometheus.CounterOpts{
		Namespace: namespace,
		Subsystem: "vpn",
		Name:      "stream_open_errors_total",
		Help:      "Total errors opening tunnel streams.",
	})
)

Functions

func SetNodeInfo

func SetNodeInfo(version, peerID string)

SetNodeInfo sets the static node info gauge and the start timestamp.

func StartBackgroundUpdater

func StartBackgroundUpdater(ctx context.Context, conf ConfigMetrics, p2pMetrics P2pMetrics)

StartBackgroundUpdater periodically updates gauge-type metrics from their data sources.

Types

type ConfigMetrics

type ConfigMetrics interface {
	GetKnownPeersSnapshot() (total, confirmed, connected int, peerIDs []peer.ID)
	GetBlockedPeersCount() int
	GetAuthRequestCounts() (ingoing, outgoing int)
}

ConfigMetrics is an interface for getting config data used by the background updater.

type P2pMetrics

type P2pMetrics interface {
	ConnectedPeersCount() int
	OpenConnectionsCount() int
	OpenStreamsCount() int64
	RoutingTableSize() int
	BootstrapPeersStats() (total int, connected int)
	IsConnected(peerID peer.ID) bool
	GetPeerLatency(id peer.ID) time.Duration
}

P2pMetrics is an interface for getting p2p network stats used by the background updater.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL