diff --git a/cmd/collectors/rest/plugins/health/health.go b/cmd/collectors/rest/plugins/health/health.go index 6fe7fa65a..9607687d2 100644 --- a/cmd/collectors/rest/plugins/health/health.go +++ b/cmd/collectors/rest/plugins/health/health.go @@ -40,6 +40,8 @@ type Health struct { client *rest.Client data map[string]*matrix.Matrix lastFilterTime int64 + previousData map[string]*matrix.Matrix + resolutionData map[string]*matrix.Matrix } func New(p *plugin.AbstractPlugin) plugin.Plugin { @@ -58,7 +60,7 @@ func (h *Health) Init() error { return err } - if err := h.initAllMatrix(); err != nil { + if err := h.InitAllMatrix(); err != nil { return err } @@ -70,26 +72,30 @@ func (h *Health) Init() error { return h.client.Init(5) } -func (h *Health) initAllMatrix() error { +func (h *Health) InitAllMatrix() error { h.data = make(map[string]*matrix.Matrix) + h.resolutionData = make(map[string]*matrix.Matrix) mats := []string{diskHealthMatrix, shelfHealthMatrix, supportHealthMatrix, nodeHealthMatrix, networkEthernetPortHealthMatrix, networkFCPortHealthMatrix, lifHealthMatrix, volumeRansomwareHealthMatrix, volumeMoveHealthMatrix, licenseHealthMatrix, haHealthMatrix} for _, m := range mats { - if err := h.initMatrix(m); err != nil { + if err := h.initMatrix(m, "", h.data); err != nil { + return err + } + if err := h.initMatrix(m, "Resolution", h.resolutionData); err != nil { return err } } return nil } -func (h *Health) initMatrix(name string) error { - h.data[name] = matrix.New(h.Parent+name, name, name) +func (h *Health) initMatrix(name string, prefix string, inputMat map[string]*matrix.Matrix) error { + inputMat[name] = matrix.New(h.Parent+name+prefix, name, name) for _, v1 := range h.data { v1.SetExportOptions(matrix.DefaultExportOptions()) } for _, k := range metrics { - err := matrix.CreateMetric(k, h.data[name]) + err := matrix.CreateMetric(k, inputMat[name]) if err != nil { h.Logger.Warn().Err(err).Str("key", k).Msg("error while creating metric") return err @@ -124,7 +130,7 @@ func (h *Health) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matrix, *util // Purge and reset data // remove all metrics as analytics label may change over time - err = h.initAllMatrix() + err = h.InitAllMatrix() if err != nil { h.Logger.Warn().Err(err).Msg("error while init matrix") return nil, nil, err @@ -132,6 +138,7 @@ func (h *Health) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matrix, *util for k := range h.data { // Set all global labels if already not exist h.data[k].SetGlobalLabels(data.GetGlobalLabels()) + h.resolutionData[k].SetGlobalLabels(data.GetGlobalLabels()) } h.collectDiskAlerts() @@ -146,11 +153,24 @@ func (h *Health) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matrix, *util h.collectVolumeMoveAlerts() h.collectLicenseAlerts() + h.generateResolutionMetrics() + result := make([]*matrix.Matrix, 0, len(h.data)) for _, value := range h.data { result = append(result, value) } + + resolutionInstancesCount := 0 + for _, value := range h.resolutionData { + result = append(result, value) + resolutionInstancesCount += len(value.GetInstances()) + } + + if resolutionInstancesCount > 0 { + h.Logger.Info().Int("instances", resolutionInstancesCount). + Msg("Collected Resolution metrics") + } return result, h.client.Metadata, nil } @@ -183,7 +203,7 @@ func (h *Health) collectLicenseAlerts() { instance.SetLabel("state", state) instance.SetLabel(severityLabel, string(errr)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -217,7 +237,7 @@ func (h *Health) collectVolumeMoveAlerts() { instance.SetLabel("volume", volume) instance.SetLabel(severityLabel, string(warning)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -269,7 +289,7 @@ func (h *Health) collectVolumeRansomwareAlerts() { instance.SetLabel("volume", volume) instance.SetLabel(severityLabel, string(errr)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -302,7 +322,7 @@ func (h *Health) collectNetworkInterfacesAlerts() { instance.SetLabel("lif", lif) instance.SetLabel(severityLabel, string(warning)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -335,7 +355,7 @@ func (h *Health) collectNetworkFCPortAlerts() { instance.SetLabel("port", port) instance.SetLabel(severityLabel, string(errr)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -370,7 +390,7 @@ func (h *Health) collectNetworkEthernetPortAlerts() { instance.SetLabel("type", portType) instance.SetLabel(severityLabel, string(errr)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -400,7 +420,7 @@ func (h *Health) collectNodeAlerts() { instance.SetLabel("healthy", "false") instance.SetLabel(severityLabel, string(errr)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -440,7 +460,7 @@ func (h *Health) collectHAAlerts() { instance.SetLabel("partner_state", partnerState) instance.SetLabel(severityLabel, string(errr)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -480,7 +500,7 @@ func (h *Health) collectShelfAlerts() { instance.SetLabel(severityLabel, string(warning)) } - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } } @@ -528,7 +548,7 @@ func (h *Health) collectSupportAlerts() { instance.SetLabel("correctiveAction", correctiveAction) instance.SetLabel(severityLabel, string(warning)) - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } // update lastFilterTime to current cluster time h.lastFilterTime = toTime @@ -564,7 +584,7 @@ func (h *Health) collectDiskAlerts() { instance.SetLabel(severityLabel, string(warning)) } - h.setAlertMetric(mat, instance) + h.setAlertMetric(mat, instance, 1) } } @@ -711,7 +731,7 @@ func (h *Health) getTimeStampFilter(clusterTime time.Time) string { return fmt.Sprintf("time=>=%d", fromTime) } -func (h *Health) setAlertMetric(mat *matrix.Matrix, instance *matrix.Instance) { +func (h *Health) setAlertMetric(mat *matrix.Matrix, instance *matrix.Instance, value float64) { var err error m := mat.GetMetric("alerts") if m == nil { @@ -720,7 +740,44 @@ func (h *Health) setAlertMetric(mat *matrix.Matrix, instance *matrix.Instance) { return } } - if err = m.SetValueFloat64(instance, 1); err != nil { + if err = m.SetValueFloat64(instance, value); err != nil { h.Logger.Error().Err(err).Str("metric", "alerts").Msg("Unable to set value on metric") } } + +func (h *Health) generateResolutionMetrics() { + for prevKey, prevMat := range h.previousData { + curMat, exists := h.data[prevKey] + if !exists { + continue + } + + prevInstances := prevMat.GetInstanceKeys() + curInstances := make(map[string]struct{}) + for _, instanceKey := range curMat.GetInstanceKeys() { + curInstances[instanceKey] = struct{}{} + } + + for _, pInstanceKey := range prevInstances { + if _, found := curInstances[pInstanceKey]; found { + continue + } + + rMat := h.resolutionData[prevKey] + if rMat == nil { + h.Logger.Warn().Str("key", prevKey).Msg("empty resolution Matrix") + continue + } + + rInstance, err := rMat.NewInstance(pInstanceKey) + if err != nil { + h.Logger.Warn().Str("key", pInstanceKey).Msg("error while creating instance") + continue + } + + rInstance.SetLabels(prevMat.GetInstance(pInstanceKey).GetLabels()) + h.setAlertMetric(rMat, rInstance, 0) + } + } + h.previousData = h.data +} diff --git a/cmd/collectors/rest/plugins/health/health_test.go b/cmd/collectors/rest/plugins/health/health_test.go new file mode 100644 index 000000000..da6763cc0 --- /dev/null +++ b/cmd/collectors/rest/plugins/health/health_test.go @@ -0,0 +1,67 @@ +package health + +import ( + "github.com/netapp/harvest/v2/cmd/poller/plugin" + "github.com/netapp/harvest/v2/pkg/logging" + "github.com/netapp/harvest/v2/pkg/matrix" + "testing" +) + +func TestEndPoll(t *testing.T) { + // Create a new Health struct + h := &Health{AbstractPlugin: plugin.New("health", nil, nil, nil, "health", nil)} + h.Logger = logging.Get() + h.data = make(map[string]*matrix.Matrix) + h.previousData = make(map[string]*matrix.Matrix) + _ = h.InitAllMatrix() + + matName := "health_lif" + + // Initialize some test data + prevMat := matrix.New("UUID", "object", "identifier") + prevInstance1, _ := prevMat.NewInstance("0") + prevInstance1.SetLabel("label0", "value0") + prevInstance2, _ := prevMat.NewInstance("1") + prevInstance2.SetLabel("label1", "value1") + h.previousData[matName] = prevMat + + curMat := matrix.New("UUID", "object", "identifier") + curInstance, _ := curMat.NewInstance("2") + curInstance.SetLabel("label2", "value2") + h.data[matName] = curMat + + curMat2 := matrix.New("UUID2", "object2", "identifier2") + curInstance2, _ := curMat2.NewInstance("2") + curInstance2.SetLabel("label2", "value2") + h.data["testMatrix2"] = curMat + + h.generateResolutionMetrics() + + // Check that resolutionData has the expected values + resMat, ok := h.resolutionData[matName] + if !ok { + t.Fatalf("expected resolutionData to have key " + matName) + } + + // Check the count of instances in the resolution matrix + if len(resMat.GetInstances()) != 2 { + t.Fatalf("expected resolutionData to have 2 instances, got %d", len(resMat.GetInstances())) + } + + // Check that previousData is correctly updated + if len(h.previousData[matName].GetInstances()) != 1 { + t.Fatalf("expected previousData to have 1 instance, got %d", len(h.previousData["testMatrix"].GetInstances())) + } + + // Check the instances in the resolution matrix + for _, instanceKey := range []string{"0", "1"} { + resInstance := resMat.GetInstance(instanceKey) + if resInstance == nil { + t.Fatalf("expected resolutionData to have instance with index %s", instanceKey) + } + + if label := resInstance.GetLabel("label" + instanceKey); label != "value"+instanceKey { + t.Fatalf("expected instance label 'label%s' to be 'value%s', got '%s'", instanceKey, instanceKey, label) + } + } +} diff --git a/grafana/dashboards/cmode/datacenter.json b/grafana/dashboards/cmode/datacenter.json index db8f887b5..f5a1c1abe 100644 --- a/grafana/dashboards/cmode/datacenter.json +++ b/grafana/dashboards/cmode/datacenter.json @@ -77,7 +77,7 @@ "gnetId": null, "graphTooltip": 1, "id": null, - "iteration": 1715072354966, + "iteration": 1718008746540, "links": [ { "asDropdown": true, @@ -1014,7 +1014,7 @@ "h": 7, "w": 8, "x": 0, - "y": 2 + "y": 36 }, "id": 480, "options": { @@ -1241,7 +1241,7 @@ "h": 7, "w": 16, "x": 8, - "y": 2 + "y": 36 }, "id": 528, "interval": "", @@ -1352,7 +1352,7 @@ "h": 4, "w": 24, "x": 0, - "y": 17 + "y": 37 }, "id": 619, "options": { @@ -1387,7 +1387,7 @@ "h": 16, "w": 8, "x": 0, - "y": 21 + "y": 41 }, "id": 621, "options": { @@ -1417,7 +1417,7 @@ "targets": [ { "exemplar": false, - "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "instant": true, "interval": "", "legendFormat": "Broken Disk", @@ -1425,7 +1425,7 @@ }, { "exemplar": false, - "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1434,7 +1434,7 @@ }, { "exemplar": false, - "expr": "count(health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1443,7 +1443,7 @@ }, { "exemplar": false, - "expr": "(count(health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))", + "expr": "(count(health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))", "hide": false, "instant": true, "interval": "", @@ -1452,7 +1452,7 @@ }, { "exemplar": false, - "expr": "count(health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1461,7 +1461,7 @@ }, { "exemplar": false, - "expr": "count(health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1470,7 +1470,7 @@ }, { "exemplar": false, - "expr": "count(environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"}) or vector(0)", + "expr": "count(environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1538,7 +1538,7 @@ "h": 16, "w": 8, "x": 8, - "y": 21 + "y": 41 }, "id": 623, "options": { @@ -1568,7 +1568,7 @@ "targets": [ { "exemplar": false, - "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "instant": true, "interval": "", "legendFormat": "Unassigned Disk", @@ -1576,7 +1576,7 @@ }, { "exemplar": false, - "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1594,7 +1594,7 @@ }, { "exemplar": false, - "expr": "count(health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1603,7 +1603,7 @@ }, { "exemplar": false, - "expr": "count(health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1612,7 +1612,7 @@ }, { "exemplar": false, - "expr": "count(health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -1691,7 +1691,7 @@ "h": 16, "w": 8, "x": 16, - "y": 21 + "y": 41 }, "id": 625, "options": { @@ -4101,5 +4101,5 @@ "timezone": "", "title": "ONTAP: Datacenter", "uid": "cdot-datacenter", - "version": 2 + "version": 3 } diff --git a/grafana/dashboards/cmode/health.json b/grafana/dashboards/cmode/health.json index f633c97af..3fb043a2e 100644 --- a/grafana/dashboards/cmode/health.json +++ b/grafana/dashboards/cmode/health.json @@ -71,7 +71,7 @@ "gnetId": null, "graphTooltip": 1, "id": null, - "iteration": 1701427047225, + "iteration": 1718007936255, "links": [ { "asDropdown": true, @@ -213,7 +213,7 @@ "targets": [ { "exemplar": false, - "expr": "(count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"}) or vector(0))\n+\n(count(health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))", + "expr": "(count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"} == 1) or vector(0))\n+\n(count(health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))", "instant": true, "interval": "", "legendFormat": "", @@ -304,7 +304,7 @@ "targets": [ { "exemplar": false, - "expr": "(count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0))\n+\n(count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0))\n+\n(count(last_over_time(health_support_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}[24h]) == 1) or vector(0))\n+\n(count(health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0))\n+\n(count(health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0))\n+\n(count(health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))", + "expr": "(count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0))\n+\n(count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0))\n+\n(count(last_over_time(health_support_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}[24h]) == 1) or vector(0))\n+\n(count(health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0))\n+\n(count(health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0))\n+\n(count(health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))", "instant": true, "interval": "", "legendFormat": "", @@ -446,7 +446,7 @@ "targets": [ { "exemplar": false, - "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "instant": true, "interval": "", "legendFormat": "Broken Disk", @@ -454,7 +454,7 @@ }, { "exemplar": false, - "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -463,7 +463,7 @@ }, { "exemplar": false, - "expr": "count(health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -472,7 +472,7 @@ }, { "exemplar": false, - "expr": "(count(health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))\n+\n(count(health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0))", + "expr": "(count(health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))\n+\n(count(health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0))", "hide": false, "instant": true, "interval": "", @@ -481,7 +481,7 @@ }, { "exemplar": false, - "expr": "count(health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -490,7 +490,7 @@ }, { "exemplar": false, - "expr": "count(health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -499,7 +499,7 @@ }, { "exemplar": false, - "expr": "count(environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"}) or vector(0)", + "expr": "count(environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -597,7 +597,7 @@ "targets": [ { "exemplar": false, - "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "instant": true, "interval": "", "legendFormat": "Unassigned Disk", @@ -605,7 +605,7 @@ }, { "exemplar": false, - "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -623,7 +623,7 @@ }, { "exemplar": false, - "expr": "count(health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -632,7 +632,7 @@ }, { "exemplar": false, - "expr": "count(health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)", + "expr": "count(health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -641,7 +641,7 @@ }, { "exemplar": false, - "expr": "count(health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)", + "expr": "count(health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"} == 1) or vector(0)", "hide": false, "instant": true, "interval": "", @@ -895,7 +895,7 @@ "targets": [ { "exemplar": false, - "expr": "node_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(cluster,node,datacenter) group_left(severity) health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "node_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(cluster,node,datacenter) group_left(severity) (health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "instant": true, "interval": "", @@ -1125,7 +1125,7 @@ "targets": [ { "exemplar": false, - "expr": "node_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(cluster,node,datacenter) group_left(severity,takeover_possible,partner,partner_state,state_description) health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "node_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(cluster,node,datacenter) group_left(severity,takeover_possible,partner,partner_state,state_description) (health_ha_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "instant": true, "interval": "", @@ -1312,7 +1312,7 @@ "targets": [ { "exemplar": false, - "expr": "environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"}", + "expr": "environment_sensor_threshold_value{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",threshold_state!=\"normal\"} == 1", "format": "table", "instant": false, "interval": "", @@ -1487,7 +1487,7 @@ "h": 9, "w": 24, "x": 0, - "y": 29 + "y": 31 }, "id": 248, "options": { @@ -1498,7 +1498,7 @@ "targets": [ { "exemplar": false, - "expr": "disk_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(disk,cluster,datacenter) group_left(severity) health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "disk_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(disk,cluster,datacenter) group_left(severity) (health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "instant": true, "interval": "", @@ -2031,7 +2031,7 @@ "h": 7, "w": 24, "x": 0, - "y": 21 + "y": 32 }, "id": 243, "interval": "1m", @@ -2051,7 +2051,7 @@ "targets": [ { "exemplar": false, - "expr": "shelf_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity,error_type,error_text) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity,error_type,error_text) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "instant": true, "interval": "", @@ -2060,7 +2060,7 @@ }, { "exemplar": false, - "expr": "shelf_disk_count{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_disk_count{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2070,7 +2070,7 @@ }, { "exemplar": false, - "expr": "shelf_new_status{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_new_status{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2080,7 +2080,7 @@ }, { "exemplar": false, - "expr": "shelf_power{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_power{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2090,7 +2090,7 @@ }, { "exemplar": false, - "expr": "shelf_average_ambient_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_average_ambient_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2100,7 +2100,7 @@ }, { "exemplar": false, - "expr": "shelf_min_ambient_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_min_ambient_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2110,7 +2110,7 @@ }, { "exemplar": false, - "expr": "shelf_max_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_max_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2120,7 +2120,7 @@ }, { "exemplar": false, - "expr": "shelf_average_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_average_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2130,7 +2130,7 @@ }, { "exemplar": false, - "expr": "shelf_min_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_min_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2140,7 +2140,7 @@ }, { "exemplar": false, - "expr": "shelf_max_fan_speed{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_max_fan_speed{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2150,7 +2150,7 @@ }, { "exemplar": false, - "expr": "shelf_average_fan_speed{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_average_fan_speed{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2160,7 +2160,7 @@ }, { "exemplar": false, - "expr": "shelf_min_fan_speed{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "shelf_min_fan_speed{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) (health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2552,7 +2552,7 @@ "h": 9, "w": 24, "x": 0, - "y": 31 + "y": 33 }, "id": 264, "interval": "1m", @@ -2570,7 +2570,7 @@ "targets": [ { "exemplar": false, - "expr": "volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity,anti_ransomware_attack_probability) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity,anti_ransomware_attack_probability) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "instant": true, "interval": "", @@ -2580,7 +2580,7 @@ }, { "exemplar": false, - "expr": "volume_new_status{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_new_status{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2591,7 +2591,7 @@ }, { "exemplar": false, - "expr": "volume_size_total{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_size_total{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2602,7 +2602,7 @@ }, { "exemplar": false, - "expr": "volume_size_used_percent{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_size_used_percent{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2613,7 +2613,7 @@ }, { "exemplar": false, - "expr": "volume_sis_dedup_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_sis_dedup_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2624,7 +2624,7 @@ }, { "exemplar": false, - "expr": "volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2635,7 +2635,7 @@ }, { "exemplar": false, - "expr": "volume_sis_dedup_saved+volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_sis_dedup_saved+volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2646,7 +2646,7 @@ }, { "exemplar": false, - "expr": "volume_space_logical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_space_logical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -2657,7 +2657,7 @@ }, { "exemplar": false, - "expr": "volume_space_physical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_space_physical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter) group_left(severity) (health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3074,7 +3074,7 @@ "h": 9, "w": 24, "x": 0, - "y": 40 + "y": 42 }, "id": 271, "interval": "1m", @@ -3092,7 +3092,7 @@ "targets": [ { "exemplar": false, - "expr": "volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity,movement_state) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity,movement_state) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "instant": true, "interval": "", @@ -3102,7 +3102,7 @@ }, { "exemplar": false, - "expr": "volume_new_status{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_new_status{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3113,7 +3113,7 @@ }, { "exemplar": false, - "expr": "volume_size_total{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_size_total{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3124,7 +3124,7 @@ }, { "exemplar": false, - "expr": "volume_size_used_percent{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_size_used_percent{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3135,7 +3135,7 @@ }, { "exemplar": false, - "expr": "volume_sis_dedup_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_sis_dedup_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3146,7 +3146,7 @@ }, { "exemplar": false, - "expr": "volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3157,7 +3157,7 @@ }, { "exemplar": false, - "expr": "volume_sis_dedup_saved+volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_sis_dedup_saved+volume_sis_compress_saved{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3168,7 +3168,7 @@ }, { "exemplar": false, - "expr": "volume_space_logical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_space_logical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3179,7 +3179,7 @@ }, { "exemplar": false, - "expr": "volume_space_physical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "volume_space_physical_used{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(volume,cluster,datacenter,svm) group_left(severity) (health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "hide": false, "instant": true, @@ -3374,7 +3374,7 @@ "targets": [ { "exemplar": false, - "expr": "health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1", "format": "table", "instant": true, "interval": "", @@ -3600,7 +3600,7 @@ "h": 10, "w": 24, "x": 0, - "y": 33 + "y": 35 }, "id": 280, "options": { @@ -3611,7 +3611,7 @@ "targets": [ { "exemplar": false, - "expr": "lif_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(lif,svm,cluster,datacenter) group_left(severity) health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "lif_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(lif,svm,cluster,datacenter) group_left(severity) (health_lif_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1)", "format": "table", "instant": true, "interval": "", @@ -3802,7 +3802,7 @@ "h": 8, "w": 24, "x": 0, - "y": 34 + "y": 36 }, "id": 261, "options": { @@ -3812,7 +3812,7 @@ "targets": [ { "exemplar": false, - "expr": "health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1", "format": "table", "instant": true, "interval": "", @@ -3955,7 +3955,7 @@ "h": 8, "w": 24, "x": 0, - "y": 42 + "y": 44 }, "id": 262, "options": { @@ -3965,7 +3965,7 @@ "targets": [ { "exemplar": false, - "expr": "health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}", + "expr": "health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} == 1", "format": "table", "instant": true, "interval": "", @@ -4292,7 +4292,7 @@ "h": 8, "w": 24, "x": 0, - "y": 36 + "y": 38 }, "id": 249, "options": { @@ -4489,5 +4489,5 @@ "timezone": "", "title": "ONTAP: Health", "uid": "cdot-health", - "version": 3 + "version": 4 }