161 lines
7.1 KiB
Plaintext
161 lines
7.1 KiB
Plaintext
nginx-ipng-stats-plugin (0.8.2-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.8.2.
|
|
- New per (source_tag, vip) in-flight gauges:
|
|
nginx_ipng_active, nginx_ipng_reading, nginx_ipng_writing.
|
|
Lifecycle: POST_READ handler increments active+reading
|
|
on each main request, a header filter transitions
|
|
reading->writing when headers are sent, and a pool
|
|
cleanup decrements on request finalization. Gauges live
|
|
in a dedicated rbtree in the shared zone; the slab mutex
|
|
is taken only on first insert per (source, vip) pair —
|
|
subsequent transitions are lock-free atomic inc/dec on
|
|
the cached node. Subrequests and internal redirects do
|
|
not double-count. Gauges are emitted in both Prometheus
|
|
(`gauge` typed) and JSON (`"gauges":{...}` per record)
|
|
scrape outputs. Invariant: reading + writing = active.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Thu, 23 Apr 2026 12:00:00 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.8.1-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.8.1.
|
|
- Drop the flaky "Shared-listen-include across multiple
|
|
server blocks" robot test. It asserted that nginx's NOTICE
|
|
log line "ipng_stats: stripped socket options from
|
|
duplicate listen" appeared on stderr of `nginx -t 2>&1`,
|
|
but the NOTICE lands in the configured error_log
|
|
destination (which the lab routes into docker's log stream)
|
|
rather than the subprocess's stderr. The stripping
|
|
behaviour itself still works — it's just not observable
|
|
from `nginx -t` output in this harness.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Wed, 22 Apr 2026 10:10:00 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.8.0-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.8.0.
|
|
- Log handler now accounts for request bodies that nginx
|
|
discarded before any handler could read them (rate-limit
|
|
403, auth_request denial, 413 on fixed Content-Length,
|
|
early `return 4xx;` on POST). Those paths route through
|
|
ngx_http_discard_request_body / HTTP/2 skip_data, both of
|
|
which drop bytes without touching r->request_length —
|
|
leaving nginx_ipng_bytes_in_total blind to most of the
|
|
wire on rate-limited POST-heavy workloads (observed ~20x
|
|
gap against btop on a CT-log-style box). When
|
|
r->discard_body is set and the client advertised a
|
|
Content-Length, we now add content_length_n to bin_sz.
|
|
Normal 200-OK POSTs are unchanged. See docs/nginx-issues.md
|
|
for the full analysis of which nginx paths update
|
|
r->request_length and which don't.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Wed, 22 Apr 2026 09:59:53 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.7.2-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.7.2.
|
|
- Listen wrapper now strips socket-level options (reuseport,
|
|
bind, backlog=, rcvbuf=, sndbuf=, setfib=, fastopen=,
|
|
accept_filter=, deferred, ipv6only=, so_keepalive=) from
|
|
cf->args when a sockaddr recurs under a different server
|
|
block. Previously this pattern — typical with a shared
|
|
`include listens.conf;` across vhosts — tripped nginx's
|
|
"duplicate listen options for <addr>" check because those
|
|
options are one-shot per kernel socket. The first cscf now
|
|
owns the options on the shared kernel socket and later
|
|
cscfs merge cleanly via ngx_http_add_server. A NOTICE is
|
|
logged each time socket options are stripped. This makes
|
|
`reuseport` usable with the shared-include deployment
|
|
pattern from docs/user-guide.md, which helps worker
|
|
load-balancing on busy hosts.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Sun, 19 Apr 2026 16:30:00 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.7.1-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.7.1.
|
|
- Listen wrapper now deduplicates on (server block, sockaddr)
|
|
across both plain and device-tagged listens. A plain
|
|
`listen 80;` and `listen 80 device=eth0 ...;` in the same
|
|
server block now coexist, matching the runtime reality under
|
|
the IP_PKTINFO attribution model (all same-sockaddr listens
|
|
collapse to one wildcard kernel socket). Docs updated to
|
|
drop the "must be device-tagged" restriction.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Sun, 19 Apr 2026 10:00:00 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.7.0-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.7.0.
|
|
- New ipng_stats_rescan_interval directive (default 60s, 0 to
|
|
disable). Per-worker timer that re-resolves every device= →
|
|
ifindex mapping, self-healing attribution after interface
|
|
teardown/recreate without requiring nginx -s reload.
|
|
- New nginx_ipng_ifindex_misses_total counter: connections whose
|
|
ingress ifindex didn't match any configured binding. Surfaces
|
|
stale mappings and genuinely-unconfigured interfaces.
|
|
- Expose the existing nginx_ipng_zone_full_events_total and
|
|
nginx_ipng_flushes_total meta counters in both the Prometheus
|
|
and JSON scrape outputs. JSON gains a top-level "meta" object
|
|
alongside "records" (schema unchanged, additive).
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Sat, 18 Apr 2026 19:36:36 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.6.0-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.6.0.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Sat, 18 Apr 2026 15:30:40 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.5.0-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.5.0.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Sat, 18 Apr 2026 14:38:25 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.4.0-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.4.0.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Sat, 18 Apr 2026 13:15:15 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.3.0-1) unstable; urgency=medium
|
|
|
|
* Pre-release v0.3.0.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Sat, 18 Apr 2026 11:47:26 +0200
|
|
|
|
nginx-ipng-stats-plugin (0.2.0-1) unstable; urgency=medium
|
|
|
|
* Reduce scrape cardinality.
|
|
- Status codes are collapsed to six class lanes
|
|
(1xx/2xx/3xx/4xx/5xx/unknown) on the counter key. Per-(source, vip)
|
|
counter cardinality is now bounded at six regardless of response mix.
|
|
- Histograms drop the code label entirely and aggregate across classes
|
|
per (source, vip).
|
|
- New nginx_ipng_latency_total counter (with code class label) exposes
|
|
per-class mean latency via latency_total / requests_total.
|
|
- New nginx_ipng_bytes_in and nginx_ipng_bytes_out histograms; bucket
|
|
bounds configurable via the new ipng_stats_byte_buckets directive.
|
|
- JSON schema bumped to 2. Records are now per-(source, vip) with an
|
|
inner `classes` map.
|
|
- Operators needing per-three-digit-code breakdowns should consume
|
|
ipng_stats_logtail off-host; the stats zone intentionally trades
|
|
that resolution for a smaller, bounded scrape.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Fri, 17 Apr 2026 12:36:57 +0000
|
|
|
|
nginx-ipng-stats-plugin (0.1.0-1) unstable; urgency=medium
|
|
|
|
* Initial release.
|
|
- ngx_http_ipng_stats_module: per-VIP, per-device HTTP traffic
|
|
counters, attributed via SO_BINDTODEVICE on per-interface
|
|
listening sockets, exposed as Prometheus text and JSON from a
|
|
single scrape endpoint.
|
|
- Debian package libnginx-mod-http-ipng-stats builds against the
|
|
target release's nginx-dev headers with --with-compat and loads
|
|
into stock upstream nginx without recompiling nginx itself.
|
|
|
|
-- Pim van Pelt <pim@ipng.ch> Thu, 16 Apr 2026 00:00:00 +0000
|