This release features a complete overhaul of the Kubernetes Audit Log parser. This significantly improves the visualization accuracy of resource state changes, specifically enabling more precise tracking of Pod behavior on Nodes and resource deletion flows. It also includes UX improvements for the New Inspection dialog.
🚀 Key Changes
Revamped Kubernetes Audit Log ParserThe Kubernetes Audit Log parsing logic has been completely rewritten, introducing the following enhancements:
- Replaced
bindwithpodpseudo-subresources under Node resources
Previously, KHI displayedbindsubresources under Node resources to represent scheduling events. This has been replaced with newpodpseudo-subresources. This change allows you to view a detailed timeline directly from the Node's perspective, visualizing not just the scheduling timing, but also when a Pod became Running, when containers terminated, and if errors occurred.
- Enhanced Container ID correlation using Pod Status
The logic for correlating Container IDs incontainerdlogs with Pods has been improved. In addition to the existing method using container startup logs, KHI now utilizes Container IDs found in thestatusfield of Pod resources within Audit Logs. This enables automatic and accurate correlation of container logs to Pods even if the specific container startup logs are outside the query range, provided the Audit Log contains the Container ID. - Support for
metadata.uidin Control Plane logs
KHI now generates a resource UID mapping during Audit Log parsing. This allows Control Plane logs that only containmetadata.uid(without resource names) to be correctly mapped to the corresponding resource timeline. - Strict distinction of Condition statuses
The visualization ofstatus.conditionsnow explicitly distinguishes between three states: "Unknown" (explicitly set to Unknown), "Condition does not exist", and "Insufficient log data to determine". This allows users to instantly determine whether the state is due to data loss or an actual Unknown state.
- Visualization of deletion flow considering Finalizers
KHI now recognizesfinalizersin the resource deletion process. When a DELETE request is issued, if finalizers are present, the resource is no longer treated as immediately "Deleted". Instead, it is displayed as "Terminating" until the finalizers are removed.
UI/UX Improvements
- Time-aware cluster name suggestion (Cloud Monitoring Label)
The cluster name autocomplete behavior in the New Inspection dialog has been changed. The previous method of fetching the "current cluster list" via API has been removed. Instead, KHI now uses Cloud Monitoring labels to suggest only **clusters that actually existed during the inputEnd timeandDuration**. This ensures deleted clusters are suggested if they existed during the specified timeframe.
🐛 Bug Fixes
- Fixed subresource deletion tracking
Fixed an issue where subresources were not correctly recognized as deleted when their parent resource was deleted. - Fixed
DeleteCollectionstate restoration
Fixed an issue where the manifest state was not correctly restored when multiple resources were bulk deleted viaDeleteCollectionAPI requests (e.g., during Namespace deletion).
What's Changed
Features 🚀
- Update the legacy kubernetes audit log parser with the new base task types by @kyasbal in #399
- Add CloudTrace support to investigate heavy tasks by @kyasbal in #371
- fix: Condition "Unknown" was shown for the condition without containing the status body by @kyasbal in #408
- use Cloud Monitoring for cluster autocomplete by @kyasbal in #413
- Fix/partial condition complement by @kyasbal in #409
Bug fix 🐛
- Fix concurrent map access on the processContainerIDDiscoveryForLog by @kyasbal in #400
- feat: Dynamically generate Cloud Logging resource name input forms based on active tasks in the task graph. by @kyasbal in #374
- bug: fix leaked channel by @kyasbal in #401
Other Changes 🛠
- Adding a Make target to build single-binary build artifacts for multiple environments by @kyasbal in #370
- Updated GEMINI.md by @kyasbal in #407
- Use xx-version-file to specify compiler/runtime version on release Github Action script by @kyasbal in #410
- refactor(core): rename taskbase types and files for clarity by @kyasbal in #414
- feat(inspection): add progress reporting to manifest generator task by @kyasbal in #415
Dependencies ⏫
- Bump golang.org/x/crypto from 0.42.0 to 0.45.0 by @dependabot[bot] in #372
- Bump js-yaml from 4.1.0 to 4.1.1 in /web by @dependabot[bot] in #369
- Bump node-forge from 1.3.1 to 1.3.2 in /web by @dependabot[bot] in #381
- Added a new GitHub Action to build binaries and attach it to the draft release by @kyasbal in #402
- Updated Go dependency by @kyasbal in #404
- Bump @angular/compiler from 20.0.4 to 20.3.15 in /web by @dependabot[bot] in #385
- Updated go version from 1.24 to 1.25 by @kyasbal in #405
To use this version, you can run the following command:
$ docker run -p 127.0.0.1:8080:8080 gcr.io/kubernetes-history-inspector/release:v0.50.0Or you can use latest tag until we release the next release.
Full Changelog: v0.49.1...v0.50.0