Skip to content

2.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 23 Oct 08:21
· 18 commits to master since this release

Highlights

  • Time-based authorize on an entrypoint. GET /authorize mints an HMAC-SHA256 code for the current time bucket (period). Delivery is set cookie (default), header, or json. Clients send it back with validate cookie or validate header. bind remote_addr, bind header,
    and bind cookie mix the client into the HMAC (up to 8 binds). satisfy any|all combines this secret with static auth. See doc/entrypoint.md.
  • Per-route HTTP limits. limit { path /authorize; rps N; key remote_addr|header|cookie } returns 429 with Retry-After. Listener threads share one table. A limit block that cannot be installed fails the entrypoint closed (500).
  • metric_filter on entrypoint and aggregate ingest (include / exclude / include_label / exclude_label, strict or PCRE), before add_label and metricstransform. The legacy reject keyword is ignored with a warning; move those rules to exclude_label.
  • Pushgateway. Delimited io.prometheus.client.MetricFamily protobuf (application/vnd.google.protobuf or application/x-protobuf, encoding=delimited) is converted to the text ingest path. COUNTER, GAUGE, UNTYPED, SUMMARY, and HISTOGRAM are accepted. encoding=text
    and compact-text return 415. DELETE /metrics/job/<job>[/<label>/<value>...] returns 202 and deletes every series in that namespace that carries all of the URL grouping labels.
  • OTLP/gRPC export. serializer otlp_grpc sends unary MetricsService/Export over HTTP/2. Use https:// so the handshake offers ALPN h2. Metrics only: no gzip, no connection pool (one connection per export), framed payload must be at most 65535 bytes.
  • gRPC health checks. prober grpc and blackbox grpc:// / grpcs:// call grpc.health.v1.Health/Check. probe_success is 1 only when grpc-status is 0 and the health status is SERVING. Optional service= selects one service. New series: probe_grpc_status_code,
    probe_grpc_healthcheck_response, probe_grpc_ssl.
  • Elasticsearch log sink mTLS. log_channel https:// destinations accept tls_certificate, tls_key, tls_ca, and tls_verify.
  • Receiving metrics. Walkthrough for StatsD, Graphite, blackbox, cluster, auth, and ingest filters: doc/metric-receive.md.
  • alligator_dns_resolution_status records 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 counters disk_io_bytes_total{dev,op} and disk_io_transfers_total{dev,op} (op is read, write, free, or discard).
  • disk_busy is disk_busy_seconds_total. cpu_usage_core_time is cpu_usage_core_seconds_total. Inside a cgroup, host /proc/stat time is cpu_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_seconds and alligator_push_{parsing,metrictree,split}_duration_seconds replace the microsecond and nanosecond gauges.
  • macOS and FreeBSD no longer emit memory_usage_hw. Linux still exports host memory as memory_usage_hw_bytes. FreeBSD keeps swap_device_bytes.
  • Pushgateway DELETE is a label-selector delete. DELETE /metrics/job/x also removes series pushed as /metrics/job/x/instance/y, and any series that already has job="x". Upstream Pushgateway deletes only the exact grouping key.
  • Entrypoint reject no 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_status is set for the attempt.
  • A TLS entrypoint whose certificate or key file does not exist no longer crashes during startup.
  • POST paths are matched against the full /conf prefix. A path starting with /con no 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 on json_decref).
  • MySQL row parsing bounds-checks every column length, treats 0xFB as 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_http reconnect 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 system collectors, were corrected alongside the metric-name work.