Skip to content

chart-v0.2.41 - deprecated, use chart-v0.2.42

Choose a tag to compare

@robintra robintra released this 23 May 16:33

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

  • appVersion bumped from 0.7.5 to 0.7.6, default image.tag now resolves to ghcr.io/robintra/perf-sentinel:0.7.6.
  • artifacthub.io/changes annotation extended with a third entry of kind: changed covering the two breaking config changes on Scaphandre and Redfish. The v0.7.4 kind: added and v0.7.5 kind: fixed blocks are preserved so Hub viewers see all three releases.
  • No chart-level config change. values.yaml, every template, the ServiceMonitor rendering, the NetworkPolicy rendering, the optional [daemon.ack] and [daemon.cors] plumbing, and the ack-toml-baseline mount are byte-for-byte identical to chart-v0.2.40.

Behavior

  • Daemon binary side: Scaphandre matcher upgraded to cmdline-aware (BREAKING). [green.scaphandre].process_map is now a typed table per service with exe_contains plus an optional cmdline_contains substring, replacing the flat "service" = "exe" form. Substring containment on both labels disambiguates co-located JVMs and .NET runtimes that share a runtime exe such as /usr/lib/jvm/.../bin/java. The previous form did not work against real Scaphandre output because the exporter emits exe as 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].endpoints is now a typed table per chassis with url plus a schema enum (legacy_power or environment_metrics), the top-level power_path field is removed. legacy_power resolves the deprecated /PowerControl/0/PowerConsumedWatts, environment_metrics resolves the modern /PowerWatts/Reading introduced by DMTF Release 2020.4. A mixed fleet declares both schemas, one per chassis. Both resolve to the same downstream redfish_bmc model tag.
  • Daemon binary side: Scaphandre zero-sample warn-once net. After three consecutive HTTP-200 scrapes with zero parsed ProcessPower entries, the scraper emits a single tracing::warn! line that points at the most common causes (silent upstream rename of the metric or the exe label, 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_seconds now advances on every failure tick (was set to 0 only on success and frozen at the last good value otherwise). Parity with perf_sentinel_kepler_last_scrape_age_seconds for Grafana rate(...) alerting.
  • Daemon binary side: stale top-level Redfish power_path rejected. [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)] on RedfishSection and RedfishEndpoint blocks both the stale top-level field and typos.
  • No HTTP-shape change on the daemon side. Every /api/* route, every /metrics line, 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.41

Upgrade an existing release:

helm upgrade perf-sentinel perf-sentinel/perf-sentinel --version 0.2.41

Operator 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