From f34c08d5c4464eb023c71085460050788627e194 Mon Sep 17 00:00:00 2001 From: Lukas Eklund Date: Thu, 18 Apr 2024 14:03:11 -0500 Subject: [PATCH 1/4] add ComputeRequestTimeBilled --- pkg/realtime/metrics.go | 2 + pkg/realtime/process.go | 1 + pkg/realtime/response.go | 447 ++++++++++++++++++++------------------- pkg/rt/common_test.go | 10 + 4 files changed, 237 insertions(+), 223 deletions(-) diff --git a/pkg/realtime/metrics.go b/pkg/realtime/metrics.go index bc6fa07..0ccc8b6 100644 --- a/pkg/realtime/metrics.go +++ b/pkg/realtime/metrics.go @@ -37,6 +37,7 @@ type Metrics struct { ComputeRAMUsedBytesTotal *prometheus.CounterVec ComputeReqBodyBytesTotal *prometheus.CounterVec ComputeReqHeaderBytesTotal *prometheus.CounterVec + ComputeRequestTimeBilledTotal *prometheus.CounterVec ComputeRequestTimeTotal *prometheus.CounterVec ComputeRequestsTotal *prometheus.CounterVec ComputeResourceLimitExceedTotal *prometheus.CounterVec @@ -230,6 +231,7 @@ func NewMetrics(namespace, subsystem string, nameFilter filter.Filter, r prometh ComputeRAMUsedBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_ram_used_bytes_total", Help: "The amount of RAM used for your site by Fastly."}, []string{"service_id", "service_name", "datacenter"}), ComputeReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_req_body_bytes_total", Help: "Total body bytes received by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), ComputeReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_req_header_bytes_total", Help: "Total header bytes received by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), + ComputeRequestTimeBilledTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_request_time_billed_total", Help: "The total amount of request processing time you will be billed for, measured in 50 millisecond increments. (in seconds)"}, []string{"service_id", "service_name", "datacenter"}), ComputeRequestTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_request_time_total", Help: "The total amount of time used to process your requests, including active CPU time (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), ComputeRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_requests_total", Help: "The total number of requests that were received for your site by Fastly."}, []string{"service_id", "service_name", "datacenter"}), ComputeResourceLimitExceedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resource_limit_exceeded_total", Help: "Number of times a guest exceeded its resource limit, includes heap, stack, globals, and code execution timeout."}, []string{"service_id", "service_name", "datacenter"}), diff --git a/pkg/realtime/process.go b/pkg/realtime/process.go index d875ded..19f95df 100644 --- a/pkg/realtime/process.go +++ b/pkg/realtime/process.go @@ -36,6 +36,7 @@ func Process(response *Response, serviceID, serviceName, serviceVersion string, m.ComputeRAMUsedBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRAMUsed)) m.ComputeReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeReqBodyBytesTotal)) m.ComputeReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeReqHeaderBytesTotal)) + m.ComputeRequestTimeBilledTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequestTimeBilledMilliseconds) / 10000.0) m.ComputeRequestTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequestTimeMilliseconds) / 10000.0) m.ComputeRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequests)) m.ComputeResourceLimitExceedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeResourceLimitExceedTotal)) diff --git a/pkg/realtime/response.go b/pkg/realtime/response.go index f8ce73e..5f7c58a 100644 --- a/pkg/realtime/response.go +++ b/pkg/realtime/response.go @@ -16,227 +16,228 @@ type Response struct { // Datacenter models the per-datacenter portion of the rt.fastly.com response. type Datacenter struct { - AttackBlockedReqBodyBytes uint64 `json:"attack_blocked_req_body_bytes"` - AttackBlockedReqHeaderBytes uint64 `json:"attack_blocked_req_header_bytes"` - AttackLoggedReqBodyBytes uint64 `json:"attack_logged_req_body_bytes"` - AttackLoggedReqHeaderBytes uint64 `json:"attack_logged_req_header_bytes"` - AttackPassedReqBodyBytes uint64 `json:"attack_passed_req_body_bytes"` - AttackPassedReqHeaderBytes uint64 `json:"attack_passed_req_header_bytes"` - AttackReqBodyBytes uint64 `json:"attack_req_body_bytes"` - AttackReqHeaderBytes uint64 `json:"attack_req_header_bytes"` - AttackRespSynthBytes uint64 `json:"attack_resp_synth_bytes"` - BackendReqBodyBytes uint64 `json:"bereq_body_bytes"` - BackendReqHeaderBytes uint64 `json:"bereq_header_bytes"` - Blacklisted uint64 `json:"blacklist"` - BodySize uint64 `json:"body_size"` - ComputeBackendReqBodyBytesTotal uint64 `json:"compute_bereq_body_bytes"` - ComputeBackendReqErrorsTotal uint64 `json:"compute_bereq_errors"` - ComputeBackendReqHeaderBytesTotal uint64 `json:"compute_bereq_header_bytes"` - ComputeBackendReqTotal uint64 `json:"compute_bereqs"` - ComputeBackendRespBodyBytesTotal uint64 `json:"compute_beresp_body_bytes"` - ComputeBackendRespHeaderBytesTotal uint64 `json:"compute_beresp_header_bytes"` - ComputeExecutionTimeMilliseconds uint64 `json:"compute_execution_time_ms"` - ComputeGlobalsLimitExceededTotal uint64 `json:"compute_globals_limit_exceeded"` - ComputeGuestErrorsTotal uint64 `json:"compute_guest_errors"` - ComputeHeapLimitExceededTotal uint64 `json:"compute_heap_limit_exceeded"` - ComputeRAMUsed uint64 `json:"compute_ram_used"` - ComputeReqBodyBytesTotal uint64 `json:"compute_req_body_bytes"` - ComputeReqHeaderBytesTotal uint64 `json:"compute_req_header_bytes"` - ComputeRequestTimeMilliseconds uint64 `json:"compute_request_time_ms"` - ComputeRequests uint64 `json:"compute_requests"` - ComputeResourceLimitExceedTotal uint64 `json:"compute_resource_limit_exceeded"` - ComputeRespBodyBytesTotal uint64 `json:"compute_resp_body_bytes"` - ComputeRespHeaderBytesTotal uint64 `json:"compute_resp_header_bytes"` - ComputeRespStatus1xx uint64 `json:"compute_resp_status_1xx"` - ComputeRespStatus2xx uint64 `json:"compute_resp_status_2xx"` - ComputeRespStatus3xx uint64 `json:"compute_resp_status_3xx"` - ComputeRespStatus4xx uint64 `json:"compute_resp_status_4xx"` - ComputeRespStatus5xx uint64 `json:"compute_resp_status_5xx"` - ComputeRuntimeErrorsTotal uint64 `json:"compute_runtime_errors"` - ComputeStackLimitExceededTotal uint64 `json:"compute_stack_limit_exceeded"` - DDOSActionBlackhole uint64 `json:"ddos_action_blackhole"` - DDOSActionClose uint64 `json:"ddos_action_close"` - DDOSActionLimitStreamsConnections uint64 `json:"ddos_action_limit_streams_connections"` - DDOSActionLimitStreamsRequests uint64 `json:"ddos_action_limit_streams_requests"` - DDOSActionTarpit uint64 `json:"ddos_action_tarpit"` - DDOSActionTarpitAccept uint64 `json:"ddos_action_tarpit_accept"` - DeliverSubCount uint64 `json:"deliver_sub_count"` - DeliverSubTime uint64 `json:"deliver_sub_time"` - Edge uint64 `json:"edge_requests"` - EdgeHitRequests uint64 `json:"edge_hit_requests"` - EdgeHitRespBodyBytes uint64 `json:"edge_hit_resp_body_bytes"` - EdgeHitRespHeaderBytes uint64 `json:"edge_hit_resp_header_bytes"` - EdgeMissRequests uint64 `json:"edge_miss_requests"` - EdgeMissRespBodyBytes uint64 `json:"edge_miss_resp_body_bytes"` - EdgeMissRespHeaderBytes uint64 `json:"edge_miss_resp_header_bytes"` - EdgeRespBodyBytes uint64 `json:"edge_resp_body_bytes"` - EdgeRespHeaderBytes uint64 `json:"edge_resp_header_bytes"` - ErrorSubCount uint64 `json:"error_sub_count"` - ErrorSubTime uint64 `json:"error_sub_time"` - Errors uint64 `json:"errors"` - FanoutBackendReqBodyBytes uint64 `json:"fanout_bereq_body_bytes"` - FanoutBackendReqHeaderBytes uint64 `json:"fanout_bereq_header_bytes"` - FanoutBackendRespBodyBytes uint64 `json:"fanout_beresp_body_bytes"` - FanoutBackendRespHeaderBytes uint64 `json:"fanout_beresp_header_bytes"` - FanoutConnTimeMs uint64 `json:"fanout_conn_time_ms"` - FanoutRecvPublishes uint64 `json:"fanout_recv_publishes"` - FanoutReqBodyBytes uint64 `json:"fanout_req_body_bytes"` - FanoutReqHeaderBytes uint64 `json:"fanout_req_header_bytes"` - FanoutRespBodyBytes uint64 `json:"fanout_resp_body_bytes"` - FanoutRespHeaderBytes uint64 `json:"fanout_resp_header_bytes"` - FanoutSendPublishes uint64 `json:"fanout_send_publishes"` - FetchSubCount uint64 `json:"fetch_sub_count"` - FetchSubTime uint64 `json:"fetch_sub_time"` - HTTP2 uint64 `json:"http2"` - HTTP3 uint64 `json:"http3"` - HashSubCount uint64 `json:"hash_sub_count"` - HashSubTime uint64 `json:"hash_sub_time"` - HeaderSize uint64 `json:"header_size"` - HitRespBodyBytes uint64 `json:"hit_resp_body_bytes"` - HitSubCount uint64 `json:"hit_sub_count"` - HitSubTime uint64 `json:"hit_sub_time"` - Hits uint64 `json:"hits"` - HitsTime float64 `json:"hits_time"` - IPv6 uint64 `json:"ipv6"` - ImgOpto uint64 `json:"imgopto"` - ImgOptoRespBodyBytes uint64 `json:"imgopto_resp_body_bytes"` - ImgOptoRespHeaderBytes uint64 `json:"imgopto_resp_header_bytes"` - ImgOptoShield uint64 `json:"imgopto_shield"` - ImgOptoShieldRespBodyBytes uint64 `json:"imgopto_shield_resp_body_bytes"` - ImgOptoShieldRespHeaderBytes uint64 `json:"imgopto_shield_resp_header_bytes"` - ImgOptoTransform uint64 `json:"imgopto_transforms"` - ImgOptoTransformRespBodyBytes uint64 `json:"imgopto_transform_resp_body_bytes"` - ImgOptoTransformRespHeaderBytes uint64 `json:"imgopto_transform_resp_header_bytes"` - ImgVideo uint64 `json:"imgvideo"` - ImgVideoFrames uint64 `json:"imgvideo_frames"` - ImgVideoRespBodyBytes uint64 `json:"imgvideo_resp_body_bytes"` - ImgVideoRespHeaderBytes uint64 `json:"imgvideo_resp_header_bytes"` - ImgVideoShield uint64 `json:"imgvideo_shield"` - ImgVideoShieldFrames uint64 `json:"imgvideo_shield_frames"` - ImgVideoShieldRespBodyBytes uint64 `json:"imgvideo_shield_resp_body_bytes"` - ImgVideoShieldRespHeaderBytes uint64 `json:"imgvideo_shield_resp_header_bytes"` - KVStoreClassAOperations uint64 `json:"kv_store_class_a_operations"` - KVStoreClassBOperations uint64 `json:"kv_store_class_b_operations"` - LogBytes uint64 `json:"log_bytes"` - Logging uint64 `json:"logging"` - MissHistogram map[string]uint64 `json:"miss_histogram"` - MissRespBodyBytes uint64 `json:"miss_resp_body_bytes"` - MissSubCount uint64 `json:"miss_sub_count"` - MissSubTime uint64 `json:"miss_sub_time"` - MissTime float64 `json:"miss_time"` - Misses uint64 `json:"miss"` - OTFP uint64 `json:"otfp"` - OTFPDeliverTime uint64 `json:"otfp_deliver_time"` - OTFPManifest uint64 `json:"otfp_manifests"` - OTFPRespBodyBytes uint64 `json:"otfp_resp_body_bytes"` - OTFPRespHeaderBytes uint64 `json:"otfp_resp_header_bytes"` - OTFPShield uint64 `json:"otfp_shield"` - OTFPShieldRespBodyBytes uint64 `json:"otfp_shield_resp_body_bytes"` - OTFPShieldRespHeaderBytes uint64 `json:"otfp_shield_resp_header_bytes"` - OTFPShieldTime uint64 `json:"otfp_shield_time"` - OTFPTransform uint64 `json:"otfp_transforms"` - OTFPTransformRespBodyBytes uint64 `json:"otfp_transform_resp_body_bytes"` - OTFPTransformRespHeaderBytes uint64 `json:"otfp_transform_resp_header_bytes"` - OTFPTransformTime uint64 `json:"otfp_transform_time"` - ObjectSize100k uint64 `json:"object_size_100k"` - ObjectSize100m uint64 `json:"object_size_100m"` - ObjectSize10k uint64 `json:"object_size_10k"` - ObjectSize10m uint64 `json:"object_size_10m"` - ObjectSize1g uint64 `json:"object_size_1g"` - ObjectSize1k uint64 `json:"object_size_1k"` - ObjectSize1m uint64 `json:"object_size_1m"` - ObjectSizeOther uint64 `json:"object_size_other"` - OriginCacheFetchRespBodyBytes uint64 `json:"origin_cache_fetch_resp_body_bytes"` - OriginCacheFetchRespHeaderBytes uint64 `json:"origin_cache_fetch_resp_header_bytes"` - OriginCacheFetches uint64 `json:"origin_cache_fetches"` - OriginFetchBodyBytes uint64 `json:"origin_fetch_body_bytes"` - OriginFetchHeaderBytes uint64 `json:"origin_fetch_header_bytes"` - OriginFetchRespBodyBytes uint64 `json:"origin_fetch_resp_body_bytes"` - OriginFetchRespHeaderBytes uint64 `json:"origin_fetch_resp_header_bytes"` - OriginFetches uint64 `json:"origin_fetches"` - OriginRevalidations uint64 `json:"origin_revalidations"` - PCI uint64 `json:"pci"` - PassRespBodyBytes uint64 `json:"pass_resp_body_bytes"` - PassSubCount uint64 `json:"pass_sub_count"` - PassSubTime uint64 `json:"pass_sub_time"` - PassTime float64 `json:"pass_time"` - Passes uint64 `json:"pass"` - Pipe uint64 `json:"pipe"` - PipeSubCount uint64 `json:"pipe_sub_count"` - PipeSubTime uint64 `json:"pipe_sub_time"` - PredeliverSubCount uint64 `json:"predeliver_sub_count"` - PredeliverSubTime uint64 `json:"predeliver_sub_time"` - PrehashSubCount uint64 `json:"prehash_sub_count"` - PrehashSubTime uint64 `json:"prehash_sub_time"` - RecvSubCount uint64 `json:"recv_sub_count"` - RecvSubTime uint64 `json:"recv_sub_time"` - ReqBodyBytes uint64 `json:"req_body_bytes"` - ReqHeaderBytes uint64 `json:"req_header_bytes"` - Requests uint64 `json:"requests"` - RespBodyBytes uint64 `json:"resp_body_bytes"` - RespHeaderBytes uint64 `json:"resp_header_bytes"` - Restart uint64 `json:"restarts"` - SegBlockOriginFetches uint64 `json:"segblock_origin_fetches"` - SegBlockShieldFetches uint64 `json:"segblock_shield_fetches"` - Shield uint64 `json:"shield"` - ShieldCacheFetches uint64 `json:"shield_cache_fetches"` - ShieldFetchBodyBytes uint64 `json:"shield_fetch_body_bytes"` - ShieldFetchHeaderBytes uint64 `json:"shield_fetch_header_bytes"` - ShieldFetchRespBodyBytes uint64 `json:"shield_fetch_resp_body_bytes"` - ShieldFetchRespHeaderBytes uint64 `json:"shield_fetch_resp_header_bytes"` - ShieldFetches uint64 `json:"shield_fetches"` - ShieldHitRequests uint64 `json:"shield_hit_requests"` - ShieldHitRespBodyBytes uint64 `json:"shield_hit_resp_body_bytes"` - ShieldHitRespHeaderBytes uint64 `json:"shield_hit_resp_header_bytes"` - ShieldMissRequests uint64 `json:"shield_miss_requests"` - ShieldMissRespBodyBytes uint64 `json:"shield_miss_resp_body_bytes"` - ShieldMissRespHeaderBytes uint64 `json:"shield_miss_resp_header_bytes"` - ShieldRespBodyBytes uint64 `json:"shield_resp_body_bytes"` - ShieldRespHeaderBytes uint64 `json:"shield_resp_header_bytes"` - ShieldRevalidations uint64 `json:"shield_revalidations"` - Status1xx uint64 `json:"status_1xx"` - Status200 uint64 `json:"status_200"` - Status204 uint64 `json:"status_204"` - Status206 uint64 `json:"status_206"` - Status2xx uint64 `json:"status_2xx"` - Status301 uint64 `json:"status_301"` - Status302 uint64 `json:"status_302"` - Status304 uint64 `json:"status_304"` - Status3xx uint64 `json:"status_3xx"` - Status400 uint64 `json:"status_400"` - Status401 uint64 `json:"status_401"` - Status403 uint64 `json:"status_403"` - Status404 uint64 `json:"status_404"` - Status406 uint64 `json:"status_406"` - Status416 uint64 `json:"status_416"` - Status429 uint64 `json:"status_429"` - Status4xx uint64 `json:"status_4xx"` - Status500 uint64 `json:"status_500"` - Status501 uint64 `json:"status_501"` - Status502 uint64 `json:"status_502"` - Status503 uint64 `json:"status_503"` - Status504 uint64 `json:"status_504"` - Status505 uint64 `json:"status_505"` - Status5xx uint64 `json:"status_5xx"` - Synths uint64 `json:"synth"` - TLS uint64 `json:"tls"` - TLSHandshakeSentBytes uint64 `json:"tls_handshake_sent_bytes"` - TLSv10 uint64 `json:"tls_v10"` - TLSv11 uint64 `json:"tls_v11"` - TLSv12 uint64 `json:"tls_v12"` - TLSv13 uint64 `json:"tls_v13"` - Uncacheable uint64 `json:"uncacheable"` - Video uint64 `json:"video"` - WAFBlocked uint64 `json:"waf_blocked"` - WAFLogged uint64 `json:"waf_logged"` - WAFPassed uint64 `json:"waf_passed"` - WebsocketBackendReqBodyBytes uint64 `json:"websocket_bereq_body_bytes"` - WebsocketBackendReqHeaderBytes uint64 `json:"websocket_bereq_header_bytes"` - WebsocketBackendRespBodyBytes uint64 `json:"websocket_beresp_body_bytes"` - WebsocketBackendRespHeaderBytes uint64 `json:"websocket_beresp_header_bytes"` - WebsocketConnTimeMs uint64 `json:"websocket_conn_time_ms"` - WebsocketReqBodyBytes uint64 `json:"websocket_req_body_bytes"` - WebsocketReqHeaderBytes uint64 `json:"websocket_req_header_bytes"` - WebsocketRespBodyBytes uint64 `json:"websocket_resp_body_bytes"` - WebsocketRespHeaderBytes uint64 `json:"websocket_resp_header_bytes"` + AttackBlockedReqBodyBytes uint64 `json:"attack_blocked_req_body_bytes"` + AttackBlockedReqHeaderBytes uint64 `json:"attack_blocked_req_header_bytes"` + AttackLoggedReqBodyBytes uint64 `json:"attack_logged_req_body_bytes"` + AttackLoggedReqHeaderBytes uint64 `json:"attack_logged_req_header_bytes"` + AttackPassedReqBodyBytes uint64 `json:"attack_passed_req_body_bytes"` + AttackPassedReqHeaderBytes uint64 `json:"attack_passed_req_header_bytes"` + AttackReqBodyBytes uint64 `json:"attack_req_body_bytes"` + AttackReqHeaderBytes uint64 `json:"attack_req_header_bytes"` + AttackRespSynthBytes uint64 `json:"attack_resp_synth_bytes"` + BackendReqBodyBytes uint64 `json:"bereq_body_bytes"` + BackendReqHeaderBytes uint64 `json:"bereq_header_bytes"` + Blacklisted uint64 `json:"blacklist"` + BodySize uint64 `json:"body_size"` + ComputeBackendReqBodyBytesTotal uint64 `json:"compute_bereq_body_bytes"` + ComputeBackendReqErrorsTotal uint64 `json:"compute_bereq_errors"` + ComputeBackendReqHeaderBytesTotal uint64 `json:"compute_bereq_header_bytes"` + ComputeBackendReqTotal uint64 `json:"compute_bereqs"` + ComputeBackendRespBodyBytesTotal uint64 `json:"compute_beresp_body_bytes"` + ComputeBackendRespHeaderBytesTotal uint64 `json:"compute_beresp_header_bytes"` + ComputeExecutionTimeMilliseconds uint64 `json:"compute_execution_time_ms"` + ComputeGlobalsLimitExceededTotal uint64 `json:"compute_globals_limit_exceeded"` + ComputeGuestErrorsTotal uint64 `json:"compute_guest_errors"` + ComputeHeapLimitExceededTotal uint64 `json:"compute_heap_limit_exceeded"` + ComputeRAMUsed uint64 `json:"compute_ram_used"` + ComputeReqBodyBytesTotal uint64 `json:"compute_req_body_bytes"` + ComputeReqHeaderBytesTotal uint64 `json:"compute_req_header_bytes"` + ComputeRequestTimeBilledMilliseconds uint64 `json:"compute_request_time_billed_ms"` + ComputeRequestTimeMilliseconds uint64 `json:"compute_request_time_ms"` + ComputeRequests uint64 `json:"compute_requests"` + ComputeResourceLimitExceedTotal uint64 `json:"compute_resource_limit_exceeded"` + ComputeRespBodyBytesTotal uint64 `json:"compute_resp_body_bytes"` + ComputeRespHeaderBytesTotal uint64 `json:"compute_resp_header_bytes"` + ComputeRespStatus1xx uint64 `json:"compute_resp_status_1xx"` + ComputeRespStatus2xx uint64 `json:"compute_resp_status_2xx"` + ComputeRespStatus3xx uint64 `json:"compute_resp_status_3xx"` + ComputeRespStatus4xx uint64 `json:"compute_resp_status_4xx"` + ComputeRespStatus5xx uint64 `json:"compute_resp_status_5xx"` + ComputeRuntimeErrorsTotal uint64 `json:"compute_runtime_errors"` + ComputeStackLimitExceededTotal uint64 `json:"compute_stack_limit_exceeded"` + DDOSActionBlackhole uint64 `json:"ddos_action_blackhole"` + DDOSActionClose uint64 `json:"ddos_action_close"` + DDOSActionLimitStreamsConnections uint64 `json:"ddos_action_limit_streams_connections"` + DDOSActionLimitStreamsRequests uint64 `json:"ddos_action_limit_streams_requests"` + DDOSActionTarpit uint64 `json:"ddos_action_tarpit"` + DDOSActionTarpitAccept uint64 `json:"ddos_action_tarpit_accept"` + DeliverSubCount uint64 `json:"deliver_sub_count"` + DeliverSubTime uint64 `json:"deliver_sub_time"` + Edge uint64 `json:"edge_requests"` + EdgeHitRequests uint64 `json:"edge_hit_requests"` + EdgeHitRespBodyBytes uint64 `json:"edge_hit_resp_body_bytes"` + EdgeHitRespHeaderBytes uint64 `json:"edge_hit_resp_header_bytes"` + EdgeMissRequests uint64 `json:"edge_miss_requests"` + EdgeMissRespBodyBytes uint64 `json:"edge_miss_resp_body_bytes"` + EdgeMissRespHeaderBytes uint64 `json:"edge_miss_resp_header_bytes"` + EdgeRespBodyBytes uint64 `json:"edge_resp_body_bytes"` + EdgeRespHeaderBytes uint64 `json:"edge_resp_header_bytes"` + ErrorSubCount uint64 `json:"error_sub_count"` + ErrorSubTime uint64 `json:"error_sub_time"` + Errors uint64 `json:"errors"` + FanoutBackendReqBodyBytes uint64 `json:"fanout_bereq_body_bytes"` + FanoutBackendReqHeaderBytes uint64 `json:"fanout_bereq_header_bytes"` + FanoutBackendRespBodyBytes uint64 `json:"fanout_beresp_body_bytes"` + FanoutBackendRespHeaderBytes uint64 `json:"fanout_beresp_header_bytes"` + FanoutConnTimeMs uint64 `json:"fanout_conn_time_ms"` + FanoutRecvPublishes uint64 `json:"fanout_recv_publishes"` + FanoutReqBodyBytes uint64 `json:"fanout_req_body_bytes"` + FanoutReqHeaderBytes uint64 `json:"fanout_req_header_bytes"` + FanoutRespBodyBytes uint64 `json:"fanout_resp_body_bytes"` + FanoutRespHeaderBytes uint64 `json:"fanout_resp_header_bytes"` + FanoutSendPublishes uint64 `json:"fanout_send_publishes"` + FetchSubCount uint64 `json:"fetch_sub_count"` + FetchSubTime uint64 `json:"fetch_sub_time"` + HTTP2 uint64 `json:"http2"` + HTTP3 uint64 `json:"http3"` + HashSubCount uint64 `json:"hash_sub_count"` + HashSubTime uint64 `json:"hash_sub_time"` + HeaderSize uint64 `json:"header_size"` + HitRespBodyBytes uint64 `json:"hit_resp_body_bytes"` + HitSubCount uint64 `json:"hit_sub_count"` + HitSubTime uint64 `json:"hit_sub_time"` + Hits uint64 `json:"hits"` + HitsTime float64 `json:"hits_time"` + IPv6 uint64 `json:"ipv6"` + ImgOpto uint64 `json:"imgopto"` + ImgOptoRespBodyBytes uint64 `json:"imgopto_resp_body_bytes"` + ImgOptoRespHeaderBytes uint64 `json:"imgopto_resp_header_bytes"` + ImgOptoShield uint64 `json:"imgopto_shield"` + ImgOptoShieldRespBodyBytes uint64 `json:"imgopto_shield_resp_body_bytes"` + ImgOptoShieldRespHeaderBytes uint64 `json:"imgopto_shield_resp_header_bytes"` + ImgOptoTransform uint64 `json:"imgopto_transforms"` + ImgOptoTransformRespBodyBytes uint64 `json:"imgopto_transform_resp_body_bytes"` + ImgOptoTransformRespHeaderBytes uint64 `json:"imgopto_transform_resp_header_bytes"` + ImgVideo uint64 `json:"imgvideo"` + ImgVideoFrames uint64 `json:"imgvideo_frames"` + ImgVideoRespBodyBytes uint64 `json:"imgvideo_resp_body_bytes"` + ImgVideoRespHeaderBytes uint64 `json:"imgvideo_resp_header_bytes"` + ImgVideoShield uint64 `json:"imgvideo_shield"` + ImgVideoShieldFrames uint64 `json:"imgvideo_shield_frames"` + ImgVideoShieldRespBodyBytes uint64 `json:"imgvideo_shield_resp_body_bytes"` + ImgVideoShieldRespHeaderBytes uint64 `json:"imgvideo_shield_resp_header_bytes"` + KVStoreClassAOperations uint64 `json:"kv_store_class_a_operations"` + KVStoreClassBOperations uint64 `json:"kv_store_class_b_operations"` + LogBytes uint64 `json:"log_bytes"` + Logging uint64 `json:"logging"` + MissHistogram map[string]uint64 `json:"miss_histogram"` + MissRespBodyBytes uint64 `json:"miss_resp_body_bytes"` + MissSubCount uint64 `json:"miss_sub_count"` + MissSubTime uint64 `json:"miss_sub_time"` + MissTime float64 `json:"miss_time"` + Misses uint64 `json:"miss"` + OTFP uint64 `json:"otfp"` + OTFPDeliverTime uint64 `json:"otfp_deliver_time"` + OTFPManifest uint64 `json:"otfp_manifests"` + OTFPRespBodyBytes uint64 `json:"otfp_resp_body_bytes"` + OTFPRespHeaderBytes uint64 `json:"otfp_resp_header_bytes"` + OTFPShield uint64 `json:"otfp_shield"` + OTFPShieldRespBodyBytes uint64 `json:"otfp_shield_resp_body_bytes"` + OTFPShieldRespHeaderBytes uint64 `json:"otfp_shield_resp_header_bytes"` + OTFPShieldTime uint64 `json:"otfp_shield_time"` + OTFPTransform uint64 `json:"otfp_transforms"` + OTFPTransformRespBodyBytes uint64 `json:"otfp_transform_resp_body_bytes"` + OTFPTransformRespHeaderBytes uint64 `json:"otfp_transform_resp_header_bytes"` + OTFPTransformTime uint64 `json:"otfp_transform_time"` + ObjectSize100k uint64 `json:"object_size_100k"` + ObjectSize100m uint64 `json:"object_size_100m"` + ObjectSize10k uint64 `json:"object_size_10k"` + ObjectSize10m uint64 `json:"object_size_10m"` + ObjectSize1g uint64 `json:"object_size_1g"` + ObjectSize1k uint64 `json:"object_size_1k"` + ObjectSize1m uint64 `json:"object_size_1m"` + ObjectSizeOther uint64 `json:"object_size_other"` + OriginCacheFetchRespBodyBytes uint64 `json:"origin_cache_fetch_resp_body_bytes"` + OriginCacheFetchRespHeaderBytes uint64 `json:"origin_cache_fetch_resp_header_bytes"` + OriginCacheFetches uint64 `json:"origin_cache_fetches"` + OriginFetchBodyBytes uint64 `json:"origin_fetch_body_bytes"` + OriginFetchHeaderBytes uint64 `json:"origin_fetch_header_bytes"` + OriginFetchRespBodyBytes uint64 `json:"origin_fetch_resp_body_bytes"` + OriginFetchRespHeaderBytes uint64 `json:"origin_fetch_resp_header_bytes"` + OriginFetches uint64 `json:"origin_fetches"` + OriginRevalidations uint64 `json:"origin_revalidations"` + PCI uint64 `json:"pci"` + PassRespBodyBytes uint64 `json:"pass_resp_body_bytes"` + PassSubCount uint64 `json:"pass_sub_count"` + PassSubTime uint64 `json:"pass_sub_time"` + PassTime float64 `json:"pass_time"` + Passes uint64 `json:"pass"` + Pipe uint64 `json:"pipe"` + PipeSubCount uint64 `json:"pipe_sub_count"` + PipeSubTime uint64 `json:"pipe_sub_time"` + PredeliverSubCount uint64 `json:"predeliver_sub_count"` + PredeliverSubTime uint64 `json:"predeliver_sub_time"` + PrehashSubCount uint64 `json:"prehash_sub_count"` + PrehashSubTime uint64 `json:"prehash_sub_time"` + RecvSubCount uint64 `json:"recv_sub_count"` + RecvSubTime uint64 `json:"recv_sub_time"` + ReqBodyBytes uint64 `json:"req_body_bytes"` + ReqHeaderBytes uint64 `json:"req_header_bytes"` + Requests uint64 `json:"requests"` + RespBodyBytes uint64 `json:"resp_body_bytes"` + RespHeaderBytes uint64 `json:"resp_header_bytes"` + Restart uint64 `json:"restarts"` + SegBlockOriginFetches uint64 `json:"segblock_origin_fetches"` + SegBlockShieldFetches uint64 `json:"segblock_shield_fetches"` + Shield uint64 `json:"shield"` + ShieldCacheFetches uint64 `json:"shield_cache_fetches"` + ShieldFetchBodyBytes uint64 `json:"shield_fetch_body_bytes"` + ShieldFetchHeaderBytes uint64 `json:"shield_fetch_header_bytes"` + ShieldFetchRespBodyBytes uint64 `json:"shield_fetch_resp_body_bytes"` + ShieldFetchRespHeaderBytes uint64 `json:"shield_fetch_resp_header_bytes"` + ShieldFetches uint64 `json:"shield_fetches"` + ShieldHitRequests uint64 `json:"shield_hit_requests"` + ShieldHitRespBodyBytes uint64 `json:"shield_hit_resp_body_bytes"` + ShieldHitRespHeaderBytes uint64 `json:"shield_hit_resp_header_bytes"` + ShieldMissRequests uint64 `json:"shield_miss_requests"` + ShieldMissRespBodyBytes uint64 `json:"shield_miss_resp_body_bytes"` + ShieldMissRespHeaderBytes uint64 `json:"shield_miss_resp_header_bytes"` + ShieldRespBodyBytes uint64 `json:"shield_resp_body_bytes"` + ShieldRespHeaderBytes uint64 `json:"shield_resp_header_bytes"` + ShieldRevalidations uint64 `json:"shield_revalidations"` + Status1xx uint64 `json:"status_1xx"` + Status200 uint64 `json:"status_200"` + Status204 uint64 `json:"status_204"` + Status206 uint64 `json:"status_206"` + Status2xx uint64 `json:"status_2xx"` + Status301 uint64 `json:"status_301"` + Status302 uint64 `json:"status_302"` + Status304 uint64 `json:"status_304"` + Status3xx uint64 `json:"status_3xx"` + Status400 uint64 `json:"status_400"` + Status401 uint64 `json:"status_401"` + Status403 uint64 `json:"status_403"` + Status404 uint64 `json:"status_404"` + Status406 uint64 `json:"status_406"` + Status416 uint64 `json:"status_416"` + Status429 uint64 `json:"status_429"` + Status4xx uint64 `json:"status_4xx"` + Status500 uint64 `json:"status_500"` + Status501 uint64 `json:"status_501"` + Status502 uint64 `json:"status_502"` + Status503 uint64 `json:"status_503"` + Status504 uint64 `json:"status_504"` + Status505 uint64 `json:"status_505"` + Status5xx uint64 `json:"status_5xx"` + Synths uint64 `json:"synth"` + TLS uint64 `json:"tls"` + TLSHandshakeSentBytes uint64 `json:"tls_handshake_sent_bytes"` + TLSv10 uint64 `json:"tls_v10"` + TLSv11 uint64 `json:"tls_v11"` + TLSv12 uint64 `json:"tls_v12"` + TLSv13 uint64 `json:"tls_v13"` + Uncacheable uint64 `json:"uncacheable"` + Video uint64 `json:"video"` + WAFBlocked uint64 `json:"waf_blocked"` + WAFLogged uint64 `json:"waf_logged"` + WAFPassed uint64 `json:"waf_passed"` + WebsocketBackendReqBodyBytes uint64 `json:"websocket_bereq_body_bytes"` + WebsocketBackendReqHeaderBytes uint64 `json:"websocket_bereq_header_bytes"` + WebsocketBackendRespBodyBytes uint64 `json:"websocket_beresp_body_bytes"` + WebsocketBackendRespHeaderBytes uint64 `json:"websocket_beresp_header_bytes"` + WebsocketConnTimeMs uint64 `json:"websocket_conn_time_ms"` + WebsocketReqBodyBytes uint64 `json:"websocket_req_body_bytes"` + WebsocketReqHeaderBytes uint64 `json:"websocket_req_header_bytes"` + WebsocketRespBodyBytes uint64 `json:"websocket_resp_body_bytes"` + WebsocketRespHeaderBytes uint64 `json:"websocket_resp_header_bytes"` } diff --git a/pkg/rt/common_test.go b/pkg/rt/common_test.go index 46285c7..c75f763 100644 --- a/pkg/rt/common_test.go +++ b/pkg/rt/common_test.go @@ -2181,6 +2181,16 @@ var expectedRTMetricsOutputMap = map[string]float64{ `testspace_testsystem_compute_req_header_bytes_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_req_header_bytes_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_req_header_bytes_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_request_time_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_request_time_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_request_time_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, From 2f993c9891664b92d675af853422c2a777fd014b Mon Sep 17 00:00:00 2001 From: Lukas Eklund Date: Thu, 18 Apr 2024 14:40:27 -0500 Subject: [PATCH 2/4] add bot challenge metrics --- pkg/realtime/metrics.go | 770 ++++++++++++++++++++------------------- pkg/realtime/process.go | 9 + pkg/realtime/response.go | 9 + pkg/rt/common_test.go | 90 +++++ 4 files changed, 502 insertions(+), 376 deletions(-) diff --git a/pkg/realtime/metrics.go b/pkg/realtime/metrics.go index 0ccc8b6..16443ad 100644 --- a/pkg/realtime/metrics.go +++ b/pkg/realtime/metrics.go @@ -11,388 +11,406 @@ import ( // Metrics collects all of the Prometheus metrics that map to real-time stats. type Metrics struct { - AttackBlockedReqBodyBytesTotal *prometheus.CounterVec - AttackBlockedReqHeaderBytesTotal *prometheus.CounterVec - AttackLoggedReqBodyBytesTotal *prometheus.CounterVec - AttackLoggedReqHeaderBytesTotal *prometheus.CounterVec - AttackPassedReqBodyBytesTotal *prometheus.CounterVec - AttackPassedReqHeaderBytesTotal *prometheus.CounterVec - AttackReqBodyBytesTotal *prometheus.CounterVec - AttackReqHeaderBytesTotal *prometheus.CounterVec - AttackRespSynthBytesTotal *prometheus.CounterVec - BackendReqBodyBytesTotal *prometheus.CounterVec - BackendReqHeaderBytesTotal *prometheus.CounterVec - BlacklistedTotal *prometheus.CounterVec - BodySizeTotal *prometheus.CounterVec - ComputeBackendReqBodyBytesTotal *prometheus.CounterVec - ComputeBackendReqErrorsTotal *prometheus.CounterVec - ComputeBackendReqHeaderBytesTotal *prometheus.CounterVec - ComputeBackendReqTotal *prometheus.CounterVec - ComputeBackendRespBodyBytesTotal *prometheus.CounterVec - ComputeBackendRespHeaderBytesTotal *prometheus.CounterVec - ComputeExecutionTimeTotal *prometheus.CounterVec - ComputeGlobalsLimitExceededTotal *prometheus.CounterVec - ComputeGuestErrorsTotal *prometheus.CounterVec - ComputeHeapLimitExceededTotal *prometheus.CounterVec - ComputeRAMUsedBytesTotal *prometheus.CounterVec - ComputeReqBodyBytesTotal *prometheus.CounterVec - ComputeReqHeaderBytesTotal *prometheus.CounterVec - ComputeRequestTimeBilledTotal *prometheus.CounterVec - ComputeRequestTimeTotal *prometheus.CounterVec - ComputeRequestsTotal *prometheus.CounterVec - ComputeResourceLimitExceedTotal *prometheus.CounterVec - ComputeRespBodyBytesTotal *prometheus.CounterVec - ComputeRespHeaderBytesTotal *prometheus.CounterVec - ComputeRespStatusTotal *prometheus.CounterVec - ComputeRuntimeErrorsTotal *prometheus.CounterVec - ComputeStackLimitExceededTotal *prometheus.CounterVec - DDOSActionBlackholeTotal *prometheus.CounterVec - DDOSActionCloseTotal *prometheus.CounterVec - DDOSActionLimitStreamsConnectionsTotal *prometheus.CounterVec - DDOSActionLimitStreamsRequestsTotal *prometheus.CounterVec - DDOSActionTarpitAcceptTotal *prometheus.CounterVec - DDOSActionTarpitTotal *prometheus.CounterVec - DeliverSubCountTotal *prometheus.CounterVec - DeliverSubTimeTotal *prometheus.CounterVec - EdgeHitRequestsTotal *prometheus.CounterVec - EdgeHitRespBodyBytesTotal *prometheus.CounterVec - EdgeHitRespHeaderBytesTotal *prometheus.CounterVec - EdgeMissRequestsTotal *prometheus.CounterVec - EdgeMissRespBodyBytesTotal *prometheus.CounterVec - EdgeMissRespHeaderBytesTotal *prometheus.CounterVec - EdgeRespBodyBytesTotal *prometheus.CounterVec - EdgeRespHeaderBytesTotal *prometheus.CounterVec - EdgeTotal *prometheus.CounterVec - ErrorSubCountTotal *prometheus.CounterVec - ErrorSubTimeTotal *prometheus.CounterVec - ErrorsTotal *prometheus.CounterVec - FanoutBackendReqBodyBytesTotal *prometheus.CounterVec - FanoutBackendReqHeaderBytesTotal *prometheus.CounterVec - FanoutBackendRespBodyBytesTotal *prometheus.CounterVec - FanoutBackendRespHeaderBytesTotal *prometheus.CounterVec - FanoutConnTimeMsTotal *prometheus.CounterVec - FanoutRecvPublishesTotal *prometheus.CounterVec - FanoutReqBodyBytesTotal *prometheus.CounterVec - FanoutReqHeaderBytesTotal *prometheus.CounterVec - FanoutRespBodyBytesTotal *prometheus.CounterVec - FanoutRespHeaderBytesTotal *prometheus.CounterVec - FanoutSendPublishesTotal *prometheus.CounterVec - FetchSubCountTotal *prometheus.CounterVec - FetchSubTimeTotal *prometheus.CounterVec - HTTPTotal *prometheus.CounterVec - HTTP2Total *prometheus.CounterVec - HTTP3Total *prometheus.CounterVec - HashSubCountTotal *prometheus.CounterVec - HashSubTimeTotal *prometheus.CounterVec - HeaderSizeTotal *prometheus.CounterVec - HitRespBodyBytesTotal *prometheus.CounterVec - HitSubCountTotal *prometheus.CounterVec - HitSubTimeTotal *prometheus.CounterVec - HitsTimeTotal *prometheus.CounterVec - HitsTotal *prometheus.CounterVec - IPv6Total *prometheus.CounterVec - ImgOptoRespBodyBytesTotal *prometheus.CounterVec - ImgOptoRespHeaderBytesTotal *prometheus.CounterVec - ImgOptoShieldRespBodyBytesTotal *prometheus.CounterVec - ImgOptoShieldRespHeaderBytesTotal *prometheus.CounterVec - ImgOptoShieldTotal *prometheus.CounterVec - ImgOptoTotal *prometheus.CounterVec - ImgOptoTransformRespBodyBytesTotal *prometheus.CounterVec - ImgOptoTransformRespHeaderBytesTotal *prometheus.CounterVec - ImgOptoTransformTotal *prometheus.CounterVec - ImgVideoFramesTotal *prometheus.CounterVec - ImgVideoRespBodyBytesTotal *prometheus.CounterVec - ImgVideoRespHeaderBytesTotal *prometheus.CounterVec - ImgVideoShieldFramesTotal *prometheus.CounterVec - ImgVideoShieldRespBodyBytesTotal *prometheus.CounterVec - ImgVideoShieldRespHeaderBytesTotal *prometheus.CounterVec - ImgVideoShieldTotal *prometheus.CounterVec - ImgVideoTotal *prometheus.CounterVec - KVStoreClassAOperationsTotal *prometheus.CounterVec - KVStoreClassBOperationsTotal *prometheus.CounterVec - LogBytesTotal *prometheus.CounterVec - LoggingTotal *prometheus.CounterVec - MissDurationSeconds *prometheus.HistogramVec - MissRespBodyBytesTotal *prometheus.CounterVec - MissSubCountTotal *prometheus.CounterVec - MissSubTimeTotal *prometheus.CounterVec - MissTimeTotal *prometheus.CounterVec - MissesTotal *prometheus.CounterVec - OTFPDeliverTimeTotal *prometheus.CounterVec - OTFPManifestTotal *prometheus.CounterVec - OTFPRespBodyBytesTotal *prometheus.CounterVec - OTFPRespHeaderBytesTotal *prometheus.CounterVec - OTFPShieldRespBodyBytesTotal *prometheus.CounterVec - OTFPShieldRespHeaderBytesTotal *prometheus.CounterVec - OTFPShieldTimeTotal *prometheus.CounterVec - OTFPShieldTotal *prometheus.CounterVec - OTFPTotal *prometheus.CounterVec - OTFPTransformRespBodyBytesTotal *prometheus.CounterVec - OTFPTransformRespHeaderBytesTotal *prometheus.CounterVec - OTFPTransformTimeTotal *prometheus.CounterVec - OTFPTransformTotal *prometheus.CounterVec - ObjectSizeBytes *prometheus.HistogramVec - OriginCacheFetchRespBodyBytesTotal *prometheus.CounterVec - OriginCacheFetchRespHeaderBytesTotal *prometheus.CounterVec - OriginCacheFetchesTotal *prometheus.CounterVec - OriginFetchBodyBytesTotal *prometheus.CounterVec - OriginFetchHeaderBytesTotal *prometheus.CounterVec - OriginFetchRespBodyBytesTotal *prometheus.CounterVec - OriginFetchRespHeaderBytesTotal *prometheus.CounterVec - OriginFetchesTotal *prometheus.CounterVec - OriginRevalidationsTotal *prometheus.CounterVec - PCITotal *prometheus.CounterVec - PassRespBodyBytesTotal *prometheus.CounterVec - PassSubCountTotal *prometheus.CounterVec - PassSubTimeTotal *prometheus.CounterVec - PassTimeTotal *prometheus.CounterVec - PassesTotal *prometheus.CounterVec - Pipe *prometheus.CounterVec - PipeSubCountTotal *prometheus.CounterVec - PipeSubTimeTotal *prometheus.CounterVec - PredeliverSubCountTotal *prometheus.CounterVec - PredeliverSubTimeTotal *prometheus.CounterVec - PrehashSubCountTotal *prometheus.CounterVec - PrehashSubTimeTotal *prometheus.CounterVec - RealtimeAPIRequestsTotal *prometheus.CounterVec - RecvSubCountTotal *prometheus.CounterVec - RecvSubTimeTotal *prometheus.CounterVec - ReqBodyBytesTotal *prometheus.CounterVec - ReqHeaderBytesTotal *prometheus.CounterVec - RequestsTotal *prometheus.CounterVec - RespBodyBytesTotal *prometheus.CounterVec - RespHeaderBytesTotal *prometheus.CounterVec - RestartTotal *prometheus.CounterVec - SegBlockOriginFetchesTotal *prometheus.CounterVec - SegBlockShieldFetchesTotal *prometheus.CounterVec - ShieldCacheFetchesTotal *prometheus.CounterVec - ShieldFetchBodyBytesTotal *prometheus.CounterVec - ShieldFetchHeaderBytesTotal *prometheus.CounterVec - ShieldFetchRespBodyBytesTotal *prometheus.CounterVec - ShieldFetchRespHeaderBytesTotal *prometheus.CounterVec - ShieldFetchesTotal *prometheus.CounterVec - ShieldHitRequestsTotal *prometheus.CounterVec - ShieldHitRespBodyBytesTotal *prometheus.CounterVec - ShieldHitRespHeaderBytesTotal *prometheus.CounterVec - ShieldMissRequestsTotal *prometheus.CounterVec - ShieldMissRespBodyBytesTotal *prometheus.CounterVec - ShieldMissRespHeaderBytesTotal *prometheus.CounterVec - ShieldRespBodyBytesTotal *prometheus.CounterVec - ShieldRespHeaderBytesTotal *prometheus.CounterVec - ShieldRevalidationsTotal *prometheus.CounterVec - ShieldTotal *prometheus.CounterVec - StatusCodeTotal *prometheus.CounterVec - StatusGroupTotal *prometheus.CounterVec - SynthsTotal *prometheus.CounterVec - TLSTotal *prometheus.CounterVec - UncacheableTotal *prometheus.CounterVec - VideoTotal *prometheus.CounterVec - WAFBlockedTotal *prometheus.CounterVec - WAFLoggedTotal *prometheus.CounterVec - WAFPassedTotal *prometheus.CounterVec - WebsocketBackendReqBodyBytesTotal *prometheus.CounterVec - WebsocketBackendReqHeaderBytesTotal *prometheus.CounterVec - WebsocketBackendRespBodyBytesTotal *prometheus.CounterVec - WebsocketBackendRespHeaderBytesTotal *prometheus.CounterVec - WebsocketConnTimeMsTotal *prometheus.CounterVec - WebsocketReqBodyBytesTotal *prometheus.CounterVec - WebsocketReqHeaderBytesTotal *prometheus.CounterVec - WebsocketRespBodyBytesTotal *prometheus.CounterVec - WebsocketRespHeaderBytesTotal *prometheus.CounterVec + AttackBlockedReqBodyBytesTotal *prometheus.CounterVec + AttackBlockedReqHeaderBytesTotal *prometheus.CounterVec + AttackLoggedReqBodyBytesTotal *prometheus.CounterVec + AttackLoggedReqHeaderBytesTotal *prometheus.CounterVec + AttackPassedReqBodyBytesTotal *prometheus.CounterVec + AttackPassedReqHeaderBytesTotal *prometheus.CounterVec + AttackReqBodyBytesTotal *prometheus.CounterVec + AttackReqHeaderBytesTotal *prometheus.CounterVec + AttackRespSynthBytesTotal *prometheus.CounterVec + BackendReqBodyBytesTotal *prometheus.CounterVec + BackendReqHeaderBytesTotal *prometheus.CounterVec + BlacklistedTotal *prometheus.CounterVec + BodySizeTotal *prometheus.CounterVec + BotChallengeCompleteTokensCheckedTotal *prometheus.CounterVec + BotChallengeCompleteTokensDisabledTotal *prometheus.CounterVec + BotChallengeCompleteTokensFailedTotal *prometheus.CounterVec + BotChallengeCompleteTokensIssuedTotal *prometheus.CounterVec + BotChallengeCompleteTokensPassedTotal *prometheus.CounterVec + BotChallengeStartsTotal *prometheus.CounterVec + BotChallengesFailedTotal *prometheus.CounterVec + BotChallengesIssuedTotal *prometheus.CounterVec + BotChallengesSucceededTotal *prometheus.CounterVec + ComputeBackendReqBodyBytesTotal *prometheus.CounterVec + ComputeBackendReqErrorsTotal *prometheus.CounterVec + ComputeBackendReqHeaderBytesTotal *prometheus.CounterVec + ComputeBackendReqTotal *prometheus.CounterVec + ComputeBackendRespBodyBytesTotal *prometheus.CounterVec + ComputeBackendRespHeaderBytesTotal *prometheus.CounterVec + ComputeExecutionTimeTotal *prometheus.CounterVec + ComputeGlobalsLimitExceededTotal *prometheus.CounterVec + ComputeGuestErrorsTotal *prometheus.CounterVec + ComputeHeapLimitExceededTotal *prometheus.CounterVec + ComputeRAMUsedBytesTotal *prometheus.CounterVec + ComputeReqBodyBytesTotal *prometheus.CounterVec + ComputeReqHeaderBytesTotal *prometheus.CounterVec + ComputeRequestTimeBilledTotal *prometheus.CounterVec + ComputeRequestTimeTotal *prometheus.CounterVec + ComputeRequestsTotal *prometheus.CounterVec + ComputeResourceLimitExceedTotal *prometheus.CounterVec + ComputeRespBodyBytesTotal *prometheus.CounterVec + ComputeRespHeaderBytesTotal *prometheus.CounterVec + ComputeRespStatusTotal *prometheus.CounterVec + ComputeRuntimeErrorsTotal *prometheus.CounterVec + ComputeStackLimitExceededTotal *prometheus.CounterVec + DDOSActionBlackholeTotal *prometheus.CounterVec + DDOSActionCloseTotal *prometheus.CounterVec + DDOSActionLimitStreamsConnectionsTotal *prometheus.CounterVec + DDOSActionLimitStreamsRequestsTotal *prometheus.CounterVec + DDOSActionTarpitAcceptTotal *prometheus.CounterVec + DDOSActionTarpitTotal *prometheus.CounterVec + DeliverSubCountTotal *prometheus.CounterVec + DeliverSubTimeTotal *prometheus.CounterVec + EdgeHitRequestsTotal *prometheus.CounterVec + EdgeHitRespBodyBytesTotal *prometheus.CounterVec + EdgeHitRespHeaderBytesTotal *prometheus.CounterVec + EdgeMissRequestsTotal *prometheus.CounterVec + EdgeMissRespBodyBytesTotal *prometheus.CounterVec + EdgeMissRespHeaderBytesTotal *prometheus.CounterVec + EdgeRespBodyBytesTotal *prometheus.CounterVec + EdgeRespHeaderBytesTotal *prometheus.CounterVec + EdgeTotal *prometheus.CounterVec + ErrorSubCountTotal *prometheus.CounterVec + ErrorSubTimeTotal *prometheus.CounterVec + ErrorsTotal *prometheus.CounterVec + FanoutBackendReqBodyBytesTotal *prometheus.CounterVec + FanoutBackendReqHeaderBytesTotal *prometheus.CounterVec + FanoutBackendRespBodyBytesTotal *prometheus.CounterVec + FanoutBackendRespHeaderBytesTotal *prometheus.CounterVec + FanoutConnTimeMsTotal *prometheus.CounterVec + FanoutRecvPublishesTotal *prometheus.CounterVec + FanoutReqBodyBytesTotal *prometheus.CounterVec + FanoutReqHeaderBytesTotal *prometheus.CounterVec + FanoutRespBodyBytesTotal *prometheus.CounterVec + FanoutRespHeaderBytesTotal *prometheus.CounterVec + FanoutSendPublishesTotal *prometheus.CounterVec + FetchSubCountTotal *prometheus.CounterVec + FetchSubTimeTotal *prometheus.CounterVec + HTTPTotal *prometheus.CounterVec + HTTP2Total *prometheus.CounterVec + HTTP3Total *prometheus.CounterVec + HashSubCountTotal *prometheus.CounterVec + HashSubTimeTotal *prometheus.CounterVec + HeaderSizeTotal *prometheus.CounterVec + HitRespBodyBytesTotal *prometheus.CounterVec + HitSubCountTotal *prometheus.CounterVec + HitSubTimeTotal *prometheus.CounterVec + HitsTimeTotal *prometheus.CounterVec + HitsTotal *prometheus.CounterVec + IPv6Total *prometheus.CounterVec + ImgOptoRespBodyBytesTotal *prometheus.CounterVec + ImgOptoRespHeaderBytesTotal *prometheus.CounterVec + ImgOptoShieldRespBodyBytesTotal *prometheus.CounterVec + ImgOptoShieldRespHeaderBytesTotal *prometheus.CounterVec + ImgOptoShieldTotal *prometheus.CounterVec + ImgOptoTotal *prometheus.CounterVec + ImgOptoTransformRespBodyBytesTotal *prometheus.CounterVec + ImgOptoTransformRespHeaderBytesTotal *prometheus.CounterVec + ImgOptoTransformTotal *prometheus.CounterVec + ImgVideoFramesTotal *prometheus.CounterVec + ImgVideoRespBodyBytesTotal *prometheus.CounterVec + ImgVideoRespHeaderBytesTotal *prometheus.CounterVec + ImgVideoShieldFramesTotal *prometheus.CounterVec + ImgVideoShieldRespBodyBytesTotal *prometheus.CounterVec + ImgVideoShieldRespHeaderBytesTotal *prometheus.CounterVec + ImgVideoShieldTotal *prometheus.CounterVec + ImgVideoTotal *prometheus.CounterVec + KVStoreClassAOperationsTotal *prometheus.CounterVec + KVStoreClassBOperationsTotal *prometheus.CounterVec + LogBytesTotal *prometheus.CounterVec + LoggingTotal *prometheus.CounterVec + MissDurationSeconds *prometheus.HistogramVec + MissRespBodyBytesTotal *prometheus.CounterVec + MissSubCountTotal *prometheus.CounterVec + MissSubTimeTotal *prometheus.CounterVec + MissTimeTotal *prometheus.CounterVec + MissesTotal *prometheus.CounterVec + OTFPDeliverTimeTotal *prometheus.CounterVec + OTFPManifestTotal *prometheus.CounterVec + OTFPRespBodyBytesTotal *prometheus.CounterVec + OTFPRespHeaderBytesTotal *prometheus.CounterVec + OTFPShieldRespBodyBytesTotal *prometheus.CounterVec + OTFPShieldRespHeaderBytesTotal *prometheus.CounterVec + OTFPShieldTimeTotal *prometheus.CounterVec + OTFPShieldTotal *prometheus.CounterVec + OTFPTotal *prometheus.CounterVec + OTFPTransformRespBodyBytesTotal *prometheus.CounterVec + OTFPTransformRespHeaderBytesTotal *prometheus.CounterVec + OTFPTransformTimeTotal *prometheus.CounterVec + OTFPTransformTotal *prometheus.CounterVec + ObjectSizeBytes *prometheus.HistogramVec + OriginCacheFetchRespBodyBytesTotal *prometheus.CounterVec + OriginCacheFetchRespHeaderBytesTotal *prometheus.CounterVec + OriginCacheFetchesTotal *prometheus.CounterVec + OriginFetchBodyBytesTotal *prometheus.CounterVec + OriginFetchHeaderBytesTotal *prometheus.CounterVec + OriginFetchRespBodyBytesTotal *prometheus.CounterVec + OriginFetchRespHeaderBytesTotal *prometheus.CounterVec + OriginFetchesTotal *prometheus.CounterVec + OriginRevalidationsTotal *prometheus.CounterVec + PCITotal *prometheus.CounterVec + PassRespBodyBytesTotal *prometheus.CounterVec + PassSubCountTotal *prometheus.CounterVec + PassSubTimeTotal *prometheus.CounterVec + PassTimeTotal *prometheus.CounterVec + PassesTotal *prometheus.CounterVec + Pipe *prometheus.CounterVec + PipeSubCountTotal *prometheus.CounterVec + PipeSubTimeTotal *prometheus.CounterVec + PredeliverSubCountTotal *prometheus.CounterVec + PredeliverSubTimeTotal *prometheus.CounterVec + PrehashSubCountTotal *prometheus.CounterVec + PrehashSubTimeTotal *prometheus.CounterVec + RealtimeAPIRequestsTotal *prometheus.CounterVec + RecvSubCountTotal *prometheus.CounterVec + RecvSubTimeTotal *prometheus.CounterVec + ReqBodyBytesTotal *prometheus.CounterVec + ReqHeaderBytesTotal *prometheus.CounterVec + RequestsTotal *prometheus.CounterVec + RespBodyBytesTotal *prometheus.CounterVec + RespHeaderBytesTotal *prometheus.CounterVec + RestartTotal *prometheus.CounterVec + SegBlockOriginFetchesTotal *prometheus.CounterVec + SegBlockShieldFetchesTotal *prometheus.CounterVec + ShieldCacheFetchesTotal *prometheus.CounterVec + ShieldFetchBodyBytesTotal *prometheus.CounterVec + ShieldFetchHeaderBytesTotal *prometheus.CounterVec + ShieldFetchRespBodyBytesTotal *prometheus.CounterVec + ShieldFetchRespHeaderBytesTotal *prometheus.CounterVec + ShieldFetchesTotal *prometheus.CounterVec + ShieldHitRequestsTotal *prometheus.CounterVec + ShieldHitRespBodyBytesTotal *prometheus.CounterVec + ShieldHitRespHeaderBytesTotal *prometheus.CounterVec + ShieldMissRequestsTotal *prometheus.CounterVec + ShieldMissRespBodyBytesTotal *prometheus.CounterVec + ShieldMissRespHeaderBytesTotal *prometheus.CounterVec + ShieldRespBodyBytesTotal *prometheus.CounterVec + ShieldRespHeaderBytesTotal *prometheus.CounterVec + ShieldRevalidationsTotal *prometheus.CounterVec + ShieldTotal *prometheus.CounterVec + StatusCodeTotal *prometheus.CounterVec + StatusGroupTotal *prometheus.CounterVec + SynthsTotal *prometheus.CounterVec + TLSTotal *prometheus.CounterVec + UncacheableTotal *prometheus.CounterVec + VideoTotal *prometheus.CounterVec + WAFBlockedTotal *prometheus.CounterVec + WAFLoggedTotal *prometheus.CounterVec + WAFPassedTotal *prometheus.CounterVec + WebsocketBackendReqBodyBytesTotal *prometheus.CounterVec + WebsocketBackendReqHeaderBytesTotal *prometheus.CounterVec + WebsocketBackendRespBodyBytesTotal *prometheus.CounterVec + WebsocketBackendRespHeaderBytesTotal *prometheus.CounterVec + WebsocketConnTimeMsTotal *prometheus.CounterVec + WebsocketReqBodyBytesTotal *prometheus.CounterVec + WebsocketReqHeaderBytesTotal *prometheus.CounterVec + WebsocketRespBodyBytesTotal *prometheus.CounterVec + WebsocketRespHeaderBytesTotal *prometheus.CounterVec } // NewMetrics returns a new set of metrics registered to the registerer. // Only metrics whose names pass the name filter are registered. func NewMetrics(namespace, subsystem string, nameFilter filter.Filter, r prometheus.Registerer) *Metrics { m := Metrics{ - AttackBlockedReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_blocked_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule that was blocked."}, []string{"service_id", "service_name", "datacenter"}), - AttackBlockedReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_blocked_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule that was blocked."}, []string{"service_id", "service_name", "datacenter"}), - AttackLoggedReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_logged_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule that was logged."}, []string{"service_id", "service_name", "datacenter"}), - AttackLoggedReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_logged_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule that was logged."}, []string{"service_id", "service_name", "datacenter"}), - AttackPassedReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_passed_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule that was passed."}, []string{"service_id", "service_name", "datacenter"}), - AttackPassedReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_passed_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule that was passed."}, []string{"service_id", "service_name", "datacenter"}), - AttackReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule."}, []string{"service_id", "service_name", "datacenter"}), - AttackReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule."}, []string{"service_id", "service_name", "datacenter"}), - AttackRespSynthBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_resp_synth_bytes_total", Help: "Total bytes delivered for requests that triggered a WAF rule and returned a synthetic response."}, []string{"service_id", "service_name", "datacenter"}), - BackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bereq_body_bytes_total", Help: "Total body bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), - BackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bereq_header_bytes_total", Help: "Total header bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), - BlacklistedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "blacklist_total", Help: "TODO"}, []string{"service_id", "service_name", "datacenter"}), - BodySizeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "body_size_total", Help: "Total body bytes delivered (alias for resp_body_bytes)."}, []string{"service_id", "service_name", "datacenter"}), - ComputeBackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_body_bytes_total", Help: "Total body bytes sent to backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), - ComputeBackendReqErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_errors_total", Help: "Number of backend request errors, including timeouts."}, []string{"service_id", "service_name", "datacenter"}), - ComputeBackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_header_bytes_total", Help: "Total header bytes sent to backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), - ComputeBackendReqTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_total", Help: "Number of backend requests started."}, []string{"service_id", "service_name", "datacenter"}), - ComputeBackendRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_beresp_body_bytes_total", Help: "Total body bytes received from backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), - ComputeBackendRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_beresp_header_bytes_total", Help: "Total header bytes received from backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), - ComputeExecutionTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_execution_time_total", Help: "The amount of active CPU time used to process your requests (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - ComputeGlobalsLimitExceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_globals_limit_exceeded_total", Help: "Number of times a guest exceeded its globals limit."}, []string{"service_id", "service_name", "datacenter"}), - ComputeGuestErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_guest_errors_total", Help: "Number of times a service experienced a guest code error."}, []string{"service_id", "service_name", "datacenter"}), - ComputeHeapLimitExceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_heap_limit_exceeded_total", Help: "Number of times a guest exceeded its heap limit."}, []string{"service_id", "service_name", "datacenter"}), - ComputeRAMUsedBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_ram_used_bytes_total", Help: "The amount of RAM used for your site by Fastly."}, []string{"service_id", "service_name", "datacenter"}), - ComputeReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_req_body_bytes_total", Help: "Total body bytes received by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), - ComputeReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_req_header_bytes_total", Help: "Total header bytes received by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), - ComputeRequestTimeBilledTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_request_time_billed_total", Help: "The total amount of request processing time you will be billed for, measured in 50 millisecond increments. (in seconds)"}, []string{"service_id", "service_name", "datacenter"}), - ComputeRequestTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_request_time_total", Help: "The total amount of time used to process your requests, including active CPU time (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - ComputeRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_requests_total", Help: "The total number of requests that were received for your site by Fastly."}, []string{"service_id", "service_name", "datacenter"}), - ComputeResourceLimitExceedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resource_limit_exceeded_total", Help: "Number of times a guest exceeded its resource limit, includes heap, stack, globals, and code execution timeout."}, []string{"service_id", "service_name", "datacenter"}), - ComputeRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resp_body_bytes_total", Help: "Total body bytes sent from Compute@Edge to end user."}, []string{"service_id", "service_name", "datacenter"}), - ComputeRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resp_header_bytes_total", Help: "Total header bytes sent from Compute@Edge to end user."}, []string{"service_id", "service_name", "datacenter"}), - ComputeRespStatusTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resp_status_total", Help: "Number of responses delivered delivered by Compute@Edge, by status code group."}, []string{"service_id", "service_name", "datacenter", "status_group"}), - ComputeRuntimeErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_runtime_errors_total", Help: "Number of times a service experienced a guest runtime error."}, []string{"service_id", "service_name", "datacenter"}), - ComputeStackLimitExceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_stack_limit_exceeded_total", Help: "Number of times a guest exceeded its stack limit."}, []string{"service_id", "service_name", "datacenter"}), - DDOSActionBlackholeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_blackhole_total", Help: "The number of times the blackhole action was taken. The blackhole action quietly closes a TCP connection without sending a reset. The blackhole action quietly closes a TCP connection without notifying its peer (all TCP state is dropped)."}, []string{"service_id", "service_name", "datacenter"}), - DDOSActionCloseTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_close_total", Help: "The number of times the close action was taken. The close action aborts the connection as soon as possible. The close action takes effect either right after accept, right after the client hello, or right after the response was sent."}, []string{"service_id", "service_name", "datacenter"}), - DDOSActionLimitStreamsConnectionsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_limit_streams_connections_total", Help: "For HTTP/2, the number of connections the limit-streams action was applied to. The limit-streams action caps the allowed number of concurrent streams in a connection."}, []string{"service_id", "service_name", "datacenter"}), - DDOSActionLimitStreamsRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_limit_streams_requests_total", Help: "For HTTP/2, the number of requests made on a connection for which the limit-streams action was taken. The limit-streams action caps the allowed number of concurrent streams in a connection."}, []string{"service_id", "service_name", "datacenter"}), - DDOSActionTarpitAcceptTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_tarpit_accept_total", Help: "The number of times the tarpit-accept action was taken. The tarpit-accept action adds a delay when accepting future connections."}, []string{"service_id", "service_name", "datacenter"}), - DDOSActionTarpitTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_tarpit_total", Help: "The number of times the tarpit action was taken. The tarpit action delays writing the response to the client."}, []string{"service_id", "service_name", "datacenter"}), - DeliverSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "deliver_sub_count_total", Help: "Number of executions of the 'deliver' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - DeliverSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "deliver_sub_time_total", Help: "Time spent inside the 'deliver' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - EdgeHitRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_hit_requests_total", Help: "Number of requests sent by end users to Fastly that resulted in a hit at the edge."}, []string{"service_id", "service_name", "datacenter"}), - EdgeHitRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_hit_resp_body_bytes_total", Help: "Body bytes delivered for edge hits."}, []string{"service_id", "service_name", "datacenter"}), - EdgeHitRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_hit_resp_header_bytes_total", Help: "Header bytes delivered for edge hits."}, []string{"service_id", "service_name", "datacenter"}), - EdgeMissRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_miss_requests_total", Help: "Number of requests sent by end users to Fastly that resulted in a miss at the edge."}, []string{"service_id", "service_name", "datacenter"}), - EdgeMissRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_miss_resp_body_bytes_total", Help: "Body bytes delivered for edge misses."}, []string{"service_id", "service_name", "datacenter"}), - EdgeMissRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_miss_resp_header_bytes_total", Help: "Header bytes delivered for edge misses."}, []string{"service_id", "service_name", "datacenter"}), - EdgeRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_resp_body_bytes_total", Help: "Total body bytes delivered from Fastly to the end user."}, []string{"service_id", "service_name", "datacenter"}), - EdgeRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_resp_header_bytes_total", Help: "Total header bytes delivered from Fastly to the end user."}, []string{"service_id", "service_name", "datacenter"}), - EdgeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_total", Help: "Number of requests sent by end users to Fastly."}, []string{"service_id", "service_name", "datacenter"}), - ErrorSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "error_sub_count_total", Help: "Number of executions of the 'error' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - ErrorSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "error_sub_time_total", Help: "Time spent inside the 'error' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - ErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "errors_total", Help: "Number of cache errors."}, []string{"service_id", "service_name", "datacenter"}), - FanoutBackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_bereq_body_bytes_total", Help: "Total body or message content bytes sent to backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), - FanoutBackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_bereq_header_bytes_total", Help: "Total header bytes sent to backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), - FanoutBackendRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_beresp_body_bytes_total", Help: "Total body or message content bytes received from backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), - FanoutBackendRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_beresp_header_bytes_total", Help: "Total header bytes received from backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), - FanoutConnTimeMsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_conn_time_ms_total", Help: "Total duration of Fanout connections with end users."}, []string{"service_id", "service_name", "datacenter"}), - FanoutRecvPublishesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_recv_publishes_total", Help: "Total published messages received from the publish API endpoint."}, []string{"service_id", "service_name", "datacenter"}), - FanoutReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_req_body_bytes_total", Help: "Total body or message content bytes received from end users over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), - FanoutReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_req_header_bytes_total", Help: "Total header bytes received from end users over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), - FanoutRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_resp_body_bytes_total", Help: "Total body or message content bytes sent to end users over Fanout connections, excluding published message content."}, []string{"service_id", "service_name", "datacenter"}), - FanoutRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_resp_header_bytes_total", Help: "Total header bytes sent to end users over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), - FanoutSendPublishesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_send_publishes_total", Help: "Total published messages sent to end users."}, []string{"service_id", "service_name", "datacenter"}), - FetchSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fetch_sub_count_total", Help: "Number of executions of the 'fetch' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - FetchSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fetch_sub_time_total", Help: "Time spent inside the 'fetch' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - HTTPTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "http_total", Help: "Number of requests received, by HTTP version."}, []string{"service_id", "service_name", "datacenter", "http_version"}), - HTTP2Total: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "http2_total", Help: "Number of requests received over HTTP2."}, []string{"service_id", "service_name", "datacenter"}), - HTTP3Total: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "http3_total", Help: "Number of requests received over HTTP3."}, []string{"service_id", "service_name", "datacenter"}), - HashSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hash_sub_count_total", Help: "Number of executions of the 'hash' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - HashSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hash_sub_time_total", Help: "Time spent inside the 'hash' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - HeaderSizeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "header_size_total", Help: "Total header bytes delivered (alias for resp_header_bytes)."}, []string{"service_id", "service_name", "datacenter"}), - HitRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hit_resp_body_bytes_total", Help: "Total body bytes delivered for cache hits."}, []string{"service_id", "service_name", "datacenter"}), - HitSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hit_sub_count_total", Help: "Number of executions of the 'hit' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - HitSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hit_sub_time_total", Help: "Time spent inside the 'hit' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - HitsTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hits_time_total", Help: "Total amount of time spent processing cache hits (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - HitsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hits_total", Help: "Number of cache hits."}, []string{"service_id", "service_name", "datacenter"}), - IPv6Total: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ipv6_total", Help: "Number of requests that were received over IPv6."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_resp_body_bytes_total", Help: "Total body bytes delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_resp_header_bytes_total", Help: "Total header bytes delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_shield_resp_body_bytes_total", Help: "Total body bytes delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_shield_resp_header_bytes_total", Help: "Total header bytes delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_shield_total", Help: "Number of responses delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_total", Help: "Number of responses that came from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoTransformRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_transform_resp_body_bytes_total", Help: "Total body bytes of transforms delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoTransformRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_transform_resp_header_bytes_total", Help: "Total header bytes of transforms delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgOptoTransformTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_transforms_total", Help: "Total transforms performed by the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoFramesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_frames_total", Help: "Number of video frames that came from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_resp_body_bytes_total", Help: "Total body bytes of video delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_resp_header_bytes_total", Help: "Total header bytes of video delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoShieldFramesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_frames_total", Help: "Number of video frames delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_resp_body_bytes_total", Help: "Total body bytes of video delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_resp_header_bytes_total", Help: "Total header bytes of video delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_total", Help: "Number of video responses that came via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - ImgVideoTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_total", Help: "Number of video responses that came via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), - KVStoreClassAOperationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "kv_store_class_a_operations_total", Help: "The total number of class a operations for the KV store."}, []string{"service_id", "service_name", "datacenter"}), - KVStoreClassBOperationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "kv_store_class_b_operations_total", Help: "The total number of class b operations for the KV store."}, []string{"service_id", "service_name", "datacenter"}), - LogBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "log_bytes_total", Help: "Total log bytes sent."}, []string{"service_id", "service_name", "datacenter"}), - LoggingTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "logging_total", Help: "Number of log lines sent."}, []string{"service_id", "service_name", "datacenter"}), - MissDurationSeconds: prometheus.NewHistogramVec(prometheus.HistogramOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_duration_seconds", Help: "Histogram of time spent processing cache misses (in seconds).", Buckets: []float64{0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 60}}, []string{"service_id", "service_name", "datacenter"}), - MissRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_resp_body_bytes_total", Help: "Total body bytes delivered for cache misses."}, []string{"service_id", "service_name", "datacenter"}), - MissSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_sub_count_total", Help: "Number of executions of the 'miss' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - MissSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_sub_time_total", Help: "Time spent inside the 'miss' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - MissTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_time_total", Help: "Total amount of time spent processing cache misses (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - MissesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_total", Help: "Number of cache misses."}, []string{"service_id", "service_name", "datacenter"}), - OTFPDeliverTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_total", Help: "Number of responses that came from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPManifestTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_deliver_time_total", Help: "Total amount of time spent delivering a response from the Fastly On-the-Fly Packager (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - OTFPRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_manifests_total", Help: "Number of responses that were manifest files from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_resp_body_bytes_total", Help: "Total body bytes delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_resp_header_bytes_total", Help: "Total header bytes delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_total", Help: "Number of responses delivered from the Fastly On-the-Fly Packager"}, []string{"service_id", "service_name", "datacenter"}), - OTFPShieldTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_resp_body_bytes_total", Help: "Total body bytes delivered via a shield for the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_resp_header_bytes_total", Help: "Total header bytes delivered via a shield for the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_time_total", Help: "Total amount of time spent delivering a response via a shield from the Fastly On-the-Fly Packager (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - OTFPTransformRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transforms_total", Help: "Number of transforms performed by the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPTransformRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transform_resp_body_bytes_total", Help: "Total body bytes of transforms delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPTransformTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transform_resp_header_bytes_total", Help: "Total body bytes of transforms delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - OTFPTransformTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transform_time_total", Help: "Total amount of time spent performing transforms from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), - ObjectSizeBytes: prometheus.NewHistogramVec(prometheus.HistogramOpts{Namespace: namespace, Subsystem: subsystem, Name: "object_size_bytes", Help: "Histogram of count of objects served, bucketed by object size range.", Buckets: []float64{1024, 10240, 102400, 1.024e+06, 1.024e+07, 1.024e+08, 1.024e+09}}, []string{"service_id", "service_name", "datacenter"}), - OriginCacheFetchRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_cache_fetch_resp_body_bytes_total", Help: "Body bytes received from origin for cacheable content."}, []string{"service_id", "service_name", "datacenter"}), - OriginCacheFetchRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_cache_fetch_resp_header_bytes_total", Help: "Header bytes received from an origin for cacheable content."}, []string{"service_id", "service_name", "datacenter"}), - OriginCacheFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_cache_fetches_total", Help: "The total number of completed requests made to backends (origins) that returned cacheable content."}, []string{"service_id", "service_name", "datacenter"}), - OriginFetchBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_body_bytes_total", Help: "Total request body bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), - OriginFetchHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_header_bytes_total", Help: "Total request header bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), - OriginFetchRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_resp_body_bytes_total", Help: "Total body bytes received from origin."}, []string{"service_id", "service_name", "datacenter"}), - OriginFetchRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_resp_header_bytes_total", Help: "Total header bytes received from origin."}, []string{"service_id", "service_name", "datacenter"}), - OriginFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetches_total", Help: "Number of requests sent to origin."}, []string{"service_id", "service_name", "datacenter"}), - OriginRevalidationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_revalidations_total", Help: "Number of responses received from origin with a 304 status code in response to an If-Modified-Since or If-None-Match request. Under regular scenarios, a revalidation will imply a cache hit. However, if using Fastly Image Optimizer or segmented caching this may result in a cache miss."}, []string{"service_id", "service_name", "datacenter"}), - PCITotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pci_total", Help: "Number of responses with the PCI flag turned on."}, []string{"service_id", "service_name", "datacenter"}), - PassRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_resp_body_bytes_total", Help: "Total body bytes delivered for cache passes."}, []string{"service_id", "service_name", "datacenter"}), - PassSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_sub_count_total", Help: "Number of executions of the 'pass' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - PassSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_sub_time_total", Help: "Time spent inside the 'pass' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - PassTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_time_total", Help: "Total amount of time spent processing cache passes (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - PassesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_total", Help: "Number of requests that passed through the CDN without being cached."}, []string{"service_id", "service_name", "datacenter"}), - Pipe: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pipe", Help: "Pipe operations performed."}, []string{"service_id", "service_name", "datacenter"}), - PipeSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pipe_sub_count_total", Help: "Number of executions of the 'pipe' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - PipeSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pipe_sub_time_total", Help: "Time spent inside the 'pipe' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - PredeliverSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "predeliver_sub_count_total", Help: "Number of executions of the 'predeliver' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - PredeliverSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "predeliver_sub_time_total", Help: "Time spent inside the 'predeliver' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - PrehashSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "prehash_sub_count_total", Help: "Number of executions of the 'prehash' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - PrehashSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "prehash_sub_time_total", Help: "Time spent inside the 'prehash' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - RealtimeAPIRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "realtime_api_requests_total", Help: "Total requests made to the real-time stats API."}, []string{"service_id", "service_name", "result"}), - RecvSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "recv_sub_count_total", Help: "Number of executions of the 'recv' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), - RecvSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "recv_sub_time_total", Help: "Time spent inside the 'recv' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), - ReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "req_body_bytes_total", Help: "Total body bytes received."}, []string{"service_id", "service_name", "datacenter"}), - ReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "req_header_bytes_total", Help: "Total header bytes received."}, []string{"service_id", "service_name", "datacenter"}), - RequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "requests_total", Help: "Number of requests processed."}, []string{"service_id", "service_name", "datacenter"}), - RespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "resp_body_bytes_total", Help: "Total body bytes delivered."}, []string{"service_id", "service_name", "datacenter"}), - RespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "resp_header_bytes_total", Help: "Total header bytes delivered."}, []string{"service_id", "service_name", "datacenter"}), - RestartTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "restarts_total", Help: "Number of restarts performed."}, []string{"service_id", "service_name", "datacenter"}), - SegBlockOriginFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "segblock_origin_fetches_total", Help: "Number of Range requests to origin for segments of resources when using segmented caching."}, []string{"service_id", "service_name", "datacenter"}), - SegBlockShieldFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "segblock_shield_fetches_total", Help: "Number of Range requests to a shield for segments of resources when using segmented caching."}, []string{"service_id", "service_name", "datacenter"}), - ShieldCacheFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_cache_fetches_total", Help: "The total number of completed requests made to shields that returned cacheable content."}, []string{"service_id", "service_name", "datacenter"}), - ShieldFetchBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_body_bytes_total", Help: "Total request body bytes sent to a shield."}, []string{"service_id", "service_name", "datacenter"}), - ShieldFetchHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_header_bytes_total", Help: "Total request header bytes sent to a shield."}, []string{"service_id", "service_name", "datacenter"}), - ShieldFetchRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_resp_body_bytes_total", Help: "Total response body bytes sent from a shield to the edge."}, []string{"service_id", "service_name", "datacenter"}), - ShieldFetchRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_resp_header_bytes_total", Help: "Total response header bytes sent from a shield to the edge."}, []string{"service_id", "service_name", "datacenter"}), - ShieldFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetches_total", Help: "Number of requests made from one Fastly data center to another, as part of shielding."}, []string{"service_id", "service_name", "datacenter"}), - ShieldHitRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_hit_requests_total", Help: "Number of requests that resulted in a hit at a shield."}, []string{"service_id", "service_name", "datacenter"}), - ShieldHitRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_hit_resp_body_bytes_total", Help: "Body bytes delivered for shield hits."}, []string{"service_id", "service_name", "datacenter"}), - ShieldHitRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_hit_resp_header_bytes_total", Help: "Header bytes delivered for shield hits."}, []string{"service_id", "service_name", "datacenter"}), - ShieldMissRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_miss_requests_total", Help: "Number of requests that resulted in a miss at a shield."}, []string{"service_id", "service_name", "datacenter"}), - ShieldMissRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_miss_resp_body_bytes_total", Help: "Body bytes delivered for shield misses."}, []string{"service_id", "service_name", "datacenter"}), - ShieldMissRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_miss_resp_header_bytes_total", Help: "Header bytes delivered for shield misses."}, []string{"service_id", "service_name", "datacenter"}), - ShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_resp_body_bytes_total", Help: "Total body bytes delivered via a shield."}, []string{"service_id", "service_name", "datacenter"}), - ShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_resp_header_bytes_total", Help: "Total header bytes delivered via a shield."}, []string{"service_id", "service_name", "datacenter"}), - ShieldRevalidationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_revalidations_total", Help: "Number of responses received from origin with a 304 status code, in response to an If-Modified-Since or If-None-Match request to a shield. Under regular scenarios, a revalidation will imply a cache hit. However, if using segmented caching this may result in a cache miss."}, []string{"service_id", "service_name", "datacenter"}), - ShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_total", Help: "Number of requests from edge to the shield POP."}, []string{"service_id", "service_name", "datacenter"}), - StatusCodeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "status_code_total", Help: "Number of responses sent with status code 500 (Internal Server Error)."}, []string{"service_id", "service_name", "datacenter", "status_code"}), - StatusGroupTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "status_group_total", Help: "Number of 'Client Error' category status codes delivered."}, []string{"service_id", "service_name", "datacenter", "status_group"}), - SynthsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "synth_total", Help: "TODO"}, []string{"service_id", "service_name", "datacenter"}), - TLSTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "tls_total", Help: "Number of requests that were received over TLS."}, []string{"service_id", "service_name", "datacenter", "tls_version"}), - UncacheableTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "uncacheable_total", Help: "Number of requests that were designated uncachable."}, []string{"service_id", "service_name", "datacenter"}), - VideoTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "video_total", Help: "Number of responses with the video segment or video manifest MIME type (i.e., application/x-mpegurl, application/vnd.apple.mpegurl, application/f4m, application/dash+xml, application/vnd.ms-sstr+xml, ideo/mp2t, audio/aac, video/f4f, video/x-flv, video/mp4, audio/mp4)."}, []string{"service_id", "service_name", "datacenter"}), - WAFBlockedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_blocked_total", Help: "Number of requests that triggered a WAF rule and were blocked."}, []string{"service_id", "service_name", "datacenter"}), - WAFLoggedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_logged_total", Help: "Number of requests that triggered a WAF rule and were logged."}, []string{"service_id", "service_name", "datacenter"}), - WAFPassedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_passed_total", Help: "Number of requests that triggered a WAF rule and were passed."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketBackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_bereq_body_bytes_total", Help: "Total message content bytes sent to backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketBackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_bereq_header_bytes_total", Help: "Total header bytes sent to backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketBackendRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_beresp_body_bytes_total", Help: "Total message content bytes received from backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketBackendRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_beresp_header_bytes_total", Help: "Total header bytes received from backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketConnTimeMsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_conn_time_ms_total", Help: "Total duration of passthrough WebSocket connections with end users."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_req_body_bytes_total", Help: "Total message content bytes received from end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_req_header_bytes_total", Help: "Total header bytes received from end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_resp_body_bytes_total", Help: "Total message content bytes sent to end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), - WebsocketRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_resp_header_bytes_total", Help: "Total header bytes sent to end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + AttackBlockedReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_blocked_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule that was blocked."}, []string{"service_id", "service_name", "datacenter"}), + AttackBlockedReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_blocked_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule that was blocked."}, []string{"service_id", "service_name", "datacenter"}), + AttackLoggedReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_logged_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule that was logged."}, []string{"service_id", "service_name", "datacenter"}), + AttackLoggedReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_logged_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule that was logged."}, []string{"service_id", "service_name", "datacenter"}), + AttackPassedReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_passed_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule that was passed."}, []string{"service_id", "service_name", "datacenter"}), + AttackPassedReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_passed_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule that was passed."}, []string{"service_id", "service_name", "datacenter"}), + AttackReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_req_body_bytes_total", Help: "Total body bytes received from requests that triggered a WAF rule."}, []string{"service_id", "service_name", "datacenter"}), + AttackReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_req_header_bytes_total", Help: "Total header bytes received from requests that triggered a WAF rule."}, []string{"service_id", "service_name", "datacenter"}), + AttackRespSynthBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "attack_resp_synth_bytes_total", Help: "Total bytes delivered for requests that triggered a WAF rule and returned a synthetic response."}, []string{"service_id", "service_name", "datacenter"}), + BackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bereq_body_bytes_total", Help: "Total body bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), + BackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bereq_header_bytes_total", Help: "Total header bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), + BlacklistedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "blacklist_total", Help: "TODO"}, []string{"service_id", "service_name", "datacenter"}), + BodySizeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "body_size_total", Help: "Total body bytes delivered (alias for resp_body_bytes)."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengeCompleteTokensCheckedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenge_complete_tokens_checked_total", Help: "The number of challenge-complete tokens checked."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengeCompleteTokensDisabledTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenge_complete_tokens_disabled_total", Help: "TThe number of challenge-complete tokens not checked because the feature was disabled."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengeCompleteTokensFailedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenge_complete_tokens_failed_total", Help: "TThe number of challenge-complete tokens that failed validation."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengeCompleteTokensIssuedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenge_complete_tokens_issued_total", Help: "The number of challenge-complete tokens issued. For example, issuing a challenge-complete token after a series of CAPTCHA challenges ending in success."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengeCompleteTokensPassedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenge_complete_tokens_passed_total", Help: "The number of challenge-complete tokens that passed validation."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengeStartsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenge_starts_total", Help: "The number of challenge-start tokens created."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengesFailedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenges_failed_total", Help: "The number of failed challenge solutions processed. For example, an incorrect CAPTCHA solution."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengesIssuedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenges_issued_total", Help: "The number of challenges issued. For example, the issuance of a CAPTCHA challenge."}, []string{"service_id", "service_name", "datacenter"}), + BotChallengesSucceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "bot_challenges_succeeded_total", Help: "The number of successful challenge solutions processed. For example, a correct CAPTCHA solution."}, []string{"service_id", "service_name", "datacenter"}), + ComputeBackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_body_bytes_total", Help: "Total body bytes sent to backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), + ComputeBackendReqErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_errors_total", Help: "Number of backend request errors, including timeouts."}, []string{"service_id", "service_name", "datacenter"}), + ComputeBackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_header_bytes_total", Help: "Total header bytes sent to backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), + ComputeBackendReqTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_bereq_total", Help: "Number of backend requests started."}, []string{"service_id", "service_name", "datacenter"}), + ComputeBackendRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_beresp_body_bytes_total", Help: "Total body bytes received from backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), + ComputeBackendRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_beresp_header_bytes_total", Help: "Total header bytes received from backends (origins) by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), + ComputeExecutionTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_execution_time_total", Help: "The amount of active CPU time used to process your requests (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + ComputeGlobalsLimitExceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_globals_limit_exceeded_total", Help: "Number of times a guest exceeded its globals limit."}, []string{"service_id", "service_name", "datacenter"}), + ComputeGuestErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_guest_errors_total", Help: "Number of times a service experienced a guest code error."}, []string{"service_id", "service_name", "datacenter"}), + ComputeHeapLimitExceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_heap_limit_exceeded_total", Help: "Number of times a guest exceeded its heap limit."}, []string{"service_id", "service_name", "datacenter"}), + ComputeRAMUsedBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_ram_used_bytes_total", Help: "The amount of RAM used for your site by Fastly."}, []string{"service_id", "service_name", "datacenter"}), + ComputeReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_req_body_bytes_total", Help: "Total body bytes received by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), + ComputeReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_req_header_bytes_total", Help: "Total header bytes received by Compute@Edge."}, []string{"service_id", "service_name", "datacenter"}), + ComputeRequestTimeBilledTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_request_time_billed_total", Help: "The total amount of request processing time you will be billed for, measured in 50 millisecond increments. (in seconds)"}, []string{"service_id", "service_name", "datacenter"}), + ComputeRequestTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_request_time_total", Help: "The total amount of time used to process your requests, including active CPU time (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + ComputeRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_requests_total", Help: "The total number of requests that were received for your site by Fastly."}, []string{"service_id", "service_name", "datacenter"}), + ComputeResourceLimitExceedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resource_limit_exceeded_total", Help: "Number of times a guest exceeded its resource limit, includes heap, stack, globals, and code execution timeout."}, []string{"service_id", "service_name", "datacenter"}), + ComputeRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resp_body_bytes_total", Help: "Total body bytes sent from Compute@Edge to end user."}, []string{"service_id", "service_name", "datacenter"}), + ComputeRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resp_header_bytes_total", Help: "Total header bytes sent from Compute@Edge to end user."}, []string{"service_id", "service_name", "datacenter"}), + ComputeRespStatusTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_resp_status_total", Help: "Number of responses delivered delivered by Compute@Edge, by status code group."}, []string{"service_id", "service_name", "datacenter", "status_group"}), + ComputeRuntimeErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_runtime_errors_total", Help: "Number of times a service experienced a guest runtime error."}, []string{"service_id", "service_name", "datacenter"}), + ComputeStackLimitExceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_stack_limit_exceeded_total", Help: "Number of times a guest exceeded its stack limit."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionBlackholeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_blackhole_total", Help: "The number of times the blackhole action was taken. The blackhole action quietly closes a TCP connection without sending a reset. The blackhole action quietly closes a TCP connection without notifying its peer (all TCP state is dropped)."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionCloseTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_close_total", Help: "The number of times the close action was taken. The close action aborts the connection as soon as possible. The close action takes effect either right after accept, right after the client hello, or right after the response was sent."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionLimitStreamsConnectionsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_limit_streams_connections_total", Help: "For HTTP/2, the number of connections the limit-streams action was applied to. The limit-streams action caps the allowed number of concurrent streams in a connection."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionLimitStreamsRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_limit_streams_requests_total", Help: "For HTTP/2, the number of requests made on a connection for which the limit-streams action was taken. The limit-streams action caps the allowed number of concurrent streams in a connection."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionTarpitAcceptTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_tarpit_accept_total", Help: "The number of times the tarpit-accept action was taken. The tarpit-accept action adds a delay when accepting future connections."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionTarpitTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_tarpit_total", Help: "The number of times the tarpit action was taken. The tarpit action delays writing the response to the client."}, []string{"service_id", "service_name", "datacenter"}), + DeliverSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "deliver_sub_count_total", Help: "Number of executions of the 'deliver' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + DeliverSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "deliver_sub_time_total", Help: "Time spent inside the 'deliver' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + EdgeHitRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_hit_requests_total", Help: "Number of requests sent by end users to Fastly that resulted in a hit at the edge."}, []string{"service_id", "service_name", "datacenter"}), + EdgeHitRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_hit_resp_body_bytes_total", Help: "Body bytes delivered for edge hits."}, []string{"service_id", "service_name", "datacenter"}), + EdgeHitRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_hit_resp_header_bytes_total", Help: "Header bytes delivered for edge hits."}, []string{"service_id", "service_name", "datacenter"}), + EdgeMissRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_miss_requests_total", Help: "Number of requests sent by end users to Fastly that resulted in a miss at the edge."}, []string{"service_id", "service_name", "datacenter"}), + EdgeMissRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_miss_resp_body_bytes_total", Help: "Body bytes delivered for edge misses."}, []string{"service_id", "service_name", "datacenter"}), + EdgeMissRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_miss_resp_header_bytes_total", Help: "Header bytes delivered for edge misses."}, []string{"service_id", "service_name", "datacenter"}), + EdgeRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_resp_body_bytes_total", Help: "Total body bytes delivered from Fastly to the end user."}, []string{"service_id", "service_name", "datacenter"}), + EdgeRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_resp_header_bytes_total", Help: "Total header bytes delivered from Fastly to the end user."}, []string{"service_id", "service_name", "datacenter"}), + EdgeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "edge_total", Help: "Number of requests sent by end users to Fastly."}, []string{"service_id", "service_name", "datacenter"}), + ErrorSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "error_sub_count_total", Help: "Number of executions of the 'error' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + ErrorSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "error_sub_time_total", Help: "Time spent inside the 'error' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + ErrorsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "errors_total", Help: "Number of cache errors."}, []string{"service_id", "service_name", "datacenter"}), + FanoutBackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_bereq_body_bytes_total", Help: "Total body or message content bytes sent to backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), + FanoutBackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_bereq_header_bytes_total", Help: "Total header bytes sent to backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), + FanoutBackendRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_beresp_body_bytes_total", Help: "Total body or message content bytes received from backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), + FanoutBackendRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_beresp_header_bytes_total", Help: "Total header bytes received from backends over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), + FanoutConnTimeMsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_conn_time_ms_total", Help: "Total duration of Fanout connections with end users."}, []string{"service_id", "service_name", "datacenter"}), + FanoutRecvPublishesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_recv_publishes_total", Help: "Total published messages received from the publish API endpoint."}, []string{"service_id", "service_name", "datacenter"}), + FanoutReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_req_body_bytes_total", Help: "Total body or message content bytes received from end users over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), + FanoutReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_req_header_bytes_total", Help: "Total header bytes received from end users over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), + FanoutRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_resp_body_bytes_total", Help: "Total body or message content bytes sent to end users over Fanout connections, excluding published message content."}, []string{"service_id", "service_name", "datacenter"}), + FanoutRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_resp_header_bytes_total", Help: "Total header bytes sent to end users over Fanout connections."}, []string{"service_id", "service_name", "datacenter"}), + FanoutSendPublishesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fanout_send_publishes_total", Help: "Total published messages sent to end users."}, []string{"service_id", "service_name", "datacenter"}), + FetchSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fetch_sub_count_total", Help: "Number of executions of the 'fetch' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + FetchSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "fetch_sub_time_total", Help: "Time spent inside the 'fetch' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + HTTPTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "http_total", Help: "Number of requests received, by HTTP version."}, []string{"service_id", "service_name", "datacenter", "http_version"}), + HTTP2Total: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "http2_total", Help: "Number of requests received over HTTP2."}, []string{"service_id", "service_name", "datacenter"}), + HTTP3Total: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "http3_total", Help: "Number of requests received over HTTP3."}, []string{"service_id", "service_name", "datacenter"}), + HashSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hash_sub_count_total", Help: "Number of executions of the 'hash' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + HashSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hash_sub_time_total", Help: "Time spent inside the 'hash' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + HeaderSizeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "header_size_total", Help: "Total header bytes delivered (alias for resp_header_bytes)."}, []string{"service_id", "service_name", "datacenter"}), + HitRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hit_resp_body_bytes_total", Help: "Total body bytes delivered for cache hits."}, []string{"service_id", "service_name", "datacenter"}), + HitSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hit_sub_count_total", Help: "Number of executions of the 'hit' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + HitSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hit_sub_time_total", Help: "Time spent inside the 'hit' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + HitsTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hits_time_total", Help: "Total amount of time spent processing cache hits (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + HitsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "hits_total", Help: "Number of cache hits."}, []string{"service_id", "service_name", "datacenter"}), + IPv6Total: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ipv6_total", Help: "Number of requests that were received over IPv6."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_resp_body_bytes_total", Help: "Total body bytes delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_resp_header_bytes_total", Help: "Total header bytes delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_shield_resp_body_bytes_total", Help: "Total body bytes delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_shield_resp_header_bytes_total", Help: "Total header bytes delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_shield_total", Help: "Number of responses delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_total", Help: "Number of responses that came from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoTransformRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_transform_resp_body_bytes_total", Help: "Total body bytes of transforms delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoTransformRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_transform_resp_header_bytes_total", Help: "Total header bytes of transforms delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgOptoTransformTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgopto_transforms_total", Help: "Total transforms performed by the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoFramesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_frames_total", Help: "Number of video frames that came from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_resp_body_bytes_total", Help: "Total body bytes of video delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_resp_header_bytes_total", Help: "Total header bytes of video delivered from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoShieldFramesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_frames_total", Help: "Number of video frames delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_resp_body_bytes_total", Help: "Total body bytes of video delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_resp_header_bytes_total", Help: "Total header bytes of video delivered via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_shield_total", Help: "Number of video responses that came via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + ImgVideoTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "imgvideo_total", Help: "Number of video responses that came via a shield from the Fastly Image Optimizer service."}, []string{"service_id", "service_name", "datacenter"}), + KVStoreClassAOperationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "kv_store_class_a_operations_total", Help: "The total number of class a operations for the KV store."}, []string{"service_id", "service_name", "datacenter"}), + KVStoreClassBOperationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "kv_store_class_b_operations_total", Help: "The total number of class b operations for the KV store."}, []string{"service_id", "service_name", "datacenter"}), + LogBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "log_bytes_total", Help: "Total log bytes sent."}, []string{"service_id", "service_name", "datacenter"}), + LoggingTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "logging_total", Help: "Number of log lines sent."}, []string{"service_id", "service_name", "datacenter"}), + MissDurationSeconds: prometheus.NewHistogramVec(prometheus.HistogramOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_duration_seconds", Help: "Histogram of time spent processing cache misses (in seconds).", Buckets: []float64{0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 60}}, []string{"service_id", "service_name", "datacenter"}), + MissRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_resp_body_bytes_total", Help: "Total body bytes delivered for cache misses."}, []string{"service_id", "service_name", "datacenter"}), + MissSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_sub_count_total", Help: "Number of executions of the 'miss' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + MissSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_sub_time_total", Help: "Time spent inside the 'miss' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + MissTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_time_total", Help: "Total amount of time spent processing cache misses (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + MissesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "miss_total", Help: "Number of cache misses."}, []string{"service_id", "service_name", "datacenter"}), + OTFPDeliverTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_total", Help: "Number of responses that came from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPManifestTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_deliver_time_total", Help: "Total amount of time spent delivering a response from the Fastly On-the-Fly Packager (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + OTFPRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_manifests_total", Help: "Number of responses that were manifest files from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_resp_body_bytes_total", Help: "Total body bytes delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_resp_header_bytes_total", Help: "Total header bytes delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_total", Help: "Number of responses delivered from the Fastly On-the-Fly Packager"}, []string{"service_id", "service_name", "datacenter"}), + OTFPShieldTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_resp_body_bytes_total", Help: "Total body bytes delivered via a shield for the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_resp_header_bytes_total", Help: "Total header bytes delivered via a shield for the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_shield_time_total", Help: "Total amount of time spent delivering a response via a shield from the Fastly On-the-Fly Packager (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + OTFPTransformRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transforms_total", Help: "Number of transforms performed by the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPTransformRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transform_resp_body_bytes_total", Help: "Total body bytes of transforms delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPTransformTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transform_resp_header_bytes_total", Help: "Total body bytes of transforms delivered from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + OTFPTransformTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "otfp_transform_time_total", Help: "Total amount of time spent performing transforms from the Fastly On-the-Fly Packager."}, []string{"service_id", "service_name", "datacenter"}), + ObjectSizeBytes: prometheus.NewHistogramVec(prometheus.HistogramOpts{Namespace: namespace, Subsystem: subsystem, Name: "object_size_bytes", Help: "Histogram of count of objects served, bucketed by object size range.", Buckets: []float64{1024, 10240, 102400, 1.024e+06, 1.024e+07, 1.024e+08, 1.024e+09}}, []string{"service_id", "service_name", "datacenter"}), + OriginCacheFetchRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_cache_fetch_resp_body_bytes_total", Help: "Body bytes received from origin for cacheable content."}, []string{"service_id", "service_name", "datacenter"}), + OriginCacheFetchRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_cache_fetch_resp_header_bytes_total", Help: "Header bytes received from an origin for cacheable content."}, []string{"service_id", "service_name", "datacenter"}), + OriginCacheFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_cache_fetches_total", Help: "The total number of completed requests made to backends (origins) that returned cacheable content."}, []string{"service_id", "service_name", "datacenter"}), + OriginFetchBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_body_bytes_total", Help: "Total request body bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), + OriginFetchHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_header_bytes_total", Help: "Total request header bytes sent to origin."}, []string{"service_id", "service_name", "datacenter"}), + OriginFetchRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_resp_body_bytes_total", Help: "Total body bytes received from origin."}, []string{"service_id", "service_name", "datacenter"}), + OriginFetchRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetch_resp_header_bytes_total", Help: "Total header bytes received from origin."}, []string{"service_id", "service_name", "datacenter"}), + OriginFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_fetches_total", Help: "Number of requests sent to origin."}, []string{"service_id", "service_name", "datacenter"}), + OriginRevalidationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "origin_revalidations_total", Help: "Number of responses received from origin with a 304 status code in response to an If-Modified-Since or If-None-Match request. Under regular scenarios, a revalidation will imply a cache hit. However, if using Fastly Image Optimizer or segmented caching this may result in a cache miss."}, []string{"service_id", "service_name", "datacenter"}), + PCITotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pci_total", Help: "Number of responses with the PCI flag turned on."}, []string{"service_id", "service_name", "datacenter"}), + PassRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_resp_body_bytes_total", Help: "Total body bytes delivered for cache passes."}, []string{"service_id", "service_name", "datacenter"}), + PassSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_sub_count_total", Help: "Number of executions of the 'pass' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + PassSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_sub_time_total", Help: "Time spent inside the 'pass' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + PassTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_time_total", Help: "Total amount of time spent processing cache passes (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + PassesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pass_total", Help: "Number of requests that passed through the CDN without being cached."}, []string{"service_id", "service_name", "datacenter"}), + Pipe: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pipe", Help: "Pipe operations performed."}, []string{"service_id", "service_name", "datacenter"}), + PipeSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pipe_sub_count_total", Help: "Number of executions of the 'pipe' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + PipeSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "pipe_sub_time_total", Help: "Time spent inside the 'pipe' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + PredeliverSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "predeliver_sub_count_total", Help: "Number of executions of the 'predeliver' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + PredeliverSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "predeliver_sub_time_total", Help: "Time spent inside the 'predeliver' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + PrehashSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "prehash_sub_count_total", Help: "Number of executions of the 'prehash' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + PrehashSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "prehash_sub_time_total", Help: "Time spent inside the 'prehash' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + RealtimeAPIRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "realtime_api_requests_total", Help: "Total requests made to the real-time stats API."}, []string{"service_id", "service_name", "result"}), + RecvSubCountTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "recv_sub_count_total", Help: "Number of executions of the 'recv' Varnish subroutine."}, []string{"service_id", "service_name", "datacenter"}), + RecvSubTimeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "recv_sub_time_total", Help: "Time spent inside the 'recv' Varnish subroutine (in seconds)."}, []string{"service_id", "service_name", "datacenter"}), + ReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "req_body_bytes_total", Help: "Total body bytes received."}, []string{"service_id", "service_name", "datacenter"}), + ReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "req_header_bytes_total", Help: "Total header bytes received."}, []string{"service_id", "service_name", "datacenter"}), + RequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "requests_total", Help: "Number of requests processed."}, []string{"service_id", "service_name", "datacenter"}), + RespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "resp_body_bytes_total", Help: "Total body bytes delivered."}, []string{"service_id", "service_name", "datacenter"}), + RespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "resp_header_bytes_total", Help: "Total header bytes delivered."}, []string{"service_id", "service_name", "datacenter"}), + RestartTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "restarts_total", Help: "Number of restarts performed."}, []string{"service_id", "service_name", "datacenter"}), + SegBlockOriginFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "segblock_origin_fetches_total", Help: "Number of Range requests to origin for segments of resources when using segmented caching."}, []string{"service_id", "service_name", "datacenter"}), + SegBlockShieldFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "segblock_shield_fetches_total", Help: "Number of Range requests to a shield for segments of resources when using segmented caching."}, []string{"service_id", "service_name", "datacenter"}), + ShieldCacheFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_cache_fetches_total", Help: "The total number of completed requests made to shields that returned cacheable content."}, []string{"service_id", "service_name", "datacenter"}), + ShieldFetchBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_body_bytes_total", Help: "Total request body bytes sent to a shield."}, []string{"service_id", "service_name", "datacenter"}), + ShieldFetchHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_header_bytes_total", Help: "Total request header bytes sent to a shield."}, []string{"service_id", "service_name", "datacenter"}), + ShieldFetchRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_resp_body_bytes_total", Help: "Total response body bytes sent from a shield to the edge."}, []string{"service_id", "service_name", "datacenter"}), + ShieldFetchRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetch_resp_header_bytes_total", Help: "Total response header bytes sent from a shield to the edge."}, []string{"service_id", "service_name", "datacenter"}), + ShieldFetchesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_fetches_total", Help: "Number of requests made from one Fastly data center to another, as part of shielding."}, []string{"service_id", "service_name", "datacenter"}), + ShieldHitRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_hit_requests_total", Help: "Number of requests that resulted in a hit at a shield."}, []string{"service_id", "service_name", "datacenter"}), + ShieldHitRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_hit_resp_body_bytes_total", Help: "Body bytes delivered for shield hits."}, []string{"service_id", "service_name", "datacenter"}), + ShieldHitRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_hit_resp_header_bytes_total", Help: "Header bytes delivered for shield hits."}, []string{"service_id", "service_name", "datacenter"}), + ShieldMissRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_miss_requests_total", Help: "Number of requests that resulted in a miss at a shield."}, []string{"service_id", "service_name", "datacenter"}), + ShieldMissRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_miss_resp_body_bytes_total", Help: "Body bytes delivered for shield misses."}, []string{"service_id", "service_name", "datacenter"}), + ShieldMissRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_miss_resp_header_bytes_total", Help: "Header bytes delivered for shield misses."}, []string{"service_id", "service_name", "datacenter"}), + ShieldRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_resp_body_bytes_total", Help: "Total body bytes delivered via a shield."}, []string{"service_id", "service_name", "datacenter"}), + ShieldRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_resp_header_bytes_total", Help: "Total header bytes delivered via a shield."}, []string{"service_id", "service_name", "datacenter"}), + ShieldRevalidationsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_revalidations_total", Help: "Number of responses received from origin with a 304 status code, in response to an If-Modified-Since or If-None-Match request to a shield. Under regular scenarios, a revalidation will imply a cache hit. However, if using segmented caching this may result in a cache miss."}, []string{"service_id", "service_name", "datacenter"}), + ShieldTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "shield_total", Help: "Number of requests from edge to the shield POP."}, []string{"service_id", "service_name", "datacenter"}), + StatusCodeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "status_code_total", Help: "Number of responses sent with status code 500 (Internal Server Error)."}, []string{"service_id", "service_name", "datacenter", "status_code"}), + StatusGroupTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "status_group_total", Help: "Number of 'Client Error' category status codes delivered."}, []string{"service_id", "service_name", "datacenter", "status_group"}), + SynthsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "synth_total", Help: "TODO"}, []string{"service_id", "service_name", "datacenter"}), + TLSTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "tls_total", Help: "Number of requests that were received over TLS."}, []string{"service_id", "service_name", "datacenter", "tls_version"}), + UncacheableTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "uncacheable_total", Help: "Number of requests that were designated uncachable."}, []string{"service_id", "service_name", "datacenter"}), + VideoTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "video_total", Help: "Number of responses with the video segment or video manifest MIME type (i.e., application/x-mpegurl, application/vnd.apple.mpegurl, application/f4m, application/dash+xml, application/vnd.ms-sstr+xml, ideo/mp2t, audio/aac, video/f4f, video/x-flv, video/mp4, audio/mp4)."}, []string{"service_id", "service_name", "datacenter"}), + WAFBlockedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_blocked_total", Help: "Number of requests that triggered a WAF rule and were blocked."}, []string{"service_id", "service_name", "datacenter"}), + WAFLoggedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_logged_total", Help: "Number of requests that triggered a WAF rule and were logged."}, []string{"service_id", "service_name", "datacenter"}), + WAFPassedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_passed_total", Help: "Number of requests that triggered a WAF rule and were passed."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketBackendReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_bereq_body_bytes_total", Help: "Total message content bytes sent to backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketBackendReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_bereq_header_bytes_total", Help: "Total header bytes sent to backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketBackendRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_beresp_body_bytes_total", Help: "Total message content bytes received from backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketBackendRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_beresp_header_bytes_total", Help: "Total header bytes received from backends over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketConnTimeMsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_conn_time_ms_total", Help: "Total duration of passthrough WebSocket connections with end users."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketReqBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_req_body_bytes_total", Help: "Total message content bytes received from end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketReqHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_req_header_bytes_total", Help: "Total header bytes received from end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketRespBodyBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_resp_body_bytes_total", Help: "Total message content bytes sent to end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), + WebsocketRespHeaderBytesTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "websocket_resp_header_bytes_total", Help: "Total header bytes sent to end users over passthrough WebSocket connections."}, []string{"service_id", "service_name", "datacenter"}), } for i, v := 0, reflect.ValueOf(m); i < v.NumField(); i++ { diff --git a/pkg/realtime/process.go b/pkg/realtime/process.go index 19f95df..33aab67 100644 --- a/pkg/realtime/process.go +++ b/pkg/realtime/process.go @@ -23,6 +23,15 @@ func Process(response *Response, serviceID, serviceName, serviceVersion string, m.BackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BackendReqHeaderBytes)) m.BlacklistedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Blacklisted)) m.BodySizeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BodySize)) + m.BotChallengeCompleteTokensCheckedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensChecked)) + m.BotChallengeCompleteTokensDisabledTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensDisabled)) + m.BotChallengeCompleteTokensFailedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensFailed)) + m.BotChallengeCompleteTokensIssuedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensIssued)) + m.BotChallengeCompleteTokensPassedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensPassed)) + m.BotChallengeStartsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeStarts)) + m.BotChallengesFailedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesFailed)) + m.BotChallengesIssuedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesIssued)) + m.BotChallengesSucceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesSucceeded)) m.ComputeBackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqBodyBytesTotal)) m.ComputeBackendReqErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqErrorsTotal)) m.ComputeBackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqHeaderBytesTotal)) diff --git a/pkg/realtime/response.go b/pkg/realtime/response.go index 5f7c58a..5aa645e 100644 --- a/pkg/realtime/response.go +++ b/pkg/realtime/response.go @@ -29,6 +29,15 @@ type Datacenter struct { BackendReqHeaderBytes uint64 `json:"bereq_header_bytes"` Blacklisted uint64 `json:"blacklist"` BodySize uint64 `json:"body_size"` + BotChallengeCompleteTokensChecked uint64 `json:"bot_challenge_complete_tokens_checked"` + BotChallengeCompleteTokensDisabled uint64 `json:"bot_challenge_complete_tokens_disabled"` + BotChallengeCompleteTokensFailed uint64 `json:"bot_challenge_complete_tokens_failed"` + BotChallengeCompleteTokensIssued uint64 `json:"bot_challenge_complete_tokens_issued"` + BotChallengeCompleteTokensPassed uint64 `json:"bot_challenge_complete_tokens_passed"` + BotChallengeStarts uint64 `json:"bot_challenge_starts"` + BotChallengesFailed uint64 `json:"bot_challenges_failed"` + BotChallengesIssued uint64 `json:"bot_challenges_issued"` + BotChallengesSucceeded uint64 `json:"bot_challenges_succeeded"` ComputeBackendReqBodyBytesTotal uint64 `json:"compute_bereq_body_bytes"` ComputeBackendReqErrorsTotal uint64 `json:"compute_bereq_errors"` ComputeBackendReqHeaderBytesTotal uint64 `json:"compute_bereq_header_bytes"` diff --git a/pkg/rt/common_test.go b/pkg/rt/common_test.go index c75f763..30c1bae 100644 --- a/pkg/rt/common_test.go +++ b/pkg/rt/common_test.go @@ -2051,6 +2051,96 @@ var expectedRTMetricsOutputMap = map[string]float64{ `testspace_testsystem_body_size_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 118928, `testspace_testsystem_body_size_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 17018, `testspace_testsystem_body_size_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 10944, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_bereq_body_bytes_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_bereq_body_bytes_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_compute_bereq_body_bytes_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, From 2d2c4d016dcc3fab1f886606ec4a3e5d1882b968 Mon Sep 17 00:00:00 2001 From: Lukas Eklund Date: Thu, 18 Apr 2024 14:52:08 -0500 Subject: [PATCH 3/4] add new DDOS metrics --- pkg/realtime/metrics.go | 4 ++++ pkg/realtime/process.go | 2 ++ pkg/realtime/response.go | 2 ++ pkg/rt/common_test.go | 20 ++++++++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/pkg/realtime/metrics.go b/pkg/realtime/metrics.go index 16443ad..efed499 100644 --- a/pkg/realtime/metrics.go +++ b/pkg/realtime/metrics.go @@ -57,6 +57,8 @@ type Metrics struct { ComputeStackLimitExceededTotal *prometheus.CounterVec DDOSActionBlackholeTotal *prometheus.CounterVec DDOSActionCloseTotal *prometheus.CounterVec + DDOSActionDowngradeTotal *prometheus.CounterVec + DDOSActionDowngradedConnectionsTotal *prometheus.CounterVec DDOSActionLimitStreamsConnectionsTotal *prometheus.CounterVec DDOSActionLimitStreamsRequestsTotal *prometheus.CounterVec DDOSActionTarpitAcceptTotal *prometheus.CounterVec @@ -260,6 +262,8 @@ func NewMetrics(namespace, subsystem string, nameFilter filter.Filter, r prometh ComputeStackLimitExceededTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "compute_stack_limit_exceeded_total", Help: "Number of times a guest exceeded its stack limit."}, []string{"service_id", "service_name", "datacenter"}), DDOSActionBlackholeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_blackhole_total", Help: "The number of times the blackhole action was taken. The blackhole action quietly closes a TCP connection without sending a reset. The blackhole action quietly closes a TCP connection without notifying its peer (all TCP state is dropped)."}, []string{"service_id", "service_name", "datacenter"}), DDOSActionCloseTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_close_total", Help: "The number of times the close action was taken. The close action aborts the connection as soon as possible. The close action takes effect either right after accept, right after the client hello, or right after the response was sent."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionDowngradeTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_downgrade_total", Help: "The number of times the downgrade action was taken. The downgrade action restricts the client to http1."}, []string{"service_id", "service_name", "datacenter"}), + DDOSActionDowngradedConnectionsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_downgraded_connections_total", Help: "The number of connections the downgrade action was applied to. The downgrade action restricts the connection to http1."}, []string{"service_id", "service_name", "datacenter"}), DDOSActionLimitStreamsConnectionsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_limit_streams_connections_total", Help: "For HTTP/2, the number of connections the limit-streams action was applied to. The limit-streams action caps the allowed number of concurrent streams in a connection."}, []string{"service_id", "service_name", "datacenter"}), DDOSActionLimitStreamsRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_limit_streams_requests_total", Help: "For HTTP/2, the number of requests made on a connection for which the limit-streams action was taken. The limit-streams action caps the allowed number of concurrent streams in a connection."}, []string{"service_id", "service_name", "datacenter"}), DDOSActionTarpitAcceptTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "ddos_action_tarpit_accept_total", Help: "The number of times the tarpit-accept action was taken. The tarpit-accept action adds a delay when accepting future connections."}, []string{"service_id", "service_name", "datacenter"}), diff --git a/pkg/realtime/process.go b/pkg/realtime/process.go index 33aab67..ddc3269 100644 --- a/pkg/realtime/process.go +++ b/pkg/realtime/process.go @@ -60,6 +60,8 @@ func Process(response *Response, serviceID, serviceName, serviceVersion string, m.ComputeStackLimitExceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeStackLimitExceededTotal)) m.DDOSActionBlackholeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionBlackhole)) m.DDOSActionCloseTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionClose)) + m.DDOSActionDowngradeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionDowngrade)) + m.DDOSActionDowngradedConnectionsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionDowngradedConnections)) m.DDOSActionLimitStreamsConnectionsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionLimitStreamsConnections)) m.DDOSActionLimitStreamsRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionLimitStreamsRequests)) m.DDOSActionTarpitAcceptTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionTarpitAccept)) diff --git a/pkg/realtime/response.go b/pkg/realtime/response.go index 5aa645e..2714f05 100644 --- a/pkg/realtime/response.go +++ b/pkg/realtime/response.go @@ -66,6 +66,8 @@ type Datacenter struct { ComputeStackLimitExceededTotal uint64 `json:"compute_stack_limit_exceeded"` DDOSActionBlackhole uint64 `json:"ddos_action_blackhole"` DDOSActionClose uint64 `json:"ddos_action_close"` + DDOSActionDowngrade uint64 `json:"h2o_ddos_action_downgrade"` + DDOSActionDowngradedConnections uint64 `json:"h2o_ddos_action_downgraded_connections"` DDOSActionLimitStreamsConnections uint64 `json:"ddos_action_limit_streams_connections"` DDOSActionLimitStreamsRequests uint64 `json:"ddos_action_limit_streams_requests"` DDOSActionTarpit uint64 `json:"ddos_action_tarpit"` diff --git a/pkg/rt/common_test.go b/pkg/rt/common_test.go index 30c1bae..52f9cbf 100644 --- a/pkg/rt/common_test.go +++ b/pkg/rt/common_test.go @@ -2421,6 +2421,26 @@ var expectedRTMetricsOutputMap = map[string]float64{ `testspace_testsystem_ddos_action_close_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_ddos_action_close_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_ddos_action_close_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_ddos_action_limit_streams_connections_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_ddos_action_limit_streams_connections_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_ddos_action_limit_streams_connections_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, From 318b6deb8e4f89beb4084808a6e2eac5daeb95d2 Mon Sep 17 00:00:00 2001 From: Lukas Eklund Date: Thu, 18 Apr 2024 15:07:32 -0500 Subject: [PATCH 4/4] add VCL on Compute metrics --- pkg/realtime/metrics.go | 14 ++++++++ pkg/realtime/process.go | 7 ++++ pkg/realtime/response.go | 7 ++++ pkg/rt/common_test.go | 70 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) diff --git a/pkg/realtime/metrics.go b/pkg/realtime/metrics.go index efed499..7bff49f 100644 --- a/pkg/realtime/metrics.go +++ b/pkg/realtime/metrics.go @@ -197,6 +197,13 @@ type Metrics struct { SynthsTotal *prometheus.CounterVec TLSTotal *prometheus.CounterVec UncacheableTotal *prometheus.CounterVec + VclOnComputeEdgeHitRequestsTotal *prometheus.CounterVec + VclOnComputeEdgeMissRequestsTotal *prometheus.CounterVec + VclOnComputeErrorRequestsTotal *prometheus.CounterVec + VclOnComputeHitRequestsTotal *prometheus.CounterVec + VclOnComputeMissRequestsTotal *prometheus.CounterVec + VclOnComputePassRequestsTotal *prometheus.CounterVec + VclOnComputeSynthRequestsTotal *prometheus.CounterVec VideoTotal *prometheus.CounterVec WAFBlockedTotal *prometheus.CounterVec WAFLoggedTotal *prometheus.CounterVec @@ -402,6 +409,13 @@ func NewMetrics(namespace, subsystem string, nameFilter filter.Filter, r prometh SynthsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "synth_total", Help: "TODO"}, []string{"service_id", "service_name", "datacenter"}), TLSTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "tls_total", Help: "Number of requests that were received over TLS."}, []string{"service_id", "service_name", "datacenter", "tls_version"}), UncacheableTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "uncacheable_total", Help: "Number of requests that were designated uncachable."}, []string{"service_id", "service_name", "datacenter"}), + VclOnComputeHitRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "vcl_on_compute_hit_requests_total", Help: "Number of cache hits for a VCL service running on Compute."}, []string{"service_id", "service_name", "datacenter"}), + VclOnComputeMissRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "vcl_on_compute_miss_requests_total", Help: "Number of cache misses for a VCL service running on Compute."}, []string{"service_id", "service_name", "datacenter"}), + VclOnComputePassRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "vcl_on_compute_pass_requests_total", Help: "Number of requests that passed through the CDN without being cached for a VCL service running on Compute."}, []string{"service_id", "service_name", "datacenter"}), + VclOnComputeErrorRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "vcl_on_compute_error_requests_total", Help: "Number of cache errors for a VCL service running on Compute."}, []string{"service_id", "service_name", "datacenter"}), + VclOnComputeSynthRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "vcl_on_compute_synth_requests_total", Help: "Number of requests that returned a synthetic response (i.e., response objects created with the synthetic VCL statement) for a VCL service running on Compute."}, []string{"service_id", "service_name", "datacenter"}), + VclOnComputeEdgeHitRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "vcl_on_compute_edge_hit_requests_total", Help: "Number of requests sent by end users to Fastly that resulted in a hit at the edge for a VCL service running on Compute."}, []string{"service_id", "service_name", "datacenter"}), + VclOnComputeEdgeMissRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "vcl_on_compute_edge_miss_requests_total", Help: "Number of requests sent by end users to Fastly that resulted in a miss at the edge for a VCL service running on Compute."}, []string{"service_id", "service_name", "datacenter"}), VideoTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "video_total", Help: "Number of responses with the video segment or video manifest MIME type (i.e., application/x-mpegurl, application/vnd.apple.mpegurl, application/f4m, application/dash+xml, application/vnd.ms-sstr+xml, ideo/mp2t, audio/aac, video/f4f, video/x-flv, video/mp4, audio/mp4)."}, []string{"service_id", "service_name", "datacenter"}), WAFBlockedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_blocked_total", Help: "Number of requests that triggered a WAF rule and were blocked."}, []string{"service_id", "service_name", "datacenter"}), WAFLoggedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{Namespace: namespace, Subsystem: subsystem, Name: "waf_logged_total", Help: "Number of requests that triggered a WAF rule and were logged."}, []string{"service_id", "service_name", "datacenter"}), diff --git a/pkg/realtime/process.go b/pkg/realtime/process.go index ddc3269..394576d 100644 --- a/pkg/realtime/process.go +++ b/pkg/realtime/process.go @@ -224,6 +224,13 @@ func Process(response *Response, serviceID, serviceName, serviceVersion string, m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.2").Add(float64(stats.TLSv12)) m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.3").Add(float64(stats.TLSv13)) m.UncacheableTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Uncacheable)) + m.VclOnComputeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeHitRequests)) + m.VclOnComputeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeMissRequests)) + m.VclOnComputePassRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputePassRequests)) + m.VclOnComputeErrorRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeErrorRequests)) + m.VclOnComputeSynthRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeSynthRequests)) + m.VclOnComputeEdgeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeEdgeHitRequests)) + m.VclOnComputeEdgeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeEdgeMissRequests)) m.VideoTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Video)) m.WAFBlockedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFBlocked)) m.WAFLoggedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFLogged)) diff --git a/pkg/realtime/response.go b/pkg/realtime/response.go index 2714f05..15b9257 100644 --- a/pkg/realtime/response.go +++ b/pkg/realtime/response.go @@ -238,6 +238,13 @@ type Datacenter struct { TLSv12 uint64 `json:"tls_v12"` TLSv13 uint64 `json:"tls_v13"` Uncacheable uint64 `json:"uncacheable"` + VclOnComputeEdgeHitRequests uint64 `json:"vcl_on_compute_edge_hit_requests"` + VclOnComputeEdgeMissRequests uint64 `json:"vcl_on_compute_edge_miss_requests"` + VclOnComputeErrorRequests uint64 `json:"vcl_on_compute_error_requests"` + VclOnComputeHitRequests uint64 `json:"vcl_on_compute_hit_requests"` + VclOnComputeMissRequests uint64 `json:"vcl_on_compute_miss_requests"` + VclOnComputePassRequests uint64 `json:"vcl_on_compute_pass_requests"` + VclOnComputeSynthRequests uint64 `json:"vcl_on_compute_synth_requests"` Video uint64 `json:"video"` WAFBlocked uint64 `json:"waf_blocked"` WAFLogged uint64 `json:"waf_logged"` diff --git a/pkg/rt/common_test.go b/pkg/rt/common_test.go index 52f9cbf..1f271b0 100644 --- a/pkg/rt/common_test.go +++ b/pkg/rt/common_test.go @@ -4333,6 +4333,76 @@ var expectedRTMetricsOutputMap = map[string]float64{ `testspace_testsystem_uncacheable_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_uncacheable_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_uncacheable_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="HHN",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="LGA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="SEA",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="SYD",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="TYO",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="YUL",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_video_total{datacenter="BUR",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_video_total{datacenter="BWI",service_id="my-service-id",service_name="my-service-name"}`: 0, `testspace_testsystem_video_total{datacenter="FRA",service_id="my-service-id",service_name="my-service-name"}`: 0,