Skip to content

Commit ffcd86f

Browse files
committed
Add VMNonRecoverableOSPanic alert
Signed-off-by: avlitman <alitman@redhat.com>
1 parent 7c66468 commit ffcd86f

3 files changed

Lines changed: 55 additions & 1 deletion

File tree

hack/prom-rule-ci/observability-prom-rules-tests.yaml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,44 @@ tests:
446446
kubernetes_operator_part_of: "kubevirt"
447447
kubernetes_operator_component: "cnv-observability"
448448

449+
# VM non-recoverable OS panic
450+
- interval: 1m
451+
input_series:
452+
- series: 'kubevirt_vmi_guest_os_panic_total{namespace="test", name="vm-01", type="pvpanic", bugcheck_code="unknown"}'
453+
values: '0 0 1 1 1 1 1'
454+
455+
alert_rule_test:
456+
# No alert at 1m (no panics yet)
457+
- eval_time: 1m
458+
alertname: VMNonRecoverableOSPanic
459+
exp_alerts: []
460+
# Alert fires at 4m (1 panic detected, within 1-5 range)
461+
- eval_time: 4m
462+
alertname: VMNonRecoverableOSPanic
463+
exp_alerts:
464+
- exp_annotations:
465+
summary: "Non-recoverable guest OS panic detected on VM vm-01 in namespace test"
466+
description: "At least one non-recoverable guest OS panic has been detected on the VM in the last 24 hours (1 total)."
467+
runbook_url: "https://kubevirt.io/monitoring/runbooks/VMNonRecoverableOSPanic"
468+
exp_labels:
469+
severity: "warning"
470+
operator_health_impact: "none"
471+
kubernetes_operator_part_of: "kubevirt"
472+
kubernetes_operator_component: "kubevirt"
473+
namespace: "test"
474+
name: "vm-01"
475+
476+
# VM non-recoverable OS panic - should NOT fire above 5
477+
- interval: 1m
478+
input_series:
479+
- series: 'kubevirt_vmi_guest_os_panic_total{namespace="test", name="vm-02", type="pvpanic", bugcheck_code="unknown"}'
480+
values: '0 0 6 6 6 6 6'
481+
482+
alert_rule_test:
483+
- eval_time: 4m
484+
alertname: VMNonRecoverableOSPanic
485+
exp_alerts: []
486+
449487
- interval: 1m
450488
input_series:
451489
- series: 'kubevirt_hco_memory_overcommit_percentage'

pkg/monitoring/observability/rules/alerts/alerts.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ func Register(operatorRegistry *operatorrules.Registry) error {
2828
for _, alertGroup := range alerts {
2929
for _, alert := range alertGroup {
3030
alert.Labels["kubernetes_operator_part_of"] = "kubevirt"
31-
alert.Labels["kubernetes_operator_component"] = "cnv-observability"
31+
if _, ok := alert.Labels["kubernetes_operator_component"]; !ok {
32+
alert.Labels["kubernetes_operator_component"] = "cnv-observability"
33+
}
3234
if _, ok := alert.Annotations["runbook_url"]; !ok {
3335
alert.Annotations["runbook_url"] = fmt.Sprintf(runbookURLTemplate, alert.Alert)
3436
}

pkg/monitoring/observability/rules/alerts/cluster_alerts.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,20 @@ func clusterAlerts() []promv1.Rule {
118118
"operator_health_impact": "none",
119119
},
120120
},
121+
{
122+
Alert: "VMNonRecoverableOSPanic",
123+
Expr: intstr.FromString(`sum by (namespace, name) (increase(kubevirt_vmi_guest_os_panic_total[24h])) > 0 and sum by (namespace, name) (increase(kubevirt_vmi_guest_os_panic_total[24h])) <= 5`),
124+
For: ptr.To[promv1.Duration]("1m"),
125+
Annotations: map[string]string{
126+
"summary": "Non-recoverable guest OS panic detected on VM {{ $labels.name }} in namespace {{ $labels.namespace }}",
127+
"description": "At least one non-recoverable guest OS panic has been detected on the VM in the last 24 hours ({{ $value }} total).",
128+
},
129+
Labels: map[string]string{
130+
"severity": "warning",
131+
"operator_health_impact": "none",
132+
"kubernetes_operator_component": "kubevirt",
133+
},
134+
},
121135
{
122136
Alert: "DuplicateWaspAgentDSDetected",
123137
Expr: intstr.FromString(

0 commit comments

Comments
 (0)