VARNISH-COUNTERS(7)

๐ŸŒธ VARNISH-COUNTERS ๐ŸŒธ

okay bestie, welcome to VARNISH-COUNTERS(7) from the Miscellaneous Information Manual ๐Ÿ’– this is literally the dictionary of every counter field Varnish knows about, and we're going through all of them, no skipping, no cap ๐Ÿซถ


โœจ NAME โœจ

varnish-counters โ€” Varnish counter field definitions ๐Ÿ‘‘

Each counter below gets its name, its type (counter or gauge), and its level (debug, info or diag), plus what it actually means. Let's get into it, we're gonna eat ๐Ÿ’…


๐Ÿ”’ LCK โ€“ LOCK COUNTERS ๐Ÿ”’

These ones track the activity inside the different classes of mutex-locks. Real "who's touching the locks" energy ๐Ÿ”ฅ

ngl the counts may be slightly wrong if there's more than one lock instantiated in each class (ie: .creat > 1). Not a vibe, just a fact ๐Ÿ™ˆ
  • creat โ€” counter โ€” debug โ€” Created locks. Lock babies being born โœจ
  • destroy โ€” counter โ€” debug โ€” Destroyed locks. Lock babies going to the great lock farm upstate ๐Ÿ˜ญ
  • locks โ€” counter โ€” debug โ€” Lock Operations. Every time a lock gets operated on, this goes up ๐Ÿ’ซ
  • dbg_busy โ€” counter โ€” debug โ€” Contended lock operations.
    • If the lck debug bit is set: lock operations which returned EBUSY on the first locking attempt.
    • If the lck debug bit is unset, this counter will never be incremented even if lock operations are contended. Like, it's just sitting there. Silently. ๐Ÿ’€
  • dbg_try_fail โ€” counter โ€” debug โ€” Contended trylock operations.
    • If the lck debug bit is set: trylock operations which returned EBUSY.
    • If the lck debug bit is unset, this counter will never be incremented even if lock operations are contended. Same deal, same silence ๐Ÿซ 

๐Ÿ‘‘ MAIN โ€“ MAIN COUNTERS ๐Ÿ‘‘

The main character section, obviously ๐ŸŒˆ every counter the child process wants you to know about.

  • summs โ€” counter โ€” debug โ€” stat summ operations. Counts how many times per-thread statistics got summed into the global counters ๐Ÿงฎ
  • uptime โ€” counter โ€” info โ€” Child process uptime. How long the child process has been running. Living its life โณ
  • sess_conn โ€” counter โ€” info โ€” Sessions accepted. Count of sessions successfully accepted ๐ŸŽ€
  • sess_fail โ€” counter โ€” info โ€” Session accept failures. Count of failures to accept TCP connection.
    • This counter is the sum of the sess_fail_* counters, which give more detailed information. So if you want the tea, read the ones below ๐Ÿต
  • sess_fail_econnaborted โ€” counter โ€” info โ€” Session accept failures: connection aborted. Detailed reason for sess_fail: connection aborted by the client, usually harmless. The client just ghosted โœŒ๏ธ
  • sess_fail_eintr โ€” counter โ€” info โ€” Session accept failures: interrupted system call. Detailed reason for sess_fail: the accept() call was interrupted, usually harmless ๐Ÿซถ
  • sess_fail_emfile โ€” counter โ€” info โ€” Session accept failures: too many open files. Detailed reason for sess_fail: no file descriptor was available. Consider raising RLIMIT_NOFILE (see ulimit -n). We ran out of file descriptors bestie, it happens ๐Ÿ˜ญ
  • sess_fail_ebadf โ€” counter โ€” info โ€” Session accept failures: bad file descriptor. Detailed reason for sess_fail: the listen socket file descriptor was invalid. Should never happen. Like, if you see this, something is deeply wrong ๐Ÿ’€
  • sess_fail_enomem โ€” counter โ€” info โ€” Session accept failures: not enough memory. Detailed reason for sess_fail: most likely insufficient socket buffer memory. Should never happen ๐Ÿ™ˆ
  • sess_fail_other โ€” counter โ€” info โ€” Session accept failures: other. Detailed reason for sess_fail: neither of the above, see SessError log (varnishlog -g raw -i SessError). The mystery box option ๐Ÿ“ฆ
  • client_req_400 โ€” counter โ€” info โ€” Client requests received, subject to 400 errors. 400 means we couldn't make sense of the request, it was malformed in some drastic way. Not us, it's them ๐Ÿ’…
  • client_req_417 โ€” counter โ€” info โ€” Client requests received, subject to 417 errors. 417 means that something went wrong with an Expect: header. Expectations? Not met ๐ŸŽญ
  • client_req โ€” counter โ€” info โ€” Good client requests received. The count of parseable client requests seen. The well-behaved ones โญ
  • esi_req โ€” counter โ€” info โ€” ESI subrequests. Number of ESI subrequests made ๐Ÿงฉ
  • cache_hit โ€” counter โ€” info โ€” Cache hits. Count of cache hits. A cache hit indicates that an object has been delivered to a client without fetching it from a backend server. The dream scenario fr fr ๐Ÿ”ฅ
  • cache_hit_grace โ€” counter โ€” info โ€” Cache grace hits. Count of cache hits with grace. A cache hit with grace is a cache hit where the object is expired. Note that such hits are also included in the cache_hit counter. Yes, they double dip, that's just how it is ๐Ÿซ 
  • cache_hitpass โ€” counter โ€” info โ€” Cache hits for pass. Count of hits for pass. A cache hit for pass indicates that Varnish is going to pass the request to the backend and this decision has been cached in it self. This counts how many times the cached decision is being used. The decision said "go to backend" and it's sticking to it ๐ŸŽฏ
  • cache_hitmiss โ€” counter โ€” info โ€” Cache hits for miss. Count of hits for miss. A cache hit for miss indicates that Varnish is going to proceed as for a cache miss without request coalescing, and this decision has been cached. This counts how many times the cached decision is being used. Same energy, different decision ๐Ÿ’ซ
  • cache_miss โ€” counter โ€” info โ€” Cache misses. Count of misses. A cache miss indicates the object was fetched from the backend before delivering it to the client. Had to go get it ourselves ๐Ÿ˜ค
  • beresp_uncacheable โ€” counter โ€” info โ€” Uncacheable backend responses. Count of backend responses considered uncacheable. Sorry babe, not staying in the cache ๐Ÿšซ
  • beresp_shortlived โ€” counter โ€” info โ€” Shortlived objects. Count of objects created with ttl+grace+keep shorter than the 'shortlived' runtime parameter. Blink and they're gone ๐Ÿฆ‹
  • backend_conn โ€” counter โ€” info โ€” Backend conn. success. How many backend connections have successfully been established. We made it ๐Ÿค
  • backend_unhealthy โ€” counter โ€” info โ€” Backend conn. not attempted. Not even tried ๐Ÿ˜ท
  • backend_busy โ€” counter โ€” info โ€” Backend conn. too many. Too many bestie, we're full ๐Ÿšฆ
  • backend_fail โ€” counter โ€” info โ€” Backend conn. failures. It did not work ๐Ÿ’”
  • backend_reuse โ€” counter โ€” info โ€” Backend conn. reuses. Count of backend connection reuses. This counter is increased whenever we reuse a recycled connection. Reduce, reuse, recycle โ™ป๏ธ
  • backend_recycle โ€” counter โ€” info โ€” Backend conn. recycles. Count of backend connection recycles. This counter is increased whenever we have a keep-alive connection that is put back into the pool of connections. It has not yet been used, but it might be, unless the backend closes it. Just chilling in the pool, waiting for its moment ๐ŸŒŠ
  • backend_retry โ€” counter โ€” info โ€” Backend conn. retry. One more time with feeling ๐Ÿ”
  • backend_wait โ€” counter โ€” info โ€” Backend conn. waited in queue for a connection. Count of backend requests that waited in a backend_wait queue for a connection to become available. The size of a backend wait queue is defined by the backend wait_limit property. The wait queue is only used when max_connections to the backend are in use. Standing in line, patiently ๐Ÿง
  • backend_wait_fail โ€” counter โ€” info โ€” Backend conn. waited in queue and did not get a connection. Count of backend requests that waited in a backend_wait queue for a connection to become available and did not get one (timed out). The maximum time to wait in the queue is defined by the backend wait_timeout property. Waited the whole time and still got nothing ๐Ÿ˜ญ
  • fetch_head โ€” counter โ€” info โ€” Fetch no body (HEAD). beresp with no body because the request is HEAD. No body, just vibes ๐ŸŽฉ
  • fetch_length โ€” counter โ€” info โ€” Fetch with Length. beresp.body with Content-Length. We know exactly how long it is ๐Ÿ“
  • fetch_chunked โ€” counter โ€” info โ€” Fetch chunked. beresp.body with Chunked. Chunk by chunk by chunk ๐Ÿงฑ
  • fetch_eof โ€” counter โ€” info โ€” Fetch EOF. beresp.body with EOF. It just... ends ๐ŸŒ…
  • fetch_bad โ€” counter โ€” info โ€” Fetch bad T-E. beresp.body length/fetch could not be determined. Unknowable, honestly ๐ŸŒ€
  • fetch_none โ€” counter โ€” info โ€” Fetch no body. beresp.body empty. Nothing there, bestie ๐Ÿ•ณ๏ธ
  • fetch_1xx โ€” counter โ€” info โ€” Fetch no body (1xx). beresp with no body because of 1XX response. Just an update, no content ๐Ÿ’Œ
  • fetch_204 โ€” counter โ€” info โ€” Fetch no body (204). beresp with no body because of 204 response. Success, but make it empty โœจ
  • fetch_304 โ€” counter โ€” info โ€” Fetch no body (304). beresp with no body because of 304 response. Not modified, so not re-sent ๐Ÿ’…
  • fetch_failed โ€” counter โ€” info โ€” Fetch failed (all causes). beresp fetch failed. Every possible way it can go wrong, rolled into one ๐Ÿ’€
  • bgfetch_no_thread โ€” counter โ€” info โ€” Background fetch failed (no thread). A bgfetch triggered by a grace hit failed, no thread available. Nobody was free to do it ๐Ÿ˜ด
  • pools โ€” gauge โ€” info โ€” Number of thread pools. Number of thread pools. See also parameter thread_pools. NB: presently pools cannot be removed once created. Once they're here, they're here forever ๐Ÿซถ
  • threads โ€” gauge โ€” info โ€” Total number of threads. Number of threads in all pools. See also parameters thread_pools, thread_pool_min and thread_pool_max. The whole squad ๐Ÿงต
  • threads_limited โ€” counter โ€” info โ€” Threads hit max. Number of times more threads were needed, but limit was reached in a thread pool. See also parameter thread_pool_max. We wanted more, we couldn't have more ๐Ÿ›‘
  • threads_created โ€” counter โ€” info โ€” Threads created. Total number of threads created in all pools. New thread, who dis ๐ŸŒฑ
  • threads_destroyed โ€” counter โ€” info โ€” Threads destroyed. Total number of threads destroyed in all pools. Gone but not forgotten ๐Ÿชฆ
  • threads_failed โ€” counter โ€” info โ€” Thread creation failed. Number of times creating a thread failed. See VSL::Debug for diagnostics. See also parameter thread_fail_delay. It tried to make a thread and could not ๐Ÿ˜”
  • thread_queue_len โ€” gauge โ€” info โ€” Length of session queue. Length of session queue waiting for threads. NB: only updates once per second. See also parameter thread_queue_limit. The line is long and it refreshes slowly โฐ
  • busy_sleep โ€” counter โ€” info โ€” Number of requests sent to sleep on busy objhdr. Number of requests sent to sleep without a worker thread because they found a busy object. Nap time ๐Ÿ˜ด
  • busy_wakeup โ€” counter โ€” info โ€” Number of requests woken after sleep on busy objhdr. Number of requests taken off the busy object sleep list and rescheduled. Rise and shine โ˜€๏ธ
  • busy_killed โ€” counter โ€” info โ€” Number of requests killed after sleep on busy objhdr. Number of requests killed from the busy object sleep list due to lack of resources. Never woke up ๐Ÿ’€
  • sess_queued โ€” counter โ€” info โ€” Sessions queued for thread. Number of times session was queued waiting for a thread. See also parameter thread_queue_limit. Waiting in line ๐Ÿšถโ™€๏ธ
  • sess_dropped โ€” counter โ€” info โ€” Sessions dropped for thread. Number of times an HTTP/1 session was dropped because the queue was too long already. See also parameter thread_queue_limit. The line was too long, so out you go ๐Ÿ™ˆ
  • req_dropped โ€” counter โ€” info โ€” Requests dropped. Number of times an HTTP/2 stream was refused because the queue was too long already. See also parameter thread_queue_limit. Same energy, but HTTP/2 this time ๐Ÿšช
  • req_reset โ€” counter โ€” info โ€” Requests reset. Number of times a client left before the VCL processing of its requests completed. For HTTP/2 sessions, either the stream was reset by an RST_STREAM frame from the client, or a stream or connection error occurred. They left mid-conversation ๐Ÿ˜ญ
  • n_object โ€” gauge โ€” info โ€” object structs made. Approximate number of HTTP objects (headers + body, if present) in the cache. Approximate, so don't come for it ๐Ÿ“ฆ
  • n_vampireobject โ€” gauge โ€” diag โ€” unresurrected objects. Number of unresurrected objects. Vampire objects, undead but not back yet ๐Ÿง›
  • n_objectcore โ€” gauge โ€” info โ€” objectcore structs made. Approximate number of object metadata elements in the cache. Each object needs an objectcore, extra objectcores are for hit-for-miss, hit-for-pass and busy objects. Every object needs its little core ๐Ÿง 
  • n_objecthead โ€” gauge โ€” info โ€” objecthead structs made.

โ€ฆand yeah, that's the approximate number of different hash entries vibing in the cache. anyway. Moving on, bestie, we got MORE counters ๐Ÿ’–


  • n_backend โ€” gauge ยท info โ€” Number of backends โ€” literally just how many backends we know about. that's it, that's the counter ๐Ÿซถ
  • n_expired โ€” counter ยท info โ€” Number of expired objects โ€” how many objects got evicted from the cache because they were simply too old. grandma objects, gone ๐Ÿ’€
  • n_superseded โ€” counter ยท diag โ€” Number of superseded objects โ€” how many times an object got replaced by a newer one. out with the old, in with the slay โœจ
  • n_lru_nuked โ€” counter ยท info โ€” Number of LRU nuked objects โ€” how many objects got forcibly yeeted out of storage to make room for a new one. not a vibe, but necessary ๐Ÿ˜ญ
  • n_lru_moved โ€” counter ยท diag โ€” Number of LRU moved objects โ€” how many move operations went down on the LRU list.
  • n_lru_limited โ€” counter ยท info โ€” Reached nuke_limit โ€” how many times we needed more storage space but hit the limit in a nuke_limit. see also parameter nuke_limit. ๐Ÿšง
  • losthdr โ€” counter ยท info โ€” HTTP header overflows
  • s_sess โ€” counter ยท info โ€” Total sessions seen
  • n_pipe โ€” gauge ยท info โ€” Number of ongoing pipe sessions
  • pipe_limited โ€” counter ยท info โ€” Pipes hit pipe_sess_max โ€” how many times we needed more pipes but the limit was reached. see also parameter pipe_sess_max. ๐Ÿšฐ
  • s_pipe โ€” counter ยท info โ€” Total pipe sessions seen
  • s_pass โ€” counter ยท info โ€” Total pass-ed requests seen
  • s_fetch โ€” counter ยท info โ€” Total backend fetches initiated โ€” total backend fetches initiated, including background fetches. yes, the sneaky ones count too ๐Ÿ™ˆ
  • s_bgfetch โ€” counter ยท info โ€” Total backend background fetches initiated
  • s_synth โ€” counter ยท info โ€” Total synthetic responses made
  • s_req_hdrbytes โ€” counter ยท info โ€” Request header bytes โ€” total request header bytes received.
  • s_req_bodybytes โ€” counter ยท info โ€” Request body bytes โ€” total request body bytes received.
  • s_resp_hdrbytes โ€” counter ยท info โ€” Response header bytes โ€” total response header bytes transmitted.
  • s_resp_bodybytes โ€” counter ยท info โ€” Response body bytes โ€” total response body bytes transmitted.
  • s_pipe_hdrbytes โ€” counter ยท info โ€” Pipe request header bytes โ€” total request bytes received for piped sessions.
  • s_pipe_in โ€” counter ยท info โ€” Piped bytes from client โ€” total number of bytes forwarded from clients in pipe sessions.
  • s_pipe_out โ€” counter ยท info โ€” Piped bytes to client โ€” total number of bytes forwarded to clients in pipe sessions.

okay now we're getting into the transit girlies, and they're lowkey iconic ๐Ÿ‘‘

  • transit_stored โ€” counter ยท info โ€” Stored uncacheable body bytes โ€” total number of transient body bytes written to storage as if they were reusable like a cacheable backend response. transient objects are stored for a single transaction, and this includes uncacheable backend responses, synthetic responses and client requests. one transaction and done, no cap โœจ
  • transit_buffered โ€” counter ยท info โ€” Buffered uncacheable response body bytes โ€” total number of uncacheable responses body bytes forwarded using a fixed buffer allocated from storage. this behavior can be enabled by the 'transit_buffer' parameter, or the 'beresp.transit_buffer' VCL variable. ๐Ÿงš
  • sess_closed โ€” counter ยท info โ€” Session Closed
  • sess_closed_err โ€” counter ยท info โ€” Session Closed with error โ€” total number of sessions closed with errors. see sc_* diag counters for the detailed breakdown. it's giving receipts ๐Ÿ”
  • sess_readahead โ€” counter ยท info โ€” Session Read Ahead
  • sess_herd โ€” counter ยท diag โ€” Session herd โ€” number of times the timeout_linger triggered.

and nowโ€ฆ the sc_* squad ๐Ÿ’œ these are your session-close diag counters, one for literally every way a session can dip out:

  • sc_rem_close โ€” counter ยท diag โ€” Session OK REM_CLOSE โ€” number of session closes with REM_CLOSE (Client Closed).
  • sc_req_close โ€” counter ยท diag โ€” Session OK REQ_CLOSE โ€” number of session closes with REQ_CLOSE (Client requested close).
  • sc_req_http10 โ€” counter ยท diag โ€” Session Err REQ_HTTP10 โ€” number of session closes with Error REQ_HTTP10 (Proto < HTTP/1.1).
  • sc_rx_bad โ€” counter ยท diag โ€” Session Err RX_BAD โ€” number of session closes with Error RX_BAD (Received bad req/resp).
  • sc_rx_body โ€” counter ยท diag โ€” Session Err RX_BODY โ€” number of session closes with Error RX_BODY (Failure receiving req.body).
  • sc_rx_junk โ€” counter ยท diag โ€” Session Err RX_JUNK โ€” number of session closes with Error RX_JUNK (Received junk data). junk fr ๐Ÿ—‘๏ธ
  • sc_rx_overflow โ€” counter ยท diag โ€” Session Err RX_OVERFLOW โ€” number of session closes with Error RX_OVERFLOW (Received buffer overflow).
  • sc_rx_timeout โ€” counter ยท diag โ€” Session Err RX_TIMEOUT โ€” number of session closes with Error RX_TIMEOUT (Receive timeout).
  • sc_rx_close_idle โ€” counter ยท diag โ€” Session Err RX_CLOSE_IDLE โ€” number of session closes with Error RX_CLOSE_IDLE: timeout_idle has been exceeded while waiting for a client request. bestie ghosted us ๐Ÿ˜ญ
  • sc_tx_pipe โ€” counter ยท diag โ€” Session OK TX_PIPE โ€” number of session closes with TX_PIPE (Piped transaction).
  • sc_tx_error โ€” counter ยท diag โ€” Session Err TX_ERROR โ€” number of session closes with Error TX_ERROR (Error transaction).
  • sc_tx_eof โ€” counter ยท diag โ€” Session OK TX_EOF โ€” number of session closes with TX_EOF (EOF transmission).
  • sc_resp_close โ€” counter ยท diag โ€” Session OK RESP_CLOSE โ€” number of session closes with RESP_CLOSE (Backend/VCL requested close).
  • sc_overload โ€” counter ยท diag โ€” Session Err OVERLOAD โ€” number of session closes with Error OVERLOAD (Out of some resource).
  • sc_pipe_overflow โ€” counter ยท diag โ€” Session Err PIPE_OVERFLOW โ€” number of session closes with Error PIPE_OVERFLOW (Session pipe overflow).
  • sc_range_short โ€” counter ยท diag โ€” Session Err RANGE_SHORT โ€” number of session closes with Error RANGE_SHORT (Insufficient data for range).
  • sc_req_http20 โ€” counter ยท diag โ€” Session Err REQ_HTTP20 โ€” number of session closes with Error REQ_HTTP20 (HTTP2 not accepted).
  • sc_vcl_failure โ€” counter ยท diag โ€” Session Err VCL_FAILURE โ€” number of session closes with Error VCL_FAILURE (VCL failure).
  • sc_rapid_reset โ€” counter ยท diag โ€” Session Err RAPID_RESET โ€” number of times we failed an http/2 session because it hit its configured limits for the number of permitted rapid stream resets. slow down, queen ๐Ÿ’…
  • sc_bankrupt โ€” counter ยท diag โ€” Session Err BANKRUPT โ€” number of times we failed an http/2 session because all the streams were waiting for their windows to be credited when h2_window_timeout triggered. no funds, no streams ๐Ÿ’€
  • client_resp_500 โ€” counter ยท diag โ€” Delivery failed due to insufficient workspace. โ€” number of times we failed a response due to running out of workspace memory during delivery.
  • ws_backend_overflow โ€” counter ยท diag โ€” workspace_backend overflows โ€” number of times we ran out of space in workspace_backend.
  • ws_client_overflow โ€” counter ยท diag โ€” workspace_client overflows โ€” number of times we ran out of space in workspace_client.
  • ws_thread_overflow โ€” counter ยท diag โ€” workspace_thread overflows โ€” number of times we ran out of space in workspace_thread.
  • ws_session_overflow โ€” counter ยท diag โ€” workspace_session overflows โ€” number of times we ran out of space in workspace_session.

shm girlies, rise โœจ๐ŸŒˆ this is your shared memory log clique:

  • shm_records โ€” counter ยท diag โ€” SHM records โ€” number of log records written to the shared memory log.
  • shm_writes โ€” counter ยท diag โ€” SHM writes โ€” number of individual writes to the shared memory log. a single write may batch multiple records for buffered tasks. multitasking icon ๐ŸŽ€
  • shm_flushes โ€” counter ยท diag โ€” SHM flushes due to overflow โ€” number of writes performed before the end of a buffered task because adding a record to a batch would exceed vsl_buffer.
  • shm_cont โ€” counter ยท diag โ€” SHM lock contention โ€” number of times a write had to wait for the lock. waiting room behavior ๐Ÿ˜ค
  • shm_cycles โ€” counter ยท diag โ€” SHM cycles through VSL space โ€” number of times a write of log records would reach past the end of the shared memory log, cycling back to the beginning. round and round bestie ๐ŸŒ€
  • shm_bytes โ€” counter ยท diag โ€” SHM bytes โ€” number of bytes written to the shared memory log.
  • backend_req โ€” counter ยท info โ€” Backend requests made
  • n_vcl โ€” gauge ยท info โ€” Number of loaded VCLs in total
  • n_vcl_avail โ€” gauge ยท diag โ€” Number of VCLs available
  • n_vcl_discard โ€” gauge ยท diag โ€” Number of discarded VCLs
  • vcl_fail โ€” counter ยท info โ€” VCL failures โ€” count of failures which prevented VCL from completing.

and finally for this stretch: the BANS ๐Ÿšซ (not the dramatic kind, the cache kind):

  • bans โ€” gauge ยท info โ€” Count of bans โ€” number of all bans in system, including bans superseded by newer bans and bans already checked by the ban-lurker.
  • bans_completed โ€” gauge ยท diag โ€” Number of bans marked 'completed' โ€” number of bans which are no longer active, either because they got checked by the ban-lurker or superseded by newer identical bans. retired, but with honor ๐Ÿซก
  • bans_obj โ€” gauge ยท diag โ€” Number of bans using obj.* โ€” number of bans which use obj.* variables. these bans can possibly be washed by the ban-lurker.
  • bans_req โ€” gauge ยท diag โ€” Number of bans using req.* โ€” number of bans which use req.* variables. these bans cannot be washed by the ban-lurker. stubborn queens ๐Ÿ’…
  • bans_added โ€” counter ยท diag โ€” Bans added โ€” counter of bans added to ban list.
  • bans_deleted โ€” counter ยท diag โ€” Bans deleted โ€” counter of bans deleted from ban list.
  • bans_tested โ€” counter ยท diag โ€” Bans tested against objects (lookup) โ€” count of how many bans and objects have been tested against each other during hash lookup.
  • bans_obj_killed โ€” counter ยท diag โ€” Objects killed by bans (lookup) โ€” number of objects killed by bans during object lookup. rip bozo ๐Ÿ˜ญ
  • bans_lurker_tested โ€” counter ยท diag โ€” Bans tested against objects (lurker) โ€” count of how many bans and objects have been tested against each other by the ban-lurker.
  • bans_tests_tested โ€” counter ยท diag โ€” Ban tests tested against objects (lookup) โ€” count of how many tests and objects have been tested against each other during lookup. 'ban req.url == foo && req.http.host == bar' counts as one in 'bans_tested' and as two in 'bans_tests_tested'. math is mathing ๐Ÿ”ฅ
  • bans_lurker_tests_tested โ€” counter ยท diag โ€” Ban tests tested against objects (lurker) โ€” count of how many tests and objects have been tested against each other by the ban-lurker. 'ban req.url == foo && req.http.host == bar' counts as one in 'bans_tested' and as two in 'bans_tests_tested'.
  • bans_lurker_obj_killed โ€” counter ยท diag โ€” Objects killed by bans (lurker) โ€” number of objects killed by the ban-lurker.
  • bans_lurker_obj_killed_cutoff โ€” counter ยท diag โ€” Objects killed by bans for cutoff (lurker)

Number of objects killed by the ban-lurker to keep the number of bans below ban_cutoff. ๐Ÿ’€

  • bans_dups โ€” counter / diag โ€” Bans superseded by other bans

Count of bans replaced by later identical bans. โœจ

  • bans_lurker_contention โ€” counter / diag โ€” Lurker gave way for lookup

Number of times the ban-lurker had to wait for lookups. ๐Ÿซถ

  • bans_persisted_bytes โ€” gauge / diag โ€” Bytes used by the persisted ban lists

Number of bytes used by the persisted ban lists.

  • bans_persisted_fragmentation โ€” gauge / diag โ€” Extra bytes in persisted ban lists due to fragmentation

Number of extra bytes accumulated through dropped and completed bans in the persistent ban lists.

  • n_purges โ€” counter / info โ€” Number of purge operations executed
  • n_obj_purged โ€” counter / info โ€” Number of purged objects
  • exp_mailed โ€” counter / diag โ€” Number of objects mailed to expiry thread

Number of objects mailed to expiry thread for handling. ๐Ÿ“ฌ

  • exp_received โ€” counter / diag โ€” Number of objects received by expiry thread

Number of objects received by expiry thread for handling. ๐Ÿ’Œ

  • hcb_nolock โ€” counter / debug โ€” HCB Lookups without lock
  • hcb_lock โ€” counter / debug โ€” HCB Lookups with lock
  • hcb_insert โ€” counter / debug โ€” HCB Inserts
  • esi_errors โ€” counter / diag โ€” ESI parse errors (unlock)
  • esi_warnings โ€” counter / diag โ€” ESI parse warnings (unlock)
  • vmods โ€” gauge / info โ€” Loaded VMODs
  • n_gzip โ€” counter / info โ€” Gzip operations
  • n_gunzip โ€” counter / info โ€” Gunzip operations
  • n_test_gunzip โ€” counter / info โ€” Test gunzip operations

Those operations occur when Varnish receives a compressed object from a backend. They are done to verify the gzip stream while it's inserted in storage. ๐Ÿซง

  • http1_iovs_flush โ€” counter / info โ€” Premature iovec flushes

Number of additional writes performed on HTTP1 connections because the number of IO vectors was too small to submit all possible IO in one go. This number is configured through the http1_iovs parameter for client connections and implicitly defined by the amount of free workspace for backend connections.

  • http1_absolute_form โ€” counter / info โ€” Requests with absolute form request target

Number of requests for which an absolute form request target (e.g. <http://example.com/> or <https://example.com/>) was handled. The <https://> scheme is handled unless the feature https_scheme is disabled (see RUN TIME PARAMETERS in varnishd(1)).

See also ReqTarget in vsl(7). This counter is approximately correct. ๐Ÿ‘€


๐Ÿงบ MEMPOOL โ€“ MEMORY POOL COUNTERS

  • live โ€” gauge / debug โ€” In use
  • pool โ€” gauge / debug โ€” In Pool
  • sz_wanted โ€” gauge / debug โ€” Size requested
  • sz_actual โ€” gauge / debug โ€” Size allocated
  • allocs โ€” counter / debug โ€” Allocations
  • frees โ€” counter / debug โ€” Frees
  • recycle โ€” counter / debug โ€” Recycled from pool
  • timeout โ€” counter / debug โ€” Timed out from pool
  • toosmall โ€” counter / debug โ€” Too small to recycle
  • surplus โ€” counter / debug โ€” Too many for pool
  • randry โ€” counter / debug โ€” Pool ran dry

๐Ÿ‘‘ MGT โ€“ MANAGEMENT PROCESS COUNTERS

  • uptime โ€” counter / info โ€” Management process uptime

Uptime in seconds of the management process โฑ๏ธ

  • child_start โ€” counter / diag โ€” Child process started

Number of times the child process has been started

  • child_exit โ€” counter / diag โ€” Child process normal exit

Number of times the child process has been cleanly stopped

  • child_stop โ€” counter / diag โ€” Child process unexpected exit

Number of times the child process has exited with an unexpected return code

  • child_died โ€” counter / diag โ€” Child process died (signal)

Number of times the child process has died due to signals

  • child_dump โ€” counter / diag โ€” Child process core dumped

Number of times the child process has produced core dumps

  • child_panic โ€” counter / diag โ€” Child process panic

Number of times the management process has caught a child panic ๐Ÿ˜ฑ


๐Ÿงฑ SMA โ€“ MALLOC STEVEDORE COUNTERS

  • c_req โ€” counter / info โ€” Allocator requests

Number of times the storage has been asked to provide a storage segment.

  • c_fail โ€” counter / info โ€” Allocator failures

Number of times the storage has failed to provide a storage segment.

  • c_bytes โ€” counter / info โ€” Bytes allocated

Number of total bytes allocated by this storage.

  • c_freed โ€” counter / info โ€” Bytes freed

Number of total bytes returned to this storage.

  • g_alloc โ€” gauge / info โ€” Allocations outstanding

Number of storage allocations outstanding.

  • g_bytes โ€” gauge / info โ€” Bytes outstanding

Number of bytes allocated from the storage.

  • g_space โ€” gauge / info โ€” Bytes available

Number of bytes left in the storage.


๐Ÿ—‚๏ธ SMF โ€“ FILE STEVEDORE COUNTERS

  • c_req โ€” counter / info โ€” Allocator requests

Number of times the storage has been asked to provide a storage segment.

  • c_fail โ€” counter / info โ€” Allocator failures

Number of times the storage has failed to provide a storage segment.

  • c_bytes โ€” counter / info โ€” Bytes allocated

Number of total bytes allocated by this storage.

  • c_freed โ€” counter / info โ€” Bytes freed

Number of total bytes returned to this storage.

  • g_alloc โ€” gauge / info โ€” Allocations outstanding

Number of storage allocations outstanding.

  • g_bytes โ€” gauge / info โ€” Bytes outstanding

Number of bytes allocated from the storage.

  • g_space โ€” gauge / info โ€” Bytes available

Number of bytes left in the storage.

  • g_smf โ€” gauge / info โ€” N struct smf
  • g_smf_frag โ€” gauge / info โ€” N small free smf
  • g_smf_large โ€” gauge / info โ€” N large free smf

๐Ÿง  SMU โ€“ UMEM STEVEDORE COUNTERS

  • c_req โ€” counter / info โ€” Allocator requests

Number of times the storage has been asked to provide a storage segment.

  • c_fail โ€” counter / info โ€” Allocator failures

Number of times the storage has failed to provide a storage segment.

  • c_bytes โ€” counter / info โ€” Bytes allocated

Number of total bytes allocated by this storage.

  • c_freed โ€” counter / info โ€” Bytes freed

Number of total bytes returned to this storage.

  • g_alloc โ€” gauge / info โ€” Allocations outstanding

Number of storage allocations outstanding.

  • g_bytes โ€” gauge / info โ€” Bytes outstanding

Number of bytes allocated from the storage.

  • g_space โ€” gauge / info โ€” Bytes available

Number of bytes left in the storage.


๐ŸŒˆ VBE โ€“ BACKEND COUNTERS

  • happy โ€” bitmap / info โ€” Happy health probes

Represents the last probe results as a bitmap. Happy probes are bits set to 1, and the unhappy ones are set to 0. The highest bits represent the oldest probes. ๐ŸŒธ

  • bereq_hdrbytes โ€” counter / info โ€” Request header bytes

Total backend request header bytes sent

  • bereq_bodybytes โ€” counter / info โ€” Request body bytes

Total backend request body bytes sent

  • beresp_hdrbytes โ€” counter / info โ€” Response header bytes

Total backend response header bytes received

  • beresp_bodybytes โ€” counter / info โ€” Response body bytes

Total backend response body bytes received

  • pipe_hdrbytes โ€” counter / info โ€” Pipe request header bytes

Total request bytes sent for piped sessions

  • pipe_out โ€” counter / info โ€” Piped bytes to backend

Total number of bytes forwarded to backend in pipe sessions

  • pipe_in โ€” counter / info โ€” Piped bytes from backend

Total number of bytes forwarded from backend in pipe sessions

  • conn โ€” gauge / info โ€” Concurrent connections used

The number of currently used connections to the backend. This number is always less or equal to the number of connections to the backend (as, for example shown as ESTABLISHED for TCP connections in netstat) due to connection pooling.

  • req โ€” counter / info โ€” Backend requests sent
  • unhealthy โ€” counter / info โ€” Fetches not attempted due to backend being unhealthy
  • busy โ€” counter / info โ€” Fetches not attempted due to backend being busy

Number of times the max_connections limit was reached

  • fail โ€” counter / info โ€” Connections failed

Counter of failed opens. Detailed reasons are given in the fail_* counters (DIAG level) and in the log under the FetchError tag.

This counter is the sum of all detailed fail_* counters.

All fail_* counters may be slightly inaccurate for efficiency.

  • fail_eacces โ€” counter / diag โ€” Connections failed with EACCES or EPERM
  • fail_eaddrnotavail โ€” counter / diag โ€” Connections failed with EADDRNOTAVAIL
  • fail_econnrefused โ€” counter / diag โ€” Connections failed with ECONNREFUSED
  • fail_enetunreach โ€” counter / diag โ€” Connections failed with ENETUNREACH
  • fail_etimedout โ€” counter / diag โ€” Connections failed ETIMEDOUT
  • fail_other โ€” counter / diag โ€” Connections failed for other reason
  • helddown โ€” counter / diag โ€” Connection opens not attempted

Connections not attempted during the backend_local_error_holddown or backend_remote_error_holddown interval after a fundamental connection issue. ๐Ÿ˜ญ


๐ŸŠ VCP โ€“ CONNECTION POOL COUNTERS

  • ref_hit โ€” counter / debug โ€” Number of times we have found an existing conn. pool

Number of times we have found an existing connection pool while creating a backend. ๐ŸŽฏ

  • ref_miss โ€” counter / debug โ€” Number of times we have not found an existing conn. pool

Number of times we have not found an existing connection pool while creating a backend. ๐Ÿ™ˆ


๐Ÿช‘ WAITER โ€“ WAITER COUNTERS

  • conns โ€” gauge / debug โ€” Number of idle connections

Number of idle connections being waited over.

  • remclose โ€” counter / debug โ€” Number of idle connections closed by peer

Number of idle connections that experienced closure by peer while being waited for.

  • timeout โ€” counter / debug โ€” Number of idle connections timeout

Number of idle connections that experienced a timeout event while being waited for.

  • action โ€” counter / debug โ€” Number of idle connections read events

Number of idle connections that experienced a read event while being waited for. ๐Ÿ‘‘


๐Ÿ’Œ AUTHORS

This man page was written by Lasse Karstensen, using content from vsc2rst written by Tollef Fog Heen.


and that's a WRAP bestie ๐ŸŽ€ you just read the whole of VARNISH-COUNTERS(7), source and version and date footer included โ€” go forth and read your counters like the main character you are ๐Ÿ’…โœจ

๐Ÿ“ฆ where this page comes from
  • fedora 44: varnish 8.0.2-1.fc44 ยท BSD-2-Clause AND (BSD-2-Clause-FreeBSD AND BSD-3-Clause AND LicenseRef-Fedora-Public-Domain AND Zlib)
  • fedora 44: varnish 8.0.2-1.fc44 ยท BSD-2-Clause AND (BSD-2-Clause-FreeBSD AND BSD-3-Clause AND LicenseRef-Fedora-Public-Domain AND Zlib)
  • ๐Ÿ“œ the page's license: BSD-2-Clause
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms