Repository navigation
Highlights
- Time-based authorize on an entrypoint.
GET /authorizemints an HMAC-SHA256 code for the current time bucket (period). Delivery isset cookie(default),header, orjson. Clients send it back withvalidate cookieorvalidate header.bind remote_addr,bind header,
andbind cookiemix the client into the HMAC (up to 8 binds).satisfy any|allcombines this secret with staticauth. Seedoc/entrypoint.md. - Per-route HTTP limits.
limit { path /authorize; rps N; key remote_addr|header|cookie }returns429withRetry-After. Listener threads share one table. A limit block that cannot be installed fails the entrypoint closed (500). metric_filteron entrypoint and aggregate ingest (include/exclude/include_label/exclude_label, strict or PCRE), beforeadd_labelandmetricstransform. The legacyrejectkeyword is ignored with a warning; move those rules toexclude_label.- Pushgateway. Delimited
io.prometheus.client.MetricFamilyprotobuf (application/vnd.google.protobuforapplication/x-protobuf,encoding=delimited) is converted to the text ingest path.COUNTER,GAUGE,UNTYPED,SUMMARY, andHISTOGRAMare accepted.encoding=text
andcompact-textreturn415.DELETE /metrics/job/<job>[/<label>/<value>...]returns202and deletes every series in that namespace that carries all of the URL grouping labels. - OTLP/gRPC export.
serializer otlp_grpcsends unaryMetricsService/Exportover HTTP/2. Usehttps://so the handshake offers ALPNh2. Metrics only: no gzip, no connection pool (one connection per export), framed payload must be at most 65535 bytes. - gRPC health checks.
prober grpcandblackbox grpc:///grpcs://callgrpc.health.v1.Health/Check.probe_successis 1 only when grpc-status is 0 and the health status isSERVING. Optionalservice=selects one service. New series:probe_grpc_status_code,
probe_grpc_healthcheck_response,probe_grpc_ssl. - Elasticsearch log sink mTLS.
log_channelhttps://destinations accepttls_certificate,tls_key,tls_ca, andtls_verify. - Receiving metrics. Walkthrough for StatsD, Graphite, blackbox, cluster, auth, and ingest filters:
doc/metric-receive.md. alligator_dns_resolution_statusrecords whether a DNS lookup succeeded.
Breaking changes
Host system metrics now use Prometheus base units. Dashboards and recording rules that use the old names need to be updated.
disk_io{type="bytes_read"|...}is split into countersdisk_io_bytes_total{dev,op}anddisk_io_transfers_total{dev,op}(opisread,write,free, ordiscard).disk_busyisdisk_busy_seconds_total.cpu_usage_core_timeiscpu_usage_core_seconds_total. Inside a cgroup, host/proc/stattime iscpu_usage_hw_seconds_total.- Sizes are bytes:
disk_usage_bytes,disk_size_bytes,disk_unallocated_bytes,memory_usage_bytes,memory_usage_hw_bytes,memory_usage_cgroup_bytes,memory_module_size_bytes(this was kibibytes),btmp_file_size_bytes,process_memory_bytes{type="vsz"|"rss"}. process_uptime_seconds. Counters:vm_faults_total,io_faults_total,system_calls_total,vforks_total,rforks_total.alligator_gc_duration_secondsandalligator_push_{parsing,metrictree,split}_duration_secondsreplace the microsecond and nanosecond gauges.- macOS and FreeBSD no longer emit
memory_usage_hw. Linux still exports host memory asmemory_usage_hw_bytes. FreeBSD keepsswap_device_bytes. - Pushgateway
DELETEis a label-selector delete.DELETE /metrics/job/xalso removes series pushed as/metrics/job/x/instance/y, and any series that already hasjob="x". Upstream Pushgateway deletes only the exact grouping key. - Entrypoint
rejectno longer filters metrics.
System metrics
FreeBSD system{} now emits Linux-compatible series where the kernel has a source: disk_readonly, swap_device_bytes, cpufreq and cstates, arp and sockstat, page faults and vmap, task_states, vmstat_stat_total, and a base IRQ breakdown. With interrupts enabled,
hw.intrnames / hw.intrcnt export interrupts_by_irq_total. There is no per-CPU interrupts_core_count.
macOS gains the same class of series: disk_readonly, io_faults / vmstat_stat_total, file-descriptor, pipe, and socket counts, utmp/btmp, arp/sockstat, process page faults, task_states, and self rlimits. packages reads the Homebrew Cellar. interrupts is accepted and is a
no-op. mounts_num and sysctl counters that did not fit in a 32-bit DATATYPE_INT are widened.
Fixes
- A failed DNS lookup no longer leaks the oneshot.
alligator_dns_resolution_statusis set for the attempt. - A TLS entrypoint whose certificate or key file does not exist no longer crashes during startup.
POSTpaths are matched against the full/confprefix. A path starting with/conno longer enters the config router.- Worker slot readiness is published with release/acquire atomics, so a reader that sees the slot as ready also sees its mutex and async handle.
- etcd discovery no longer
free()s a jansson-owned string (heap corruption and a double free onjson_decref). - MySQL row parsing bounds-checks every column length, treats
0xFBas SQL NULL, and decodes 8-byte length-encoded integers. Beanstalkd tube names are capped before normalization. The label normalizer stops at the terminating NUL. - Timers are closed before the handle is pushed into the uv cache, so a freed timer cannot corrupt the loop.
log_httpreconnect and shutdown no longer race. Aerospike parsers are bounded. - The HPACK Huffman table (RFC 7541) used by HTTP/2 and OTLP/gRPC was incomplete. It is regenerated from the nghttp2 symbol table.
- macOS disk and memory collectors, and FreeBSD
systemcollectors, were corrected alongside the metric-name work.