From ac at sigsegv.uk Thu Dec 19 23:11:35 2024 From: ac at sigsegv.uk (Andrew Clayton) Date: Thu, 19 Dec 2024 23:11:35 +0000 Subject: Unit 1.34.0 released Message-ID: <20241219231135.049def67@kappa.digital-domain.net> Hi, NGINX Unit community, Christmas has come early! We are pleased to announce the release of NGINX Unit 1.34.0 This release is comprised of 59 non-merge commits from 8 people. This release can be found at Packages can be found from the Unit website Website announcement can be found at Unit 1.34.0 is a small end of year release, none the less it packs a couple of big ticket features; JSON formatted access logs and initial support for OpenTelemetry (OTEL). Last but not least a Perl language module fix for parsing certain scripts. JSON formatted access logs ========================== This release introduces the ability to specify a JSON format for access logs. When defining an access log you can specify 'format' as an object defining JSON field name/value pairs, e.g. { "access_log": { "path": "/tmp/access.log", "format": { "remote_addr": "$remote_addr", "time_local": "$time_local", "request_line": "$request_line", "status": "$status", "body_bytes_sent": "$body_bytes_sent", "header_referer": "$header_referer", "header_user_agent": "$header_user_agent" } } } The JSON *values* support being strings, variables and JavaScript. OpenTelemetry (OTEL) ==================== This release includes initial support for OpenTelemtry (OTEL) This support has been added via the OpenTelemetry Rust SDK and as such requires cargo/rust to build. An example configuration looks like { "listeners": { "[::1]:8080": { "pass": "routes" } }, "settings": { "telemetry": { "batch_size": 20, "endpoint": "http://example.com/v1/traces", "protocol": "http", "sampling_ratio": 1.0 } }, "routes": [ { "match": { "headers": { "accept": "*text/html*" } }, "action": { "share": "/usr/share/unit/welcome/welcome.html" } }, { "action": { "share": "/usr/share/unit/welcome/welcome.md" } } ] } 'endpoint' The endpoint for the OpenTelemetry (OTEL) Collector. This is required. It takes a URL to either a gRPC or HTTP endpoint. 'protocol' Determines the protocol used to communicate with the endpoint. This is required. Can be either "http" or "grpc". 'batch_size' Number of spans to cache before triggering a transaction with the configured endpoint. This is optional. This allows the user to cache up to N spans before the OpenTelemetry (OTEL) background thread sends spans over the network to the collector. Must be a positive integer. 'sampling_ratio' Percentage of requests to trace. This is optional. This allows the user to only trace anywhere from 0% to 100% of requests that hit Unit. In high throughput environments this percentage should be lower. This allows the user to save space in storing span data, and to collect request metrics like time to decode headers and whatnot without storing massive amounts of duplicate superfluous data. Must be a positive floating point number. This support is disabled by default but can be enabled by passing --otel to ./configure. Changes ======= * The Perl language module no longer adds a 'new' constructor to parsed scripts. It's not required and could interfere with scripts that were trying to use 'new' themselves... Developers ========== * -funsigned-char We now compile Unit with -funsigned-char, this ensures we are using the same char type on all platforms (what you get by default varies by platform). This is also a first step in getting rid of (mostly at least) our usage of u_char and using char instead, which better aligns with libc interfaces etc. ======================================================================== Changes with Unit 1.34.0 19 Dec 2024 *) Feature: initial OpenTelemetry (OTEL) support. (Disabled by default). *) Feature: support for JSON formatted access logs. *) Bugfix: tweak the Perl language module to avoid breaking scripts in some circumstances. ------------------------------------------------------------------------ Changes since 1.33.0 are as follows: Alejandro Colomar (1): Use nxt_nitems() instead of sizeof() for strings (arrays) Andrew Clayton (29): docs/unit-openapi.yaml: Update version for 1.33.0 Version bump Compile with -funsigned-char Resolve unused assignment in nxt_term_parse() src/test: Add an extra test case to nxt_term_parse_test.c Re-work nxt_process_check_pid_status() slightly ci: Fix disabling of the mono-xsp4.service ci: Install pytest via apt(8) ci: Drop PHP 8.1 from our tests perl: Remove unused module constructor Some more variable constification src/test: Fix missing parameter to nxt_log_alert() in nxt_base64_test() ci: Add a clang-ast workflow auto: Remove unused pthread spinlock checks wasm-wc: Update to wasmtime v26.0.1 Decast nxt_cpymem() ci: Build with --otel on dev distros otel: Disable static_mut_refs warning for nxt_otel_rs_span_tx() auto/otel: Remove pkg-config check wasm-wc: Update to wasmtime 27.0.0 otel: Update crates tools/unitctl: Update crates wasm-wc: Update crates .mailmap: Add an entry for Igor tools/unitctl: Update for version 1.34.0 docs/unit-openapi.yaml: Update version for 1.34.0 pkg/docker: Update dockerfiles for 1.34.0 docs/changes.xml: Add 1.34.0 changelog entries Add 1.34.0 CHANGES Ava Hahn (7): tools/unitctl: use hyper-rustls instead of hyper-tls tools/unitctl: bump bollard and clarify docker client error otel: add opentelemetry rust crate code otel: add build tooling to include otel code otel: add header parsing and test call state otel: configuration items and their validation docs/openapi: update OpenAPI references Gabor Javorszky (1): .editorconfig: fix bracket balance of editorconfig file Igor Ippolitov (1): Docker: renamed branch to fetch from after successfull hg->git migration Konstantin Pavlov (8): Docker: update Python and PHP versions Packages: support rpm 4.20+ Packages: add Fedora 41 support contrib: update njs to 0.8.8 contrib: update wasmtime to 27.0.0 Packages: enable otel support Docker: enable otel and fix build with wasmtime 24+ Docker: update Rust version Sergey A. Osokin (3): java: Update third-party components to their recent versions wasm: Fix build with wasmtime 27.0.0 java: update third-party components to their recent versions Zhidao HONG (7): Add flag for newline control in access log entries Fix missing newlines in access logs for JS configuration Make nxt_tstr_is_js() macro public in header http: Refactor format field in nxt_router_access_log_conf_t http: Introduce nxt_router_access_log_format_t structure http: Support JSON format in access log tests: Add tests for JSON format access log dependabot[bot] (2): wasm-wc: Bump the wasmtime crate from 24.0.0 to 24.0.1 tools/unitctl: bump anstream from 0.6.5 to 0.6.15