VictoriaMetrics Observability Blog

Filter: Phuong Le

How Swiss Tables Work in Go’s Built-in Map

Go 1.24 replaced the built-in map’s bucket-based runtime with Swiss Tables. This article explains groups, control bytes, H1 and H2, probing, table growth, directories, deletion, load factor, and the experimental split-group layout.

Understanding Go's sync.Map from API to Hash Trie

Go’s sync.Map now uses a hash trie. This article builds the implementation from a normal map, then explains lock-free reads, fine-grained writer locking, collisions, retries, deletion, Clear, Range, and the trade-offs against map plus RWMutex.

How VictoriaLogs Stores Your Logs in a Columnar Layout

A beginner-friendly tour of how VictoriaLogs stores your logs on disk: streams and daily partitions, immutable parts, blocks and columns, and the files inside a part (timestamps, values, bloom filters, column headers, and the two-level index) that let a query read only the bytes it needs.

VictoriaLogs Basics: What You Need to Know, with Examples & Visuals

Cluster mode in VictoriaLogs is not a separate build. It is the same victoria-logs binary started with different flags, so you can scale out without a migration step. Storage nodes persist data on disk, while gateway nodes can stay stateless by pointing to storage with -storageNode. It also ships with practical safety switches, like read-only protection when -storageDataPath runs low and optional partial results when a storage node is down.

VictoriaLogs Practical Ingestion Guide for Message, Time and Streams

VictoriaLogs uses three core concepts: message, time, and stream fields to structure log data. Too few streams create fat streams that are slow to query, while too many unique stream combinations create high cardinality problems…

Monotonic and Wall Clock Time in the Go time package

Operating systems expose a wall clock that can leap or slew with NTP and a monotonic clock that never runs backward. In Go, only time.Now (might) carries both readings, while values from time.Parse, time.Date, etc., are wall-clock-only—so naïve equality checks or time.Since on those can mislead when the system clock shifts.

vmagent: Key Features Explained in Under 15 Minutes

vmagent is a lightweight agent for collecting and forwarding metrics to remote storage. It supports relabeling, sharding, replication, aggregation, deduplication, and disk buffering to ensure reliable and efficient metric delivery.

Go synctest: Solving Flaky Tests

Traditional concurrent Go tests can be flaky due to non-deterministic scheduler behavior and timing. Go 1.24’s experimental synctest feature provides deterministic testing by running goroutines in isolated ‘bubbles’ where a synthetic clock only advances when all internally managed goroutines are durably blocked.

VictoriaMetrics Components: Getting Started

VictoriaMetrics is a fast, scalable monitoring system made of modular components like vminsert, vmstorage, and vmselect. It supports both single-node and clustered setups, along with tools for backup, restore, alerting, access control, and data migration. Data can be ingested, stored, queried, backed up, and restored with high performance and minimal resource use.

Graceful Shutdown in Go: Practical Patterns

Go applications can implement graceful shutdown by handling termination signals (SIGTERM, SIGINT) via os/signal or signal.NotifyContext. Shutdown must complete within a specified timeout (e.g., Kubernetes’ terminationGracePeriodSeconds)…