chart-v0.2.41 - deprecated, use chart-v0.2.42
Warning
Deprecated: do not use this release. chart-v0.2.41 was published without attestations (no Cosign signature, no SBOM attestation, no SLSA provenance) because of a transient GHCR failure in the helm-release workflow. Its OCI artifact has been removed from GHCR. The byte-identical chart was re-published, fully verifiable, as chart-v0.2.42.
Use chart-v0.2.42 instead.
What's new in chart-v0.2.41
This is a metadata-only chart bump: appVersion advances from 0.7.5 to 0.7.6, the default image.tag now resolves to ghcr.io/robintra/perf-sentinel:0.7.6, and the artifacthub.io/changes annotation gains a kind: changed block alongside the existing v0.7.4 kind: added and v0.7.5 kind: fixed blocks so Artifact Hub consumers see the full feature-addition / bug-fix / hardening narrative on the rendered card. No chart-level template diff, no values.yaml schema change, no new RBAC, no new optional ConfigMap or Secret. The chart-v0.2.40 template surface is preserved byte-for-byte.
The 0.7.6 daemon image hardens the Scaphandre and Redfish energy sources against silent over-attribution bugs of the v0.7.4 class, with two intentional config breaking changes (Scaphandre process_map and Redfish endpoints). Full release notes for the daemon at v0.7.6. Both sections become closed-shape typed structs that reject unknown TOML fields at config load, the cmdline-aware Scaphandre matcher disambiguates co-located JVMs and .NET runtimes that the v0.7.5 form could not, and a new EnvironmentMetrics schema variant for Redfish supports the modern DMTF Release 2020.4 resource alongside the legacy /Power one. None of this touches a chart-level template, a daemon HTTP route, a Prometheus metric label set the chart already exposes, or the OTLP listener wire format.
Changed
appVersionbumped from0.7.5to0.7.6, defaultimage.tagnow resolves toghcr.io/robintra/perf-sentinel:0.7.6.artifacthub.io/changesannotation extended with a third entry ofkind: changedcovering the two breaking config changes on Scaphandre and Redfish. The v0.7.4kind: addedand v0.7.5kind: fixedblocks are preserved so Hub viewers see all three releases.- No chart-level config change.
values.yaml, every template, theServiceMonitorrendering, theNetworkPolicyrendering, the optional[daemon.ack]and[daemon.cors]plumbing, and theack-toml-baselinemount are byte-for-byte identical to chart-v0.2.40.
Behavior
- Daemon binary side: Scaphandre matcher upgraded to cmdline-aware (BREAKING).
[green.scaphandre].process_mapis now a typed table per service withexe_containsplus an optionalcmdline_containssubstring, replacing the flat"service" = "exe"form. Substring containment on both labels disambiguates co-located JVMs and .NET runtimes that share a runtimeexesuch as/usr/lib/jvm/.../bin/java. The previous form did not work against real Scaphandre output because the exporter emitsexeas an absolute path and not a basename.#[serde(deny_unknown_fields)]on the new struct rejects typos at config load instead of silent over-attribution. - Daemon binary side: Redfish typed schema per endpoint (BREAKING).
[green.redfish].endpointsis now a typed table per chassis withurlplus aschemaenum (legacy_powerorenvironment_metrics), the top-levelpower_pathfield is removed.legacy_powerresolves the deprecated/PowerControl/0/PowerConsumedWatts,environment_metricsresolves the modern/PowerWatts/Readingintroduced by DMTF Release 2020.4. A mixed fleet declares both schemas, one per chassis. Both resolve to the same downstreamredfish_bmcmodel tag. - Daemon binary side: Scaphandre zero-sample warn-once net. After three consecutive HTTP-200 scrapes with zero parsed
ProcessPowerentries, the scraper emits a singletracing::warn!line that points at the most common causes (silent upstream rename of the metric or theexelabel, Scaphandre running with--no-procfs, host-only build with no per-process exposition). Mirrors the Kepler analogue delivered in v0.7.5. - Daemon binary side: Scaphandre staleness gauge climbs on failure.
perf_sentinel_scaphandre_last_scrape_age_secondsnow advances on every failure tick (was set to 0 only on success and frozen at the last good value otherwise). Parity withperf_sentinel_kepler_last_scrape_age_secondsfor Grafanarate(...)alerting. - Daemon binary side: stale top-level Redfish
power_pathrejected.[green.redfish] power_path = "..."at the section root (the pre-0.7.6 location) now fails at config load with a serde error.#[serde(deny_unknown_fields)]onRedfishSectionandRedfishEndpointblocks both the stale top-level field and typos. - No HTTP-shape change on the daemon side. Every
/api/*route, every/metricsline, the OTLP HTTP and gRPC routes, and every JSON shape are byte-for-byte identical to chart-v0.2.40 for already-clean inputs. - No upgrade hook required, no on-disk migration. The runtime ack store JSONL schema is unchanged, existing acks survive the upgrade. Operators not using
[green.scaphandre]nor[green.redfish]see no behavioral change at all.
Install
helm repo add perf-sentinel https://robintra.github.io/perf-sentinel
helm repo update
helm install perf-sentinel perf-sentinel/perf-sentinel --version 0.2.41Upgrade an existing release:
helm upgrade perf-sentinel perf-sentinel/perf-sentinel --version 0.2.41Operator action required only if you configured [green.scaphandre] or [green.redfish] in v0.7.5
Scaphandre. If your .perf-sentinel.toml contains a flat [green.scaphandre.process_map] table such as "order-svc" = "java", rewrite each entry as a typed table:
[green.scaphandre.process_map."order-svc"]
exe_contains = "bin/java"
cmdline_contains = "order-svc.jar"Substring containment on both labels. cmdline_contains is optional, omit it only when the process exe is already unique (typically a native binary, never a JVM or .NET runtime). Scaphandre emits cmdline as argv concatenated without separators, so the cmdline_contains substring should match the concatenated form (typically the jar or dll filename, not a POSIX command line with spaces). Operators on v0.7.5 with a flat process_map were already on the proxy fallback path because the v0.7.5 matcher did not work against the real Scaphandre output, so the rewrite they need to do to land on chart-v0.2.41 also lights up the scaphandre_rapl model tag for the first time.
Redfish. If your .perf-sentinel.toml contains a flat [green.redfish.endpoints] table such as "chassis-1" = "https://bmc/.../Power" and/or a top-level power_path, rewrite the section as one typed table per chassis:
[green.redfish.endpoints."chassis-1"]
url = "https://bmc/redfish/v1/Chassis/1/Power"
schema = "legacy_power"Pick legacy_power for the existing /Power BMCs (still mandatory on all firmware in 2026), environment_metrics for BMCs whose firmware documents the modern /Chassis/{id}/EnvironmentMetrics resource. A mixed fleet declares both schemas, one per chassis. The previous power_path knob is removed, OEM-specific JSON pointers (HPE's Oem.Hpe.PowerSummary.Watts and similar) are no longer configurable, OEMs that publish wattage at a non-standard path must front the BMC with a reverse proxy that re-shapes the payload.
If you did not configure [green.scaphandre] or [green.redfish] at all, no action is required.
Full Changelog: chart-v0.2.40...chart-v0.2.41