113 lines
3.0 KiB
Go
113 lines
3.0 KiB
Go
package proxy
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
"github.com/cloudflare/cloudflared/connection"
|
|
)
|
|
|
|
// Metrics uses connection.MetricsNamespace(aka cloudflared) as namespace and connection.TunnelSubsystem
|
|
// (tunnel) as subsystem to keep them consistent with the previous qualifier.
|
|
|
|
var (
|
|
totalRequests = prometheus.NewCounter(
|
|
prometheus.CounterOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: connection.TunnelSubsystem,
|
|
Name: "total_requests",
|
|
Help: "Amount of requests proxied through all the tunnels",
|
|
},
|
|
)
|
|
concurrentRequests = prometheus.NewGauge(
|
|
prometheus.GaugeOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: connection.TunnelSubsystem,
|
|
Name: "concurrent_requests_per_tunnel",
|
|
Help: "Concurrent requests proxied through each tunnel",
|
|
},
|
|
)
|
|
responseByCode = prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: connection.TunnelSubsystem,
|
|
Name: "response_by_code",
|
|
Help: "Count of responses by HTTP status code",
|
|
},
|
|
[]string{"status_code"},
|
|
)
|
|
requestErrors = prometheus.NewCounter(
|
|
prometheus.CounterOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: connection.TunnelSubsystem,
|
|
Name: "request_errors",
|
|
Help: "Count of error proxying to origin",
|
|
},
|
|
)
|
|
activeTCPSessions = prometheus.NewGauge(
|
|
prometheus.GaugeOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: "tcp",
|
|
Name: "active_sessions",
|
|
Help: "Concurrent count of TCP sessions that are being proxied to any origin",
|
|
},
|
|
)
|
|
totalTCPSessions = prometheus.NewCounter(
|
|
prometheus.CounterOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: "tcp",
|
|
Name: "total_sessions",
|
|
Help: "Total count of TCP sessions that have been proxied to any origin",
|
|
},
|
|
)
|
|
connectLatency = prometheus.NewHistogram(
|
|
prometheus.HistogramOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: "proxy",
|
|
Name: "connect_latency",
|
|
Help: "Time it takes to establish and acknowledge connections in milliseconds",
|
|
Buckets: []float64{1, 10, 25, 50, 100, 500, 1000, 5000},
|
|
},
|
|
)
|
|
connectStreamErrors = prometheus.NewCounter(
|
|
prometheus.CounterOpts{
|
|
Namespace: connection.MetricsNamespace,
|
|
Subsystem: "proxy",
|
|
Name: "connect_streams_errors",
|
|
Help: "Total count of failure to establish and acknowledge connections",
|
|
},
|
|
)
|
|
)
|
|
|
|
func init() {
|
|
prometheus.MustRegister(
|
|
totalRequests,
|
|
concurrentRequests,
|
|
responseByCode,
|
|
requestErrors,
|
|
activeTCPSessions,
|
|
totalTCPSessions,
|
|
connectLatency,
|
|
connectStreamErrors,
|
|
)
|
|
}
|
|
|
|
func incrementRequests() {
|
|
totalRequests.Inc()
|
|
concurrentRequests.Inc()
|
|
}
|
|
|
|
func decrementConcurrentRequests() {
|
|
concurrentRequests.Dec()
|
|
}
|
|
|
|
func incrementTCPRequests() {
|
|
incrementRequests()
|
|
totalTCPSessions.Inc()
|
|
activeTCPSessions.Inc()
|
|
}
|
|
|
|
func decrementTCPConcurrentRequests() {
|
|
decrementConcurrentRequests()
|
|
activeTCPSessions.Dec()
|
|
}
|