Documentation Index
Fetch the complete documentation index at: https://docs.pangolin.net/llms.txt
Use this file to discover all available pages before exploring further.
Try free on Pangolin Cloud
pprof. Gerbil supports metrics through either a Prometheus backend or an OTLP backend. The Pangolin Kubernetes Controller exposes a Prometheus-compatible scrape endpoint and includes additional OTel-backed metric instruments on that endpoint.
Capability Matrix
Newt
Gerbil
Kubernetes Controller
Observability Capability Matrix
| Component | Metrics | Traces | Logs | Profiling |
|---|---|---|---|---|
newt | Prometheus, OTLP | OTLP | stdout | pprof optional |
gerbil | Prometheus or OTLP | — | stdout | — |
pangolin-kube-controller | Prometheus scrape | — | stdout | pprof optional |
Supported Signals
| Signal | What it means |
|---|---|
| Prometheus scrape metrics | Pull-based metrics served over HTTP on /metrics |
| OTLP metrics | Push-based OpenTelemetry metrics sent to an OTel Collector or compatible backend |
| OTLP traces | Distributed traces sent to an OTel Collector or trace backend |
| Application logs | stdout, file logs, audit logs, or platform logs |
| Profiling | Debug endpoints such as pprof |
Collection Patterns
Use one or more of the following patterns depending on your deployment model. Prometheus scrape mode is the simplest option for local or Kubernetes monitoring. OTLP is useful when you already operate an OpenTelemetry Collector or want to forward telemetry to a managed backend such as Grafana Cloud, Mimir, or Tempo.- Prometheus scrape mode
- OTel Collector
- Kubernetes ServiceMonitor
- Logs to Loki
scrape_configs:
- job_name: newt
static_configs:
- targets: ["newt:2112"]
- job_name: gerbil
metrics_path: /metrics
static_configs:
- targets: ["gerbil:3003"]
- job_name: pangolin-kube-controller
static_configs:
- targets: ["pangolin-kube-controller:9090"]
receivers:
otlp:
protocols:
grpc:
http:
prometheus:
config:
scrape_configs:
- job_name: pangolin-kube-controller
static_configs:
- targets: ["pangolin-kube-controller:9090"]
processors:
batch: {}
exporters:
prometheusremotewrite:
endpoint: https://mimir.example.com/api/v1/push
otlp/tempo:
endpoint: tempo:4317
tls:
insecure: true
service:
pipelines:
metrics:
receivers: [otlp, prometheus]
processors: [batch]
exporters: [prometheusremotewrite]
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/tempo]
newt. pangolin-kube-controller exposes additional OTel instruments, but they are exported on the same Prometheus scrape endpoint rather than pushed through OTLP.apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: pangolin-kube-controller
spec:
selector:
matchLabels:
app: pangolin-kube-controller
endpoints:
- port: http-metrics
path: /metrics
interval: 30s
global:
metrics:
enabled: true
service:
enabled: true
serviceMonitor:
enabled: true
controller:
monitoring:
serviceMonitor:
enabled: true
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: pangolin
static_configs:
- targets: [localhost]
labels:
job: pangolin
__path__: /var/log/containers/*pangolin*.log
Newt
Newt metrics are not typically enabled in default deployments. Turn them on explicitly and expose the admin address only where you intend to scrape or profile. Available metrics are listed in Newt metrics.Configuration
Configuration
- Environment Variables
- CLI Args
- Helm Values
NEWT_METRICS_PROMETHEUS_ENABLED=true
NEWT_METRICS_OTLP_ENABLED=true
NEWT_ADMIN_ADDR=:2112
OTEL_EXPORTER_OTLP_ENDPOINT=otel-collector:4317
OTEL_EXPORTER_OTLP_INSECURE=true
OTEL_METRIC_EXPORT_INTERVAL=15s
NEWT_PPROF_ENABLED=false
newt \
--metrics=true \
--otlp=true \
--metrics-admin-addr=:2112 \
--pprof=false \
--endpoint=https://pangolin.example.com \
--id=saz281jfa8z37zg \
--secret=your-secret
global:
metrics:
enabled: true
adminAddr: ":2112"
service:
enabled: true
serviceMonitor:
enabled: true
pprofEnabled: false
Signals and endpoints
Signals and endpoints
- Prometheus scrape endpoint:
/metricsonNEWT_ADMIN_ADDR - Health endpoint:
/healthzon the same admin server - OTLP metrics: enabled with
NEWT_METRICS_OTLP_ENABLED=trueor--otlp=true - OTLP traces: initialized when OTLP export is enabled
- Profiling:
/debug/pprof/*whenNEWT_PPROF_ENABLED=true
METRICS, but the implementation also initializes OTLP tracing when OTLP is enabled.NEWT_ADMIN_ADDR=:2112 or another non-loopback address only when you intentionally want Prometheus, pprof, or health checks to reach it.Examples
Examples
- Direct Prometheus
- OTLP metrics and traces
scrape_configs:
- job_name: newt
static_configs:
- targets: ["newt:2112"]
receivers:
otlp:
protocols:
grpc:
http:
processors:
batch: {}
exporters:
prometheusremotewrite:
endpoint: https://mimir.example.com/api/v1/push
otlp/tempo:
endpoint: tempo:4317
tls:
insecure: true
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheusremotewrite]
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/tempo]
Gerbil
Gerbil supports metrics only. Choose either a native Prometheus backend or an OTLP metrics backend at runtime. Those backends are mutually exclusive. Available metrics are listed in Gerbil metrics.Configuration
Configuration
- Environment Variables
- CLI Args
METRICS_ENABLED=true
METRICS_BACKEND=prometheus
METRICS_PATH=/metrics
LISTEN=:3003
# OTel mode
OTEL_METRICS_PROTOCOL=grpc
OTEL_METRICS_ENDPOINT=otel-collector:4317
OTEL_METRICS_INSECURE=true
OTEL_METRICS_EXPORT_INTERVAL=60s
OTEL_METRICS_TIMEOUT=10s
./gerbil \
--metrics-enabled \
--metrics-backend=prometheus \
--metrics-path=/metrics \
--config=/etc/gerbil/config.json
./gerbil \
--metrics-enabled \
--metrics-backend=otel \
--otel-metrics-protocol=grpc \
--otel-metrics-endpoint=otel-collector:4317 \
--otel-metrics-insecure \
--otel-metrics-export-interval=10s \
--otel-metrics-timeout=10s \
--config=/etc/gerbil/config.json
Signals and endpoints
Signals and endpoints
- Prometheus metrics endpoint:
METRICS_PATH, default/metrics - Metrics are served on Gerbil’s configured HTTP listen address
- The Docker Compose metrics example commonly scrapes
gerbil:3003 - Health endpoint:
/healthz - OTLP metrics: enabled when
METRICS_BACKEND=otel - Traces: not supported yet
- Profiling: not supported yet
Examples
Examples
- Prometheus scrape
- OTLP metrics
scrape_configs:
- job_name: gerbil
metrics_path: /metrics
static_configs:
- targets: ["gerbil:3003"]
gerbil:3003 with the actual Gerbil HTTP listen address in your deployment.receivers:
otlp:
protocols:
grpc:
http:
processors:
batch: {}
exporters:
prometheusremotewrite:
endpoint: https://mimir.example.com/api/v1/push
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheusremotewrite]
Pangolin Kubernetes Controller
The controller exposes a Prometheus-compatible/metrics endpoint and standard health probes. It also registers additional OpenTelemetry metric instruments, but those instruments are exported on the same scrape endpoint rather than pushed through OTLP. Available metrics are listed in Controller metrics.
pprof is available only when explicitly enabled via ENABLE_PPROF=true.Configuration
Configuration
- Environment Variables
- Helm Values
METRICS_ADDR=:9090
DISABLE_LIVEZ=false
ENABLE_PPROF=false
controller:
service:
enabled: true
port: 9090
portName: metrics
monitoring:
serviceMonitor:
enabled: true
podMonitor:
enabled: false
prometheusRule:
enabled: false
Endpoints
Endpoints
/metricsonMETRICS_ADDR/healthzand/readyzfor readiness/livezand/health/livefor liveness unlessDISABLE_LIVEZ=true/debug/pprof/*whenENABLE_PPROF=true
Representative metrics and Kubernetes examples
Representative metrics and Kubernetes examples
apiVersion: v1
kind: Service
metadata:
name: pangolin-kube-controller
labels:
app: pangolin-kube-controller
spec:
selector:
app: pangolin-kube-controller
ports:
- name: http-metrics
port: 9090
targetPort: 9090
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: pangolin-kube-controller
spec:
selector:
matchLabels:
app: pangolin-kube-controller
endpoints:
- port: http-metrics
path: /metrics
interval: 30s
Alerting Examples
- Newt
- Gerbil
- Controller
increase(newt_connection_errors_total[5m]) > 10
histogram_quantile(
0.95,
sum(rate(newt_tunnel_latency_seconds_bucket[5m])) by (le)
) > 1
increase(newt_tunnel_reconnects_total[10m]) > 20
max_over_time(gerbil_wg_interface_up[5m]) by (ifname) < 1
sum(gerbil_wg_peers_total) > 0
and
sum(gerbil_wg_peer_connected) == 0
min_over_time(pangolin_kube_controller_ready[5m]) == 0
increase(pangolin_kube_controller_reconcile_errors_total[10m]) > 5
Community Metrics Guide
Newt Kubernetes Monitoring
Controller Monitoring Values
Versions
| Component | Signal | Since version |
|---|---|---|
| Newt | Prometheus scrape metrics | v1.6.0 |
| Newt | OTLP metrics | v1.6.0 |
| Newt | OTLP traces | v1.6.0 |
| Newt | pprof | v1.10.4 |
| Gerbil | Prometheus scrape metrics | v1.4.0 |
| Gerbil | OTLP metrics | v1.4.0 |
| Pangolin Kubernetes Controller | Prometheus scrape metrics | v0.1.0-alpha.1 |
Full Metric Reference
The full reference below is grouped by component.- Newt: Prometheus metrics, OTLP metrics, OTLP traces
- Gerbil: Prometheus or OTLP metrics
- Pangolin Kubernetes Controller: Prometheus-native metrics and additional OTel-backed scrape metrics
Newt metrics
- OpenTelemetry (OTel)
- Prometheus
Show Site & Build
Show Site & Build
Show Details
Show Details
Labels:
result (success|failure), site_idEmission path:
telemetry.IncSiteRegistrationExample:
newt_site_registrations_total{result="success",site_id="abc"} 1Show Details
Show Details
Labels:
site_idEmission path:
state.TelemetryView (callback)Example:
newt_site_online{site_id="self"} 1Show Details
Show Details
Labels:
site_idEmission path:
TouchHeartbeat (callback)Example:
newt_site_last_heartbeat_seconds{site_id="self"} 3.2Show Details
Show Details
Labels:
version, commitEmission path: Build info registration
Example:
newt_build_info{version="1.2.3",commit="abc123"} 1Show Details
Show Details
Labels: —
Emission path:
RegisterBuildInfoExample:
newt_restart_count_total 1Show Details
Show Details
Labels:
resultEmission path:
IncCertRotationExample:
newt_cert_rotation_total{result="success"} 1Show Details
Show Details
Labels:
resultEmission path:
telemetry.IncConfigReloadExample:
newt_config_reloads_total{result="success"} 1phase and result.Show Details
Show Details
Labels:
phase, resultEmission path:
telemetry.ObserveConfigApplyExample:
newt_config_apply_seconds_bucket{phase="peer",result="success",le="0.1"} 3Show Tunnel
Show Tunnel
Show Details
Show Details
Labels:
site_id, tunnel_idEmission path:
RegisterStateViewExample:
newt_tunnel_sessions{site_id="self",tunnel_id="wgpub"} 2Show Details
Show Details
Labels:
tunnel_id, direction (ingress|egress), protocol (tcp|udp)Emission path: Proxy manager
Example:
newt_tunnel_bytes_total{direction="egress",protocol="tcp",tunnel_id="wgpub"} 8192Show Details
Show Details
Labels:
tunnel_id, transportEmission path: Health checks
Example:
newt_tunnel_latency_seconds_bucket{transport="wireguard",le="0.05",tunnel_id="wgpub"} 4Show Details
Show Details
Labels:
tunnel_id, initiator (client|server), reasonEmission path:
telemetry.IncReconnectExample:
newt_tunnel_reconnects_total{initiator="client",reason="timeout",tunnel_id="wgpub"} 3Show Connection & Auth
Show Connection & Auth
Show Details
Show Details
Labels:
transport, resultEmission path:
telemetry.IncConnAttemptExample:
newt_connection_attempts_total{transport="websocket",result="failure"} 2Show Details
Show Details
Labels:
transport, error_typeEmission path:
telemetry.IncConnErrorExample:
newt_connection_errors_total{transport="auth",error_type="auth_failed"} 1Show WebSocket
Show WebSocket
Show Details
Show Details
Labels:
result, transportEmission path:
ObserveWSConnectLatencyExample:
newt_websocket_connect_latency_seconds_bucket{result="success",transport="websocket",le="0.5"} 1Show Details
Show Details
Labels:
reason, tunnel_idEmission path:
IncWSDisconnectExample:
newt_websocket_disconnects_total{reason="remote_close",tunnel_id="wgpub"} 2Show Details
Show Details
Labels:
reason (e.g., ping_write, pong_timeout)Emission path:
telemetry.IncWSKeepaliveFailure(ctx, "ping_write")Example:
newt_websocket_keepalive_failures_total{reason="ping_write"} 1Show Details
Show Details
Labels:
result (success|error)Emission path:
telemetry.ObserveWSSessionDuration(ctx, time.Since(start).Seconds(), "error")Example:
newt_websocket_session_duration_seconds_bucket{result="error",le="60"} 3Show Details
Show Details
Labels: —
Emission path:
telemetry.SetWSConnectionState(true|false)Example:
newt_websocket_connected 1Show Details
Show Details
Labels:
reasonEmission path:
telemetry.IncWSReconnect(ctx, "ping_write")Example:
newt_websocket_reconnects_total{reason="ping_write"} 1Show Details
Show Details
Labels:
direction (in|out), msg_type (ping|pong|text|…)Emission path:
IncWSMessageExample:
newt_websocket_messages_total{direction="out",msg_type="ping"} 4Show Proxy
Show Proxy
Show Details
Show Details
Labels:
protocol, tunnel_idEmission path: Proxy callback
Example:
newt_proxy_active_connections{protocol="tcp",tunnel_id="wgpub"} 3Show Details
Show Details
Labels:
protocol, tunnel_idEmission path: Proxy callback
Example:
newt_proxy_buffer_bytes{protocol="tcp",tunnel_id="wgpub"} 10240Show Details
Show Details
Labels:
protocol, tunnel_idEmission path: Proxy callback
Example:
newt_proxy_async_backlog_bytes{protocol="udp",tunnel_id="wgpub"} 4096Show Details
Show Details
Labels:
protocol, tunnel_idEmission path:
IncProxyDropsExample:
newt_proxy_drops_total{protocol="udp",tunnel_id="wgpub"} 2Show Details
Show Details
Labels:
tunnel_id, protocol, result, reasonEmission path:
telemetry.IncProxyAccept(ctx, tunnelID, "tcp", "failure", "timeout")Example:
newt_proxy_accept_total{protocol="tcp",result="failure",reason="timeout"} 1Show Details
Show Details
Labels:
tunnel_id, protocol, event (opened|closed)Emission path:
telemetry.IncProxyConnectionEvent(ctx, tunnelID, "tcp", telemetry.ProxyConnectionOpened)Example:
newt_proxy_connections_total{protocol="tcp",event="opened"} 1Show Details
Show Details
Labels:
tunnel_id, protocol, resultEmission path:
telemetry.ObserveProxyConnectionDuration(ctx, tunnelID, "tcp", "success", seconds)Example:
newt_proxy_connection_duration_seconds_bucket{protocol="tcp",result="success",le="1"} 3Show Site & Build
Show Site & Build
Show Details
Show Details
result, site_id • Unit: 1 • Path: telemetry.IncSiteRegistrationExample:
newt_site_registrations_total{result="success",site_id="abc"} 1Show Details
Show Details
site_id • Unit: 1 • Path: state.TelemetryViewExample:
newt_site_online{site_id="self"} 1Show Details
Show Details
site_id • Unit: seconds • Path: TouchHeartbeatExample:
newt_site_last_heartbeat_seconds{site_id="self"} 3.2Show Details
Show Details
version, commit • Unit: 1 • Path: Build info registrationExample:
newt_build_info{version="1.2.3",commit="abc123"} 1Show Details
Show Details
RegisterBuildInfoExample:
newt_restart_count_total 1Show Details
Show Details
result • Unit: 1 • Path: IncCertRotationExample:
newt_cert_rotation_total{result="success"} 1Show Details
Show Details
result • Unit: 1 • Path: telemetry.IncConfigReloadExample:
newt_config_reloads_total{result="success"} 1Show Details
Show Details
phase, result • Unit: seconds • Path: telemetry.ObserveConfigApplyExample:
newt_config_apply_seconds_bucket{phase="peer",result="success",le="0.1"} 3Show Tunnel
Show Tunnel
Show Details
Show Details
site_id, tunnel_id • Unit: 1 • Path: RegisterStateViewExample:
newt_tunnel_sessions{site_id="self",tunnel_id="wgpub"} 2Show Details
Show Details
tunnel_id, direction, protocol • Unit: bytes • Path: Proxy managerExample:
newt_tunnel_bytes_total{direction="egress",protocol="tcp",tunnel_id="wgpub"} 8192Show Details
Show Details
tunnel_id, transport • Unit: seconds • Path: Health checksExample:
newt_tunnel_latency_seconds_bucket{transport="wireguard",le="0.05",tunnel_id="wgpub"} 4Show Details
Show Details
tunnel_id, initiator, reason • Unit: 1 • Path: telemetry.IncReconnectExample:
newt_tunnel_reconnects_total{initiator="client",reason="timeout",tunnel_id="wgpub"} 3Show Connection & Auth
Show Connection & Auth
Show Details
Show Details
transport, result • Unit: 1 • Path: telemetry.IncConnAttemptExample:
newt_connection_attempts_total{transport="websocket",result="failure"} 2Show Details
Show Details
transport, error_type • Unit: 1 • Path: telemetry.IncConnErrorExample:
newt_connection_errors_total{transport="auth",error_type="auth_failed"} 1Show WebSocket
Show WebSocket
Show Details
Show Details
result, transport • Unit: seconds • Path: ObserveWSConnectLatencyExample:
newt_websocket_connect_latency_seconds_bucket{result="success",transport="websocket",le="0.5"} 1Show Details
Show Details
reason, tunnel_id • Unit: 1 • Path: IncWSDisconnectExample:
newt_websocket_disconnects_total{reason="remote_close",tunnel_id="wgpub"} 2Show Details
Show Details
reason • Unit: 1 • Path: telemetry.IncWSKeepaliveFailure(ctx, "ping_write")Example:
newt_websocket_keepalive_failures_total{reason="ping_write"} 1Show Details
Show Details
result • Unit: seconds • Path: telemetry.ObserveWSSessionDuration(...)Example:
newt_websocket_session_duration_seconds_bucket{result="error",le="60"} 3Show Details
Show Details
telemetry.SetWSConnectionState(true|false)Example:
newt_websocket_connected 1Show Details
Show Details
reason • Unit: 1 • Path: telemetry.IncWSReconnect(ctx, "ping_write")Example:
newt_websocket_reconnects_total{reason="ping_write"} 1Show Details
Show Details
direction, msg_type • Unit: 1 • Path: IncWSMessageExample:
newt_websocket_messages_total{direction="out",msg_type="ping"} 4Show Proxy
Show Proxy
Show Details
Show Details
protocol, tunnel_id • Unit: 1 • Path: Proxy callbackExample:
newt_proxy_active_connections{protocol="tcp",tunnel_id="wgpub"} 3Show Details
Show Details
protocol, tunnel_id • Unit: bytes • Path: Proxy callbackExample:
newt_proxy_buffer_bytes{protocol="tcp",tunnel_id="wgpub"} 10240Show Details
Show Details
protocol, tunnel_id • Unit: bytes • Path: Proxy callbackExample:
newt_proxy_async_backlog_bytes{protocol="udp",tunnel_id="wgpub"} 4096Show Details
Show Details
protocol, tunnel_id • Unit: 1 • Path: IncProxyDropsExample:
newt_proxy_drops_total{protocol="udp",tunnel_id="wgpub"} 2Show Details
Show Details
tunnel_id, protocol, result, reason • Unit: 1 • Path: telemetry.IncProxyAccept(...)Example:
newt_proxy_accept_total{protocol="tcp",result="failure",reason="timeout"} 1Show Details
Show Details
tunnel_id, protocol, event • Unit: 1 • Path: telemetry.IncProxyConnectionEvent(...)Example:
newt_proxy_connections_total{protocol="tcp",event="opened"} 1Show Details
Show Details
tunnel_id, protocol, result • Unit: seconds • Path: telemetry.ObserveProxyConnectionDuration(...)Example:
newt_proxy_connection_duration_seconds_bucket{protocol="tcp",result="success",le="1"} 3Gerbil metrics
- OpenTelemetry (OTel)
- Prometheus
prometheus, otel, or none.otel mode, Gerbil pushes metrics to an OTLP collector. The /metrics endpoint is not exposed in this mode.Show WireGuard
Show WireGuard
Show Details
Show Details
Labels:
ifname, instanceEmission path:
metrics.RecordInterfaceUpExample:
gerbil_wg_interface_up{ifname="wg0",instance="gerbil-1"} 1Show Details
Show Details
Labels:
ifnameEmission path:
metrics.RecordPeersTotalExample:
gerbil_wg_peers_total{ifname="wg0"} 5Show Details
Show Details
Labels:
ifname, peerEmission path:
metrics.RecordPeerConnectedExample:
gerbil_wg_peer_connected{ifname="wg0",peer="abc"} 1Show Details
Show Details
Labels:
ifname, peerEmission path:
metrics.RecordAllowedIPsCountExample:
gerbil_allowed_ips_count{ifname="wg0",peer="abc"} 2Show Details
Show Details
Labels:
ifname, reasonEmission path:
metrics.RecordKeyRotationExample:
gerbil_key_rotation_total{ifname="wg0",reason="scheduled"} 1Show Details
Show Details
Labels:
ifname, peer, resultEmission path:
metrics.RecordHandshakeExample:
gerbil_wg_handshakes_total{ifname="wg0",peer="abc",result="success"} 1Show Details
Show Details
Labels:
ifname, peerEmission path:
metrics.RecordHandshakeLatencyExample:
gerbil_wg_handshake_latency_seconds_bucket{ifname="wg0",peer="abc",le="0.1"} 3Show Details
Show Details
Labels:
ifname, peerEmission path:
metrics.RecordPeerRTTExample:
gerbil_wg_peer_rtt_seconds_bucket{ifname="wg0",peer="abc",le="0.05"} 4Show Details
Show Details
Labels:
ifname, peerEmission path:
metrics.RecordBytesReceivedExample:
gerbil_wg_bytes_received_total{ifname="wg0",peer="abc"} 8192Show Details
Show Details
Labels:
ifname, peerEmission path:
metrics.RecordBytesTransmittedExample:
gerbil_wg_bytes_transmitted_total{ifname="wg0",peer="abc"} 16384Show Relay
Show Relay
Show Details
Show Details
Labels:
ifnameEmission path:
metrics.RecordActiveSession / metrics.RecordSessionExample:
gerbil_active_sessions{ifname="wg0"} 3Show Details
Show Details
Labels:
ifname, type, directionEmission path:
metrics.RecordUDPPacketExample:
gerbil_udp_packets_total{ifname="wg0",type="data",direction="rx"} 42Show Details
Show Details
Labels:
ifname, typeEmission path:
metrics.RecordUDPPacketSizeExample:
gerbil_udp_packet_size_bytes_bucket{ifname="wg0",type="data",le="1024"} 7Show Details
Show Details
Labels:
ifname, resultEmission path:
metrics.RecordHolePunchEventExample:
gerbil_hole_punch_events_total{ifname="wg0",result="success"} 1Show Details
Show Details
Labels:
ifnameEmission path:
metrics.RecordProxyMappingExample:
gerbil_proxy_mapping_active{ifname="wg0"} 4Show Details
Show Details
Labels:
ifnameEmission path:
metrics.RecordSessionRebuiltExample:
gerbil_session_rebuilt_total{ifname="wg0"} 1Show Details
Show Details
Labels:
ifnameEmission path:
metrics.RecordCommPatternExample:
gerbil_comm_pattern_active{ifname="wg0"} 2Show Details
Show Details
Labels:
ifname, componentEmission path:
metrics.RecordProxyCleanupRemovedExample:
gerbil_proxy_cleanup_removed_total{ifname="wg0",component="sessions"} 5Show Details
Show Details
Labels:
ifname, error_typeEmission path:
metrics.RecordProxyConnectionErrorExample:
gerbil_proxy_connection_errors_total{ifname="wg0",error_type="timeout"} 1Show Details
Show Details
Labels:
ifnameEmission path:
metrics.RecordProxyInitialMappingsExample:
gerbil_proxy_initial_mappings{ifname="wg0"} 8Show Details
Show Details
Labels:
ifnameEmission path:
metrics.RecordProxyMappingUpdateExample:
gerbil_proxy_mapping_updates_total{ifname="wg0"} 2Show Details
Show Details
Labels:
ifname, componentEmission path:
metrics.RecordProxyIdleCleanupDurationExample:
gerbil_proxy_idle_cleanup_duration_seconds_bucket{ifname="wg0",component="sessions",le="0.1"} 1Show SNI Proxy
Show SNI Proxy
Show Details
Show Details
Labels: —
Emission path:
metrics.RecordActiveProxyConnectionExample:
gerbil_active_proxy_connections 2Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordProxyRouteLookupExample:
gerbil_proxy_route_lookups_total{result="hit"} 6Show Details
Show Details
Labels: —
Emission path:
metrics.RecordProxyTLSHandshakeExample:
gerbil_proxy_tls_handshake_seconds_bucket{le="0.1"} 2Show Details
Show Details
Labels:
directionEmission path:
metrics.RecordProxyBytesTransmittedExample:
gerbil_proxy_bytes_transmitted_total{direction="egress"} 16384Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordSNIConnectionExample:
gerbil_sni_connections_total{result="success"} 3Show Details
Show Details
Labels: —
Emission path:
metrics.RecordSNIConnectionDurationExample:
gerbil_sni_connection_duration_seconds_bucket{le="10"} 4Show Details
Show Details
Labels: —
Emission path:
metrics.RecordSNIActiveConnectionExample:
gerbil_sni_active_connections 2Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordSNIRouteCacheHitExample:
gerbil_sni_route_cache_hits_total{result="hit"} 10Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordSNIRouteAPIRequestExample:
gerbil_sni_route_api_requests_total{result="success"} 5Show Details
Show Details
Labels: —
Emission path:
metrics.RecordSNIRouteAPILatencyExample:
gerbil_sni_route_api_latency_seconds_bucket{le="0.25"} 4Show Details
Show Details
Labels:
hitEmission path:
metrics.RecordSNILocalOverrideExample:
gerbil_sni_local_override_total{hit="true"} 1Show Details
Show Details
Labels:
eventEmission path:
metrics.RecordSNITrustedProxyEventExample:
gerbil_sni_trusted_proxy_events_total{event="parsed"} 2Show Details
Show Details
Labels: —
Emission path:
metrics.RecordSNIProxyProtocolParseErrorExample:
gerbil_sni_proxy_protocol_parse_errors_total 1Show Details
Show Details
Labels:
directionEmission path:
metrics.RecordSNIDataBytesExample:
gerbil_sni_data_bytes_total{direction="ingress"} 4096Show Details
Show Details
Labels:
reasonEmission path:
metrics.RecordSNITunnelTerminationExample:
gerbil_sni_tunnel_terminations_total{reason="client_close"} 1Show HTTP API & Peer Management
Show HTTP API & Peer Management
Show Details
Show Details
Labels:
endpoint, method, status_codeEmission path:
metrics.RecordHTTPRequestExample:
gerbil_http_requests_total{endpoint="/peer",method="POST",status_code="200"} 1Show Details
Show Details
Labels:
endpoint, methodEmission path:
metrics.RecordHTTPRequestDurationExample:
gerbil_http_request_duration_seconds_bucket{endpoint="/peer",method="POST",le="0.1"} 3Show Details
Show Details
Labels:
operation, resultEmission path:
metrics.RecordPeerOperationExample:
gerbil_peer_operations_total{operation="add",result="success"} 1Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordProxyMappingUpdateRequestExample:
gerbil_proxy_mapping_update_requests_total{result="success"} 1Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordDestinationsUpdateRequestExample:
gerbil_destinations_update_requests_total{result="success"} 1Show Remote Config & Reporting
Show Remote Config & Reporting
Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordRemoteConfigFetchExample:
gerbil_remote_config_fetches_total{result="success"} 1Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordBandwidthReportExample:
gerbil_bandwidth_reports_total{result="success"} 1Show Details
Show Details
Labels:
peer, directionEmission path:
metrics.RecordPeerBandwidthBytesExample:
gerbil_peer_bandwidth_bytes_total{peer="abc",direction="rx"} 8192Show System & Operations
Show System & Operations
Show Details
Show Details
Labels:
event_typeEmission path:
metrics.RecordNetlinkEventExample:
gerbil_netlink_events_total{event_type="link_up"} 1Show Details
Show Details
Labels:
component, error_typeEmission path:
metrics.RecordNetlinkErrorExample:
gerbil_netlink_errors_total{component="wg",error_type="permission"} 1Show Details
Show Details
Labels:
componentEmission path:
metrics.RecordSyncDurationExample:
gerbil_sync_duration_seconds_bucket{component="remote_config",le="0.5"} 2Show Details
Show Details
Labels:
queueEmission path:
metrics.RecordWorkqueueDepthExample:
gerbil_workqueue_depth{queue="relay"} 3Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordKernelModuleLoadExample:
gerbil_kernel_module_loads_total{result="success"} 1Show Details
Show Details
Labels:
result, chainEmission path:
metrics.RecordFirewallRuleAppliedExample:
gerbil_firewall_rules_applied_total{result="success",chain="FORWARD"} 1Show Details
Show Details
Labels:
resultEmission path:
metrics.RecordConfigReloadExample:
gerbil_config_reloads_total{result="success"} 1Show Details
Show Details
Labels: —
Emission path:
metrics.RecordRestartExample:
gerbil_restart_total 1Show Details
Show Details
Labels:
peer, reasonEmission path:
metrics.RecordAuthFailureExample:
gerbil_auth_failures_total{peer="abc",reason="invalid_key"} 1Show Details
Show Details
Labels:
ifname, peer, policyEmission path:
metrics.RecordACLDeniedExample:
gerbil_acl_denied_total{ifname="wg0",peer="abc",policy="deny"} 1Show Details
Show Details
Labels:
cert_name, ifnameEmission path:
metrics.RecordCertificateExpiryExample:
gerbil_certificate_expiry_days{cert_name="server",ifname="wg0"} 42Show Details
Show Details
Labels:
severityEmission path:
metrics.RecordMemorySpikeExample:
gerbil_memory_spike_total{severity="warning"} 1Show Details
Show Details
Labels: —
Emission path:
metrics.RecordHeapProfileWrittenExample:
gerbil_heap_profiles_written_total 1METRICS_BACKEND=prometheus./metrics.
In OTel mode, /metrics is not exposed.Show WireGuard
Show WireGuard
Show Details
Show Details
ifname, instance • Unit: 1 • Path: metrics.RecordInterfaceUpExample:
gerbil_wg_interface_up{ifname="wg0",instance="gerbil-1"} 1Show Details
Show Details
ifname • Unit: 1 • Path: metrics.RecordPeersTotalExample:
gerbil_wg_peers_total{ifname="wg0"} 5Show Details
Show Details
ifname, peer • Unit: 1 • Path: metrics.RecordPeerConnectedExample:
gerbil_wg_peer_connected{ifname="wg0",peer="abc"} 1Show Details
Show Details
ifname, peer • Unit: 1 • Path: metrics.RecordAllowedIPsCountExample:
gerbil_allowed_ips_count{ifname="wg0",peer="abc"} 2Show Details
Show Details
ifname, reason • Unit: 1 • Path: metrics.RecordKeyRotationExample:
gerbil_key_rotation_total{ifname="wg0",reason="scheduled"} 1Show Details
Show Details
ifname, peer, result • Unit: 1 • Path: metrics.RecordHandshakeExample:
gerbil_wg_handshakes_total{ifname="wg0",peer="abc",result="success"} 1Show Details
Show Details
ifname, peer • Unit: seconds • Path: metrics.RecordHandshakeLatencyExample:
gerbil_wg_handshake_latency_seconds_bucket{ifname="wg0",peer="abc",le="0.1"} 3Show Details
Show Details
ifname, peer • Unit: seconds • Path: metrics.RecordPeerRTTExample:
gerbil_wg_peer_rtt_seconds_bucket{ifname="wg0",peer="abc",le="0.05"} 4Show Details
Show Details
ifname, peer • Unit: bytes • Path: metrics.RecordBytesReceivedExample:
gerbil_wg_bytes_received_total{ifname="wg0",peer="abc"} 8192Show Details
Show Details
ifname, peer • Unit: bytes • Path: metrics.RecordBytesTransmittedExample:
gerbil_wg_bytes_transmitted_total{ifname="wg0",peer="abc"} 16384Show Relay
Show Relay
Show Details
Show Details
ifname • Unit: 1 • Path: metrics.RecordActiveSession / metrics.RecordSessionExample:
gerbil_active_sessions{ifname="wg0"} 3Show Details
Show Details
ifname, type, direction • Unit: 1 • Path: metrics.RecordUDPPacketExample:
gerbil_udp_packets_total{ifname="wg0",type="data",direction="rx"} 42Show Details
Show Details
ifname, type • Unit: bytes • Path: metrics.RecordUDPPacketSizeExample:
gerbil_udp_packet_size_bytes_bucket{ifname="wg0",type="data",le="1024"} 7Show Details
Show Details
ifname, result • Unit: 1 • Path: metrics.RecordHolePunchEventExample:
gerbil_hole_punch_events_total{ifname="wg0",result="success"} 1Show Details
Show Details
ifname • Unit: 1 • Path: metrics.RecordProxyMappingExample:
gerbil_proxy_mapping_active{ifname="wg0"} 4Show Details
Show Details
ifname • Unit: 1 • Path: metrics.RecordSessionRebuiltExample:
gerbil_session_rebuilt_total{ifname="wg0"} 1Show Details
Show Details
ifname • Unit: 1 • Path: metrics.RecordCommPatternExample:
gerbil_comm_pattern_active{ifname="wg0"} 2Show Details
Show Details
ifname, component • Unit: 1 • Path: metrics.RecordProxyCleanupRemovedExample:
gerbil_proxy_cleanup_removed_total{ifname="wg0",component="sessions"} 5Show Details
Show Details
ifname, error_type • Unit: 1 • Path: metrics.RecordProxyConnectionErrorExample:
gerbil_proxy_connection_errors_total{ifname="wg0",error_type="timeout"} 1Show Details
Show Details
ifname • Unit: 1 • Path: metrics.RecordProxyInitialMappingsExample:
gerbil_proxy_initial_mappings{ifname="wg0"} 8Show Details
Show Details
ifname • Unit: 1 • Path: metrics.RecordProxyMappingUpdateExample:
gerbil_proxy_mapping_updates_total{ifname="wg0"} 2Show Details
Show Details
ifname, component • Unit: seconds • Path: metrics.RecordProxyIdleCleanupDurationExample:
gerbil_proxy_idle_cleanup_duration_seconds_bucket{ifname="wg0",component="sessions",le="0.1"} 1Show SNI Proxy
Show SNI Proxy
Show Details
Show Details
metrics.RecordActiveProxyConnectionExample:
gerbil_active_proxy_connections 2Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordProxyRouteLookupExample:
gerbil_proxy_route_lookups_total{result="hit"} 6Show Details
Show Details
metrics.RecordProxyTLSHandshakeExample:
gerbil_proxy_tls_handshake_seconds_bucket{le="0.1"} 2Show Details
Show Details
direction • Unit: bytes • Path: metrics.RecordProxyBytesTransmittedExample:
gerbil_proxy_bytes_transmitted_total{direction="egress"} 16384Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordSNIConnectionExample:
gerbil_sni_connections_total{result="success"} 3Show Details
Show Details
metrics.RecordSNIConnectionDurationExample:
gerbil_sni_connection_duration_seconds_bucket{le="10"} 4Show Details
Show Details
metrics.RecordSNIActiveConnectionExample:
gerbil_sni_active_connections 2Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordSNIRouteCacheHitExample:
gerbil_sni_route_cache_hits_total{result="hit"} 10Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordSNIRouteAPIRequestExample:
gerbil_sni_route_api_requests_total{result="success"} 5Show Details
Show Details
metrics.RecordSNIRouteAPILatencyExample:
gerbil_sni_route_api_latency_seconds_bucket{le="0.25"} 4Show Details
Show Details
hit • Unit: 1 • Path: metrics.RecordSNILocalOverrideExample:
gerbil_sni_local_override_total{hit="true"} 1Show Details
Show Details
event • Unit: 1 • Path: metrics.RecordSNITrustedProxyEventExample:
gerbil_sni_trusted_proxy_events_total{event="parsed"} 2Show Details
Show Details
metrics.RecordSNIProxyProtocolParseErrorExample:
gerbil_sni_proxy_protocol_parse_errors_total 1Show Details
Show Details
direction • Unit: bytes • Path: metrics.RecordSNIDataBytesExample:
gerbil_sni_data_bytes_total{direction="ingress"} 4096Show Details
Show Details
reason • Unit: 1 • Path: metrics.RecordSNITunnelTerminationExample:
gerbil_sni_tunnel_terminations_total{reason="client_close"} 1Show HTTP API & Peer Management
Show HTTP API & Peer Management
Show Details
Show Details
endpoint, method, status_code • Unit: 1 • Path: metrics.RecordHTTPRequestExample:
gerbil_http_requests_total{endpoint="/peer",method="POST",status_code="200"} 1Show Details
Show Details
endpoint, method • Unit: seconds • Path: metrics.RecordHTTPRequestDurationExample:
gerbil_http_request_duration_seconds_bucket{endpoint="/peer",method="POST",le="0.1"} 3Show Details
Show Details
operation, result • Unit: 1 • Path: metrics.RecordPeerOperationExample:
gerbil_peer_operations_total{operation="add",result="success"} 1Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordProxyMappingUpdateRequestExample:
gerbil_proxy_mapping_update_requests_total{result="success"} 1Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordDestinationsUpdateRequestExample:
gerbil_destinations_update_requests_total{result="success"} 1Show Remote Config & Reporting
Show Remote Config & Reporting
Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordRemoteConfigFetchExample:
gerbil_remote_config_fetches_total{result="success"} 1Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordBandwidthReportExample:
gerbil_bandwidth_reports_total{result="success"} 1Show Details
Show Details
peer, direction • Unit: bytes • Path: metrics.RecordPeerBandwidthBytesExample:
gerbil_peer_bandwidth_bytes_total{peer="abc",direction="rx"} 8192Show System & Operations
Show System & Operations
Show Details
Show Details
event_type • Unit: 1 • Path: metrics.RecordNetlinkEventExample:
gerbil_netlink_events_total{event_type="link_up"} 1Show Details
Show Details
component, error_type • Unit: 1 • Path: metrics.RecordNetlinkErrorExample:
gerbil_netlink_errors_total{component="wg",error_type="permission"} 1Show Details
Show Details
component • Unit: seconds • Path: metrics.RecordSyncDurationExample:
gerbil_sync_duration_seconds_bucket{component="remote_config",le="0.5"} 2Show Details
Show Details
queue • Unit: 1 • Path: metrics.RecordWorkqueueDepthExample:
gerbil_workqueue_depth{queue="relay"} 3Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordKernelModuleLoadExample:
gerbil_kernel_module_loads_total{result="success"} 1Show Details
Show Details
result, chain • Unit: 1 • Path: metrics.RecordFirewallRuleAppliedExample:
gerbil_firewall_rules_applied_total{result="success",chain="FORWARD"} 1Show Details
Show Details
result • Unit: 1 • Path: metrics.RecordConfigReloadExample:
gerbil_config_reloads_total{result="success"} 1Show Details
Show Details
metrics.RecordRestartExample:
gerbil_restart_total 1Show Details
Show Details
peer, reason • Unit: 1 • Path: metrics.RecordAuthFailureExample:
gerbil_auth_failures_total{peer="abc",reason="invalid_key"} 1Show Details
Show Details
ifname, peer, policy • Unit: 1 • Path: metrics.RecordACLDeniedExample:
gerbil_acl_denied_total{ifname="wg0",peer="abc",policy="deny"} 1Show Details
Show Details
cert_name, ifname • Unit: days • Path: metrics.RecordCertificateExpiryExample:
gerbil_certificate_expiry_days{cert_name="server",ifname="wg0"} 42Show Details
Show Details
severity • Unit: 1 • Path: metrics.RecordMemorySpikeExample:
gerbil_memory_spike_total{severity="warning"} 1Show Details
Show Details
metrics.RecordHeapProfileWrittenExample:
gerbil_heap_profiles_written_total 1Pangolin Kubernetes Controller metrics
- OpenTelemetry (OTel)
- Prometheus
/metrics endpoint.
The OTel-backed series use the pangolin_controller_* prefix.Show Reconcile
Show Reconcile
Show Details
Show Details
Labels:
phase, resultLabel values:
phase: middlewares | routers | serversTransports | services | tcp | udpresult: success | errorEmission path: OTel reconcile phase instrumentation
Example:
pangolin_controller_reconcile_phase_duration_seconds_bucket{phase="routers",result="success",le="0.5"} 3Show Details
Show Details
Labels:
phaseLabel values:
middlewares | routers | serversTransports | services | tcp | udpEmission path: Parallel reconcile instrumentation
Example:
pangolin_controller_active_reconcile_routines{phase="routers"} 1Show Details
Show Details
Labels:
outcomeLabel values:
success | nochange | errorEmission path: Controller loop instrumentation
Example:
pangolin_controller_loop_iterations_total{outcome="success"} 10Show Fetch & Config
Show Fetch & Config
Show Details
Show Details
Labels:
status_code, status_classLabel values:
status_code: 200 | 304 | 401 | 403 | 404 | 5xxstatus_class: 2xx | 3xx | 4xx | 5xxEmission path: Remote config fetch instrumentation
Example:
pangolin_controller_fetch_duration_seconds_bucket{status_code="200",status_class="2xx",le="0.25"} 4Show Details
Show Details
Labels:
sectionLabel values:
fullEmission path: Config parse instrumentation
Example:
pangolin_controller_config_parse_duration_seconds_bucket{section="full",le="0.1"} 2Show Kubernetes API
Show Kubernetes API
Show Details
Show Details
Labels:
verb, resource_kind, result, forcedLabel values:
verb: get | create | patch | update | delete | listresource_kind: IngressRoute | Middleware | TraefikService | ServersTransport | ServersTransportTCP | Service | EndpointSliceresult: success | error | conflictforced: true | falseEmission path: Kubernetes API request instrumentation
Example:
pangolin_controller_k8s_request_duration_seconds_bucket{verb="patch",resource_kind="IngressRoute",result="success",forced="false",le="0.25"} 3Show Details
Show Details
Labels:
verb, resource_kind, result, forcedEmission path: Kubernetes API request instrumentation
Example:
pangolin_controller_k8s_requests_total{verb="patch",resource_kind="IngressRoute",result="success",forced="false"} 1Show Details
Show Details
Labels:
reason, operation, resource_kindLabel values:
reason: conflict | transient | timeoutoperation: get | create | patch | delete | applyEmission path: SSA apply retry instrumentation
Example:
pangolin_controller_retries_total{reason="conflict",operation="patch",resource_kind="IngressRoute"} 1Show Garbage Collection
Show Garbage Collection
Show Details
Show Details
Labels:
resultLabel values:
success | fail | dryrunEmission path: GC instrumentation
Example:
pangolin_controller_gc_run_duration_seconds_bucket{result="success",le="0.5"} 1pangolin_kube_controller_* prefix.GET /metrics on METRICS_ADDR, default :9090.
The same HTTP server also exposes /healthz, /readyz, and optionally /debug/pprof/ when pprof is enabled.Show Reconcile
Show Reconcile
Show Details
Show Details
Unit: seconds
Path:
Collector.ReconcileDurationExample:
pangolin_kube_controller_reconcile_seconds_bucket{le="0.5"} 3Show Details
Show Details
Unit: 1
Path:
Collector.ReconcileErrorsExample:
pangolin_kube_controller_reconcile_errors_total 2Show Details
Show Details
Unit: 1
Path:
Collector.ConsecutiveErrorsExample:
pangolin_kube_controller_consecutive_errors 0Show Details
Show Details
Unit: seconds since Unix epoch
Path:
Collector.LastFetchSuccessExample:
pangolin_kube_controller_last_fetch_success_timestamp_seconds 1767225600Show Details
Show Details
Unit: 1
Value:
1 = ready, 0 = not readyPath:
Collector.ReadyExample:
pangolin_kube_controller_ready 1Show Objects
Show Objects
Show Details
Show Details
kind, actionLabel values:
kind: IngressRoute | Middleware | TraefikService | other managed Traefik CRDsaction: create | patchUnit: 1
Path:
Collector.AppliedObjectsExample:
pangolin_kube_controller_objects_applied_total{kind="IngressRoute",action="patch"} 1Show Details
Show Details
kindUnit: 1
Path:
Collector.DeletedObjectsExample:
pangolin_kube_controller_objects_deleted_total{kind="Middleware"} 1Show Details
Show Details
kindUnit: 1
Path:
Collector.DesiredObjectsExample:
pangolin_kube_controller_desired_objects_count{kind="IngressRoute"} 12Show Garbage Collection
Show Garbage Collection
Show Details
Show Details
kind, reasonLabel values:
reason: immediate | graceUnit: 1
Path:
Collector.GCDeletedTotalExample:
pangolin_kube_controller_gc_deleted_total{kind="IngressRoute",reason="grace"} 1Show Details
Show Details
resultLabel values:
start | success | fail | dryrunUnit: 1
Path:
Collector.GCRunsTotalExample:
pangolin_kube_controller_gc_runs_total{result="success"} 1Show Details
Show Details
Unit: 1
Path:
Collector.GraceQueueDroppedExample:
pangolin_kube_controller_grace_queue_dropped_total 0Show Details
Show Details
Unit: 1
Path:
Collector.GraceQueueDepthExample:
pangolin_kube_controller_grace_queue_depth 3Show Instance Label
Show Instance Label
Show Details
Show Details
Unit: 1
Path:
Collector.InstanceLabelDetectSuccessExample:
pangolin_kube_controller_instance_label_detect_success_total 1Show Details
Show Details
Unit: 1
Path:
Collector.InstanceLabelDetectFailuresExample:
pangolin_kube_controller_instance_label_detect_failure_total 1Show Details
Show Details
Unit: seconds since Unix epoch
Path:
Collector.InstanceLabelLastCheckExample:
pangolin_kube_controller_instance_label_last_check_timestamp_seconds 1767225600Show Leader Election
Show Leader Election
Show Details
Show Details
Unit: 1
Value:
1 = leader, 0 = follower, -1 = leader election disabledPath:
Collector.LeaderStateExample:
pangolin_kube_controller_leader_state 1Show Runtime
Show Runtime
Show Details
Show Details
Unit: varies
Path:
collectors.NewGoCollector()Example:
go_goroutines 14Show Details
Show Details
Unit: varies
Path:
collectors.NewProcessCollector()Example:
process_resident_memory_bytes 52428800
