Repository: NetApp/harvest
Pull request #1833 (2023-03-20 15:27:09)

feat: Ontap s3 dashboard - config metrics
<img width="1777" alt="image" src="https://user-images.githubusercontent.com/83282894/226386264-c88253d2-e4da-4685-92f0-dc0859ed72f9.png">


<img width="1730" alt="image" src="https://user-images.githubusercontent.com/83282894/226387699-6b8c8b19-4b56-4ba1-948d-491584a7b3c0.png">


Hardikl: Covered these in PR:
- size of buckets, names, usage
- object count
- encryption


Hardikl: Data available in infinity and mobility cluster in Bigtop:
<img width="1731" alt="image" src="https://user-images.githubusercontent.com/83282894/226561576-695a4ed2-ce63-4bf4-84f5-a0a4b3504c7e.png">

Hardikl: **Added permission details with performance counters.**

From SM
<img width="1272" alt="image" src="https://user-images.githubusercontent.com/83282894/226968078-6038aed9-81fe-4c86-ad25-d63f07f4eaa6.png">

I have added below performance metrics in dashboard as these seem more useful than others. May be based on our  suggestion/discussion we can add more here.

- ontaps3_connections
- ontaps3_connected_connections
- ontaps3_max_connected_connections
- ontaps3_max_requests_outstanding
- ontaps3_requests
- ontaps3_requests_outstanding
- ontaps3_root_user_access

-------------------------
Earlier thought of below count values[0 , 440 , etc.] for each metrics[`table and below numbers are same`], but it's not giving much detail while filtering from top variable, so changed it to upper table format.
<img width="1736" alt="image" src="https://user-images.githubusercontent.com/83282894/226913441-5282c600-6ac5-43c8-a7f7-75c9ab5cc98a.png">


**Current dashboard:**

<img width="1738" alt="image" src="https://user-images.githubusercontent.com/83282894/226965486-81aac79e-9fe0-427d-b020-c6247898e404.png">




Hardikl: I could able to create new bucket(hartest1) and able to add files there in mobility cluster, tried same in infinity and others openlab clusters but seems like due to firewall or some other reason, lif itself is not accessible from rhel or local.
SM used for testing: https://10.231.176.53/sysmgr/v4/storage/buckets/0ad1a828-cd54-11ed-a908-00a09865fe59

**Grid:**
<img width="1571" alt="image" src="https://user-images.githubusercontent.com/83282894/228527105-4003fba1-7eee-481d-85a3-510aa705ea69.png">

**Overview:**
<img width="1314" alt="image" src="https://user-images.githubusercontent.com/83282894/228527215-8fb7f817-835c-4b46-ac8b-5018e1d20471.png">

**Harvest dashboard Both details are available here**
<img width="1744" alt="image" src="https://user-images.githubusercontent.com/83282894/228532810-06c8c7f5-a6d4-4e07-979b-6f6108bf10a5.png">

**Permissions:**
<img width="1296" alt="image" src="https://user-images.githubusercontent.com/83282894/228527259-4bee1592-f510-4c9d-b734-a129dd392ce9.png">

**Harvest dashboard**
<img width="1749" alt="image" src="https://user-images.githubusercontent.com/83282894/228532904-28c48732-ade6-40ed-99e0-2230995a0d46.png">

**aws cli response in newly created bucket**
<img width="859" alt="image" src="https://user-images.githubusercontent.com/83282894/228527587-3e28ab38-5e92-45c5-aeac-4b998d03f4ef.png">

SM logic for showing the url
<img width="1104" alt="image" src="https://user-images.githubusercontent.com/83282894/228513778-b785be33-ad92-4694-8571-5465ff7fe2a1.png">
Hardikl: <img width="1730" alt="image" src="https://user-images.githubusercontent.com/83282894/230362630-67161628-0a4e-441d-828c-98b5f7bd3dac.png">

- template is responsible only for bucket level detail
- plugin is responsible for services API(permission detail)
Hardikl: same error due to golang to 1.20.2 https://github.com/NetApp/harvest/pull/1905
Hardikl: Previous plugin generated metric with labels:
<img width="1778" alt="image" src="https://user-images.githubusercontent.com/83282894/231200082-c23c1a5f-00fb-41d1-affa-393d3b00a94d.png">

New template generated metric with labels:
<img width="1767" alt="image" src="https://user-images.githubusercontent.com/83282894/231200120-2f9344f9-29cb-4be4-8bcb-2f941f6d10c7.png">

SM shows this when http and https both enabled,
<img width="1291" alt="image" src="https://user-images.githubusercontent.com/83282894/231216745-0c835689-086b-4722-add0-6cfb68cfa188.png">

Prometheus now shows this when http and https both enabled,:
<img width="1763" alt="image" src="https://user-images.githubusercontent.com/83282894/231216816-e4108dbf-90d7-41ab-b08c-c5751b975090.png">



Patch:
diff --git a/cmd/collectors/commonutils.go b/cmd/collectors/commonutils.go
index 71413e03..847cc772 100644
--- a/cmd/collectors/commonutils.go
+++ b/cmd/collectors/commonutils.go
@@ -2,14 +2,19 @@ package collectors
 
 import (
 	"github.com/netapp/harvest/v2/cmd/tools/rest"
+	"github.com/netapp/harvest/v2/pkg/errs"
 	"github.com/netapp/harvest/v2/pkg/logging"
 	"github.com/netapp/harvest/v2/pkg/matrix"
+	"github.com/netapp/harvest/v2/pkg/tree/node"
 	"github.com/tidwall/gjson"
 	"strings"
 	"time"
 )
 
-const DefaultBatchSize = "500"
+const (
+	DefaultBatchSize    = "500"
+	MaxAllowedTimeDrift = 10 * time.Second
+)
 
 func InvokeRestCall(client *rest.Client, href string, logger *logging.Logger) ([]gjson.Result, error) {
 	result, err := rest.Fetch(client, href)
@@ -25,6 +30,70 @@ func InvokeRestCall(client *rest.Client, href string, logger *logging.Logger) ([
 	return result, nil
 }
 
+func GetClusterTime(client *rest.Client, returnTimeOut string, logger *logging.Logger) (time.Time, error) {
+	var (
+		err         error
+		records     []gjson.Result
+		clusterTime time.Time
+		timeOfNodes []int64
+	)
+
+	query := "private/cli/cluster/date"
+	fields := []string{"date"}
+
+	href := rest.BuildHref(query, strings.Join(fields, ","), nil, "", "", "1", returnTimeOut, "")
+
+	if records, err = rest.Fetch(client, href); err != nil {
+		return clusterTime, err
+	}
+	if len(records) == 0 {
+		return clusterTime, errs.New(errs.ErrConfig, " date not found on cluster")
+	}
+
+	for _, instanceData := range records {
+		currentClusterDate := instanceData.Get("date")
+		if currentClusterDate.Exists() {
+			t, err := time.Parse(time.RFC3339, currentClusterDate.String())
+			if err != nil {
+				logger.Error().Str("date", currentClusterDate.String()).Err(err).Msg("Failed to load cluster date")
+				continue
+			}
+			clusterTime = t
+			timeOfNodes = append(timeOfNodes, t.UnixNano())
+		}
+	}
+
+	for _, timeOfEachNode := range timeOfNodes {
+		timeDrift := time.Duration(timeOfEachNode - timeOfNodes[0]).Abs()
+		if timeDrift >= MaxAllowedTimeDrift {
+			logger.Warn().Float64("timedrift(in sec)", timeDrift.Seconds()).Msg("Time drift exist among the nodes")
+			break
+		}
+	}
+
+	logger.Debug().Str("cluster time", clusterTime.String()).Msg("")
+	return clusterTime, nil
+}
+
+// GetDataInterval fetch pollData interval
+func GetDataInterval(param *node.Node, defaultInterval time.Duration) (time.Duration, error) {
+	var dataIntervalStr string
+	var durationVal time.Duration
+	var err error
+	schedule := param.GetChildS("schedule")
+	if schedule != nil {
+		dataInterval := schedule.GetChildS("data")
+		if dataInterval != nil {
+			dataIntervalStr = dataInterval.GetContentS()
+			if durationVal, err = time.ParseDuration(dataIntervalStr); err == nil {
+				return durationVal, nil
+			}
+			return defaultInterval, err
+		}
+	}
+	return defaultInterval, nil
+}
+
 func UpdateProtectedFields(instance *matrix.Instance) {
 
 	// check for group_type
diff --git a/cmd/collectors/ems/ems.go b/cmd/collectors/ems/ems.go
index 8d4d6762..e3dc3eda 100644
--- a/cmd/collectors/ems/ems.go
+++ b/cmd/collectors/ems/ems.go
@@ -24,7 +24,6 @@ const defaultSeverityFilter = "alert|emergency|error|informational|notice"
 const MaxBookendInstances = 1000
 const DefaultBookendResolutionDuration = 28 * 24 * time.Hour // 28 days == 672 hours
 const Hyphen = "-"
-const MaxAllowedTimeDrift = 10 * time.Second
 
 type Ems struct {
 	*rest2.Rest    // provides: AbstractCollector, Client, Object, Query, TemplateFn, TemplateType
@@ -248,58 +247,13 @@ func (e *Ems) InitCache() error {
 	return nil
 }
 
-func (e *Ems) getClusterTime() (time.Time, error) {
-	var (
-		err         error
-		records     []gjson.Result
-		clusterTime time.Time
-		timeOfNodes []int64
-	)
-
-	query := "private/cli/cluster/date"
-	fields := []string{"date"}
-
-	href := rest.BuildHref(query, strings.Join(fields, ","), nil, "", "", "1", e.ReturnTimeOut, "")
-
-	if records, err = e.GetRestData(href); err != nil {
-		return clusterTime, err
-	}
-	if len(records) == 0 {
-		return clusterTime, errs.New(errs.ErrConfig, e.Object+" date not found on cluster")
-	}
-
-	for _, instanceData := range records {
-		currentClusterDate := instanceData.Get("date")
-		if currentClusterDate.Exists() {
-			t, err := time.Parse(time.RFC3339, currentClusterDate.String())
-			if err != nil {
-				e.Logger.Error().Str("date", currentClusterDate.String()).Err(err).Msg("Failed to load cluster date")
-				continue
-			}
-			clusterTime = t
-			timeOfNodes = append(timeOfNodes, t.UnixNano())
-		}
-	}
-
-	for _, timeOfEachNode := range timeOfNodes {
-		timeDrift := time.Duration(timeOfEachNode - timeOfNodes[0]).Abs()
-		if timeDrift >= MaxAllowedTimeDrift {
-			e.Logger.Warn().Float64("timedrift(in sec)", timeDrift.Seconds()).Msg("Time drift exist among the nodes")
-			break
-		}
-	}
-
-	e.Logger.Debug().Str("cluster time", clusterTime.String()).Msg("")
-	return clusterTime, nil
-}
-
 // returns time filter (clustertime - polldata duration)
 func (e *Ems) getTimeStampFilter(clusterTime time.Time) string {
 	fromTime := e.lastFilterTime
 	// check if this is the first request
 	if e.lastFilterTime == 0 {
 		// if first request fetch cluster time
-		dataDuration, err := GetDataInterval(e.GetParams(), defaultDataPollDuration)
+		dataDuration, err := collectors.GetDataInterval(e.GetParams(), defaultDataPollDuration)
 		if err != nil {
 			e.Logger.Warn().Err(err).
 				Str("defaultDataPollDuration", defaultDataPollDuration.String()).
@@ -421,7 +375,7 @@ func (e *Ems) PollData() (map[string]*matrix.Matrix, error) {
 	startTime = time.Now()
 
 	// add time filter
-	clusterTime, err := e.getClusterTime()
+	clusterTime, err := collectors.GetClusterTime(e.Client, e.ReturnTimeOut, e.Logger)
 	if err != nil {
 		return nil, err
 	}
@@ -507,25 +461,6 @@ func (e *Ems) getHref(names []string, filter []string) string {
 	return href
 }
 
-// GetDataInterval fetch pollData interval
-func GetDataInterval(param *node.Node, defaultInterval time.Duration) (time.Duration, error) {
-	var dataIntervalStr string
-	var durationVal time.Duration
-	var err error
-	schedule := param.GetChildS("schedule")
-	if schedule != nil {
-		dataInterval := schedule.GetChildS("data")
-		if dataInterval != nil {
-			dataIntervalStr = dataInterval.GetContentS()
-			if durationVal, err = time.ParseDuration(dataIntervalStr); err == nil {
-				return durationVal, nil
-			}
-			return defaultInterval, err
-		}
-	}
-	return defaultInterval, nil
-}
-
 func parseProperties(instanceData gjson.Result, property string) gjson.Result {
 
 	if !strings.HasPrefix(property, "parameters.") {
diff --git a/cmd/collectors/rest/plugins/health/health.go b/cmd/collectors/rest/plugins/health/health.go
new file mode 100644
index 00000000..a8f5d098
--- /dev/null
+++ b/cmd/collectors/rest/plugins/health/health.go
@@ -0,0 +1,717 @@
+package health
+
+import (
+	"fmt"
+	goversion "github.com/hashicorp/go-version"
+	"github.com/netapp/harvest/v2/cmd/collectors"
+	"github.com/netapp/harvest/v2/cmd/poller/plugin"
+	"github.com/netapp/harvest/v2/cmd/tools/rest"
+	"github.com/netapp/harvest/v2/pkg/conf"
+	"github.com/netapp/harvest/v2/pkg/errs"
+	"github.com/netapp/harvest/v2/pkg/matrix"
+	"github.com/tidwall/gjson"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type AlertSeverity string
+
+const (
+	errr                            AlertSeverity = "error"
+	warning                         AlertSeverity = "warning"
+	diskHealthMatrix                              = "health_disk"
+	shelfHealthMatrix                             = "health_shelf"
+	supportHealthMatrix                           = "health_support"
+	nodeHealthMatrix                              = "health_node"
+	networkEthernetPortHealthMatrix               = "health_network_ethernet_port"
+	networkFCPortHealthMatrix                     = "health_network_fc_port"
+	networkInterfaceHealthMatrix                  = "health_network_interface"
+	volumeRansomwareHealthMatrix                  = "health_volume_ransomware"
+	volumeMoveHealthMatrix                        = "health_volume_move"
+	licenseHealthMatrix                           = "health_license"
+	severityLabel                                 = "severity"
+	defaultDataPollDuration                       = 3 * time.Minute
+)
+
+type Health struct {
+	*plugin.AbstractPlugin
+	client         *rest.Client
+	data           map[string]*matrix.Matrix
+	lastFilterTime int64
+}
+
+func New(p *plugin.AbstractPlugin) plugin.Plugin {
+	return &Health{AbstractPlugin: p}
+}
+
+var metrics = []string{
+	"alerts",
+}
+
+func (h *Health) Init() error {
+
+	var err error
+
+	if err = h.InitAbc(); err != nil {
+		return err
+	}
+
+	if err = h.initAllMatrix(); err != nil {
+		return err
+	}
+
+	timeout, _ := time.ParseDuration(rest.DefaultTimeout)
+	if h.client, err = rest.New(conf.ZapiPoller(h.ParentParams), timeout, h.Auth); err != nil {
+		return err
+	}
+
+	if err = h.client.Init(5); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (h *Health) initAllMatrix() error {
+	h.data = make(map[string]*matrix.Matrix)
+	mats := []string{diskHealthMatrix, shelfHealthMatrix, supportHealthMatrix, nodeHealthMatrix,
+		networkEthernetPortHealthMatrix, networkFCPortHealthMatrix, networkInterfaceHealthMatrix,
+		volumeRansomwareHealthMatrix, volumeMoveHealthMatrix, licenseHealthMatrix}
+	for _, m := range mats {
+		if err := h.initMatrix(m); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+func (h *Health) initMatrix(name string) error {
+	h.data[name] = matrix.New(h.Parent+name, name, name)
+	for _, v1 := range h.data {
+		v1.SetExportOptions(matrix.DefaultExportOptions())
+	}
+	for _, k := range metrics {
+		err := matrix.CreateMetric(k, h.data[name])
+		if err != nil {
+			h.Logger.Warn().Err(err).Str("key", k).Msg("error while creating metric")
+			return err
+		}
+	}
+	return nil
+}
+
+func (h *Health) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matrix, error) {
+	data := dataMap[h.Object]
+	clusterVersion := h.client.Cluster().GetVersion()
+	ontapVersion, err := goversion.NewVersion(clusterVersion)
+	if err != nil {
+		h.Logger.Error().Err(err).
+			Str("version", clusterVersion).
+			Msg("Failed to parse version")
+		return nil, nil
+	}
+	version96 := "9.6"
+	version96After, err := goversion.NewVersion(version96)
+	if err != nil {
+		h.Logger.Error().Err(err).
+			Str("version", version96).
+			Msg("Failed to parse version")
+		return nil, nil
+	}
+
+	if ontapVersion.LessThan(version96After) {
+		return nil, nil
+	}
+
+	// Purge and reset data
+	// remove all metrics as analytics label may change over time
+	err = h.initAllMatrix()
+	if err != nil {
+		h.Logger.Warn().Err(err).Msg("error while init matrix")
+		return nil, err
+	}
+	for k := range h.data {
+		// Set all global labels if already not exist
+		h.data[k].SetGlobalLabels(data.GetGlobalLabels())
+	}
+
+	h.collectDiskAlerts()
+	h.collectShelfAlerts()
+	h.collectSupportAlerts()
+	h.collectNodeAlerts()
+	h.collectNetworkEthernetPortAlerts()
+	h.collectNetworkFCPortAlerts()
+	h.collectNetworkInterfacesAlerts()
+	h.collectVolumeRansomwareAlerts()
+	h.collectVolumeMoveAlerts()
+	h.collectLicenseAlerts()
+
+	result := make([]*matrix.Matrix, 0, len(h.data))
+
+	for _, value := range h.data {
+		result = append(result, value)
+	}
+	return result, nil
+}
+
+func (h *Health) collectLicenseAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+
+	records, err := h.getNonCompliantLicense()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[licenseHealthMatrix]
+	for _, record := range records {
+		name := record.Get("name").String()
+		scope := record.Get("scope").String()
+		state := record.Get("state").String()
+		instance, err = mat.NewInstance(name)
+		if err != nil {
+			h.Logger.Warn().Str("key", name).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("name", name)
+		instance.SetLabel("scope", scope)
+		instance.SetLabel("state", state)
+		instance.SetLabel(severityLabel, string(errr))
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) collectVolumeMoveAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+
+	records, err := h.getMoveFailedVolumes()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[volumeMoveHealthMatrix]
+	for _, record := range records {
+		uuid := record.Get("uuid").String()
+		volume := record.Get("name").String()
+		svm := record.Get("svm.name").String()
+		movementState := record.Get("movement.state").String()
+		instance, err = mat.NewInstance(uuid)
+		if err != nil {
+			h.Logger.Warn().Str("key", uuid).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("movement_state", movementState)
+		instance.SetLabel("svm", svm)
+		instance.SetLabel("volume", volume)
+		instance.SetLabel(severityLabel, string(warning))
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) collectVolumeRansomwareAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	clusterVersion := h.client.Cluster().GetVersion()
+	ontapVersion, err := goversion.NewVersion(clusterVersion)
+	if err != nil {
+		h.Logger.Error().Err(err).
+			Str("version", clusterVersion).
+			Msg("Failed to parse version")
+		return
+	}
+	version910 := "9.10"
+	version910After, err := goversion.NewVersion(version910)
+	if err != nil {
+		h.Logger.Error().Err(err).
+			Str("version", version910).
+			Msg("Failed to parse version")
+		return
+	}
+
+	if ontapVersion.LessThan(version910After) {
+		return
+	}
+	records, err := h.getRansomwareVolumes()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[volumeRansomwareHealthMatrix]
+	for _, record := range records {
+		uuid := record.Get("uuid").String()
+		volume := record.Get("name").String()
+		antiRansomwareAttackProbability := record.Get("anti_ransomware.attack_probability").String()
+		instance, err = mat.NewInstance(uuid)
+		if err != nil {
+			h.Logger.Warn().Str("key", uuid).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("anti_ransomware_attack_probability", antiRansomwareAttackProbability)
+
+		instance.SetLabel("volume", volume)
+		instance.SetLabel(severityLabel, string(errr))
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) collectNetworkInterfacesAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	records, err := h.getNonHomeLIFs()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[networkInterfaceHealthMatrix]
+	for _, record := range records {
+		uuid := record.Get("uuid").String()
+		lif := record.Get("name").String()
+		isHome := record.Get("location.is_home").String()
+		instance, err = mat.NewInstance(uuid)
+		if err != nil {
+			h.Logger.Warn().Str("key", uuid).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("isHome", isHome)
+		instance.SetLabel("lif", lif)
+		instance.SetLabel(severityLabel, string(warning))
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) collectNetworkFCPortAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	records, err := h.getFCPorts()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[networkFCPortHealthMatrix]
+	for _, record := range records {
+		uuid := record.Get("uuid").String()
+		nodeName := record.Get("node.name").String()
+		port := record.Get("name").String()
+		state := record.Get("state").String()
+		instance, err = mat.NewInstance(uuid)
+		if err != nil {
+			h.Logger.Warn().Str("key", uuid).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("node", nodeName)
+		instance.SetLabel("state", state)
+		instance.SetLabel("port", port)
+		instance.SetLabel(severityLabel, string(errr))
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) collectNetworkEthernetPortAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	records, err := h.getEthernetPorts()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[networkEthernetPortHealthMatrix]
+	for _, record := range records {
+		uuid := record.Get("uuid").String()
+		port := record.Get("name").String()
+		nodeName := record.Get("node.name").String()
+		portType := record.Get("type").String()
+		state := record.Get("state").String()
+		instance, err = mat.NewInstance(uuid)
+		if err != nil {
+			h.Logger.Warn().Str("key", uuid).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("node", nodeName)
+		instance.SetLabel("state", state)
+		instance.SetLabel("port", port)
+		instance.SetLabel("type", portType)
+		instance.SetLabel(severityLabel, string(errr))
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) collectNodeAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	records, err := h.getNodes()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[nodeHealthMatrix]
+	for _, record := range records {
+		nodeName := record.Get("node").String()
+
+		instance, err = mat.NewInstance(nodeName)
+		if err != nil {
+			h.Logger.Warn().Str("key", nodeName).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("node", nodeName)
+		instance.SetLabel("healthy", "false")
+		instance.SetLabel(severityLabel, string(errr))
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) collectShelfAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	records, err := h.getShelves()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[shelfHealthMatrix]
+	for _, record := range records {
+		shelf := record.Get("shelf").String()
+		errorType := record.Get("error_type").String()
+		errorSeverity := record.Get("error_severity").String()
+		errorText := record.Get("error_text").String()
+
+		//errorSeverity possible values are unknown|notice|warning|error|critical
+		if errorSeverity == "error" || errorSeverity == "critical" || errorSeverity == "warning" {
+			instance, err = mat.NewInstance(shelf)
+			if err != nil {
+				h.Logger.Warn().Str("key", shelf).Msg("error while creating instance")
+				continue
+			}
+			instance.SetLabel("shelf", shelf)
+			instance.SetLabel("error_type", errorType)
+			instance.SetLabel("error_text", errorText)
+			if errorSeverity == "error" || errorSeverity == "critical" {
+				instance.SetLabel(severityLabel, string(errr))
+			} else if errorSeverity == "warning" {
+				instance.SetLabel(severityLabel, string(warning))
+			}
+
+			h.setAlertMetric(mat, instance)
+		}
+	}
+}
+
+func (h *Health) collectSupportAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	clusterTime, err := collectors.GetClusterTime(h.client, "", h.Logger)
+	if err != nil {
+		h.Logger.Error().Err(err).Msg("Failed to collect cluster time")
+		return
+	}
+	toTime := clusterTime.Unix()
+	timeFilter := h.getTimeStampFilter(clusterTime)
+	addFilter := []string{"suppress=false"}
+	filter := append(addFilter, timeFilter)
+
+	records, err := h.getSupportAlerts(filter)
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[supportHealthMatrix]
+	for index, record := range records {
+		nodeName := record.Get("node.name").String()
+		monitor := record.Get("monitor").String()
+		name := record.Get("name").String()
+		resource := record.Get("resource").String()
+		reason := record.Get("cause.message").String()
+		correctiveAction := record.Get("corrective_action.message").String()
+		instance, err = mat.NewInstance(strconv.Itoa(index))
+		if err != nil {
+			h.Logger.Warn().Int("key", index).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("node", nodeName)
+		instance.SetLabel("monitor", monitor)
+		instance.SetLabel("name", name)
+		instance.SetLabel("resource", resource)
+		instance.SetLabel("reason", reason)
+		instance.SetLabel("correctiveAction", correctiveAction)
+		instance.SetLabel(severityLabel, string(warning))
+
+		h.setAlertMetric(mat, instance)
+	}
+	// update lastFilterTime to current cluster time
+	h.lastFilterTime = toTime
+}
+
+func (h *Health) collectDiskAlerts() {
+	var (
+		instance *matrix.Instance
+	)
+	records, err := h.getDisks()
+	if err != nil {
+		if errs.IsRestErr(err, errs.APINotFound) {
+			h.Logger.Debug().Err(err).Msg("API not found")
+		} else {
+			h.Logger.Error().Err(err).Msg("Failed to collect analytic data")
+		}
+		return
+	}
+	mat := h.data[diskHealthMatrix]
+	for _, record := range records {
+		name := record.Get("name").String()
+		containerType := record.Get("container_type").String()
+		instance, err = mat.NewInstance(name)
+		if err != nil {
+			h.Logger.Warn().Str("key", name).Msg("error while creating instance")
+			continue
+		}
+		instance.SetLabel("disk", name)
+		instance.SetLabel("container_type", containerType)
+		if containerType == "broken" {
+			instance.SetLabel(severityLabel, string(errr))
+		} else if containerType == "unassigned" {
+			instance.SetLabel(severityLabel, string(warning))
+		}
+
+		h.setAlertMetric(mat, instance)
+	}
+}
+
+func (h *Health) getDisks() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	fields := []string{"name", "container_type"}
+	query := "api/storage/disks"
+	href := rest.BuildHref(query, strings.Join(fields, ","), []string{"container_type=broken|unassigned"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getShelves() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	fields := []string{"error_type", "error_severity", "error_text"}
+	query := "api/private/cli/storage/shelf"
+	href := rest.BuildHref(query, strings.Join(fields, ","), nil, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getNodes() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	fields := []string{"health"}
+	query := "api/private/cli/node"
+	href := rest.BuildHref(query, strings.Join(fields, ","), []string{"health=false"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getRansomwareVolumes() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	query := "api/storage/volumes"
+	href := rest.BuildHref(query, "", []string{"anti_ransomware.state=enabled", "anti_ransomware.attack_probability=low|moderate|high"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getNonCompliantLicense() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	query := "api/cluster/licensing/licenses"
+	fields := []string{"name,scope,state"}
+	href := rest.BuildHref(query, strings.Join(fields, ","), []string{"state=noncompliant"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getMoveFailedVolumes() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	query := "api/storage/volumes"
+	fields := []string{"uuid,name,movement.state,svm"}
+	href := rest.BuildHref(query, strings.Join(fields, ","), []string{"movement.state=cutover_wait|failed|cutover_pending"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getNonHomeLIFs() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	query := "api/network/ip/interfaces"
+	href := rest.BuildHref(query, "", []string{"location.is_home=false"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getFCPorts() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	fields := []string{"name,node"}
+	query := "api/network/fc/ports"
+	href := rest.BuildHref(query, strings.Join(fields, ","), []string{"enabled=true", "state=offlined_by_system"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getEthernetPorts() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	fields := []string{"name,node"}
+	query := "api/network/ethernet/ports"
+	href := rest.BuildHref(query, strings.Join(fields, ","), []string{"enabled=true", "state=down"}, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (h *Health) getSupportAlerts(filter []string) ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+	query := "api/private/support/alerts"
+	href := rest.BuildHref(query, "", filter, "", "", "", "", query)
+
+	if result, err = collectors.InvokeRestCall(h.client, href, h.Logger); err != nil {
+		return nil, err
+	}
+
+	return result, nil
+}
+
+// returns time filter (clustertime - polldata duration)
+func (h *Health) getTimeStampFilter(clusterTime time.Time) string {
+	fromTime := h.lastFilterTime
+	// check if this is the first request
+	if h.lastFilterTime == 0 {
+		// if first request fetch cluster time
+		dataDuration, err := collectors.GetDataInterval(h.ParentParams, defaultDataPollDuration)
+		if err != nil {
+			h.Logger.Warn().Err(err).
+				Str("defaultDataPollDuration", defaultDataPollDuration.String()).
+				Msg("Failed to parse duration. using default")
+		}
+		fromTime = clusterTime.Add(-dataDuration).Unix()
+	}
+	return fmt.Sprintf("time=>=%d", fromTime)
+}
+
+func (h *Health) setAlertMetric(mat *matrix.Matrix, instance *matrix.Instance) {
+	var err error
+	m := mat.GetMetric("alerts")
+	if m == nil {
+		if m, err = mat.NewMetricFloat64("alerts"); err != nil {
+			h.Logger.Warn().Err(err).Str("key", "alerts").Msg("error while creating metric")
+			return
+		}
+	}
+	if err = m.SetValueFloat64(instance, 1); err != nil {
+		h.Logger.Error().Err(err).Str("metric", "alerts").Msg("Unable to set value on metric")
+	}
+}
diff --git a/cmd/collectors/rest/plugins/ontaps3service/ontaps3service.go b/cmd/collectors/rest/plugins/ontaps3service/ontaps3service.go
new file mode 100644
index 00000000..59e4119a
--- /dev/null
+++ b/cmd/collectors/rest/plugins/ontaps3service/ontaps3service.go
@@ -0,0 +1,123 @@
+/*
+ * Copyright NetApp Inc, 2023 All rights reserved
+ */
+
+package ontaps3service
+
+import (
+	"github.com/netapp/harvest/v2/cmd/collectors"
+	"github.com/netapp/harvest/v2/cmd/poller/plugin"
+	"github.com/netapp/harvest/v2/cmd/tools/rest"
+	"github.com/netapp/harvest/v2/pkg/conf"
+	"github.com/netapp/harvest/v2/pkg/errs"
+	"github.com/netapp/harvest/v2/pkg/matrix"
+	"github.com/tidwall/gjson"
+	"strings"
+	"time"
+)
+
+type OntapS3Service struct {
+	*plugin.AbstractPlugin
+	client *rest.Client
+	query  string
+}
+
+func New(p *plugin.AbstractPlugin) plugin.Plugin {
+	return &OntapS3Service{AbstractPlugin: p}
+}
+
+func (o *OntapS3Service) Init() error {
+	var err error
+
+	if err = o.InitAbc(); err != nil {
+		return err
+	}
+
+	clientTimeout := o.ParentParams.GetChildContentS("client_timeout")
+	timeout, _ := time.ParseDuration(rest.DefaultTimeout)
+	duration, err := time.ParseDuration(clientTimeout)
+	if err == nil {
+		timeout = duration
+	} else {
+		o.Logger.Debug().Str("timeout", timeout.String()).Msg("Using default timeout")
+	}
+	if o.client, err = rest.New(conf.ZapiPoller(o.ParentParams), timeout, o.Auth); err != nil {
+		o.Logger.Error().Stack().Err(err).Msg("connecting")
+		return err
+	}
+
+	if err = o.client.Init(5); err != nil {
+		return err
+	}
+
+	o.query = "api/protocols/s3/services"
+	return nil
+}
+
+func (o *OntapS3Service) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matrix, error) {
+	var (
+		result      []gjson.Result
+		err         error
+		svmToURLMap map[string][]string
+		urlValue    []string
+	)
+
+	// reset svmToS3serverMap map
+	svmToURLMap = make(map[string][]string)
+	data := dataMap[o.Object]
+
+	fields := []string{"svm.name", "name", "is_http_enabled", "is_https_enabled", "secure_port", "port"}
+	href := rest.BuildHref("", strings.Join(fields, ","), nil, "", "", "", "", o.query)
+
+	if result, err = collectors.InvokeRestCall(o.client, href, o.Logger); err != nil {
+		return nil, err
+	}
+
+	// Iterate over services API response
+	for _, ontaps3Service := range result {
+		if !ontaps3Service.IsObject() {
+			o.Logger.Error().Str("type", ontaps3Service.Type.String()).Msg("Ontap S3 Service is not an object, skipping")
+			return nil, errs.New(errs.ErrNoInstance, "Ontap S3 Service is not an object")
+		}
+		s3ServerName := ontaps3Service.Get("name").String()
+		svm := ontaps3Service.Get("svm.name").String()
+		isHTTPEnabled := ontaps3Service.Get("is_http_enabled").Bool()
+		isHTTPSEnabled := ontaps3Service.Get("is_https_enabled").Bool()
+		securePort := ontaps3Service.Get("secure_port").String()
+		port := ontaps3Service.Get("port").String()
+
+		httpsURL := ""
+		httpURL := ""
+		if isHTTPSEnabled {
+			httpsURL = "https://" + s3ServerName
+			if securePort != "443" {
+				httpsURL += ":" + securePort
+			}
+			httpsURL += "/"
+		}
+		if isHTTPEnabled {
+			httpURL = "http://" + s3ServerName
+			if port != "80" {
+				httpURL += ":" + port
+			}
+			httpURL += "/"
+		}
+
+		// cache url and svm detail
+		svmToURLMap[svm] = []string{httpsURL, httpURL}
+	}
+
+	for _, ontapS3 := range data.GetInstances() {
+		urlValue = make([]string, 0)
+		for _, url := range svmToURLMap[ontapS3.GetLabel("svm")] {
+			if url != "" {
+				urlValue = append(urlValue, url+ontapS3.GetLabel("bucket"))
+			}
+		}
+		// Update url label in ontaps3_labels, Example: http://s3server/bucket1
+		// If http and https both are enabled, then url label in ontaps3_labels, https://s3server/bucket1, http://s3server/bucket1
+		ontapS3.SetLabel("url", strings.Join(urlValue, ","))
+	}
+
+	return nil, nil
+}
diff --git a/cmd/collectors/rest/rest.go b/cmd/collectors/rest/rest.go
index 056784a3..8d0da398 100644
--- a/cmd/collectors/rest/rest.go
+++ b/cmd/collectors/rest/rest.go
@@ -4,7 +4,9 @@ import (
 	"fmt"
 	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/certificate"
 	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/disk"
+	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/health"
 	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/netroute"
+	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/ontaps3service"
 	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/qospolicyadaptive"
 	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/qospolicyfixed"
 	"github.com/netapp/harvest/v2/cmd/collectors/rest/plugins/qtree"
@@ -369,6 +371,8 @@ func (r *Rest) LoadPlugin(kind string, abc *plugin.AbstractPlugin) plugin.Plugin
 	switch kind {
 	case "Disk":
 		return disk.New(abc)
+	case "Health":
+		return health.New(abc)
 	case "NetRoute":
 		return netroute.New(abc)
 	case "Qtree":
@@ -391,7 +395,8 @@ func (r *Rest) LoadPlugin(kind string, abc *plugin.AbstractPlugin) plugin.Plugin
 		return qospolicyfixed.New(abc)
 	case "QosPolicyAdaptive":
 		return qospolicyadaptive.New(abc)
-
+	case "OntapS3Service":
+		return ontaps3service.New(abc)
 	default:
 		r.Logger.Warn().Str("kind", kind).Msg("no rest plugin found ")
 	}
diff --git a/cmd/tools/grafana/grafana.go b/cmd/tools/grafana/grafana.go
index 75fe237a..e8d8a3fa 100644
--- a/cmd/tools/grafana/grafana.go
+++ b/cmd/tools/grafana/grafana.go
@@ -656,20 +656,26 @@ func addPrefixToMetricNames(expr, prefix string) string {
 			return expr
 		}
 	}
-
 	// everything else is for graph queries
-	regex = regexp.MustCompile(`([a-zA-Z_+]+)\s?{.+?}`)
+	regex = regexp.MustCompile(`([a-zA-Z0-9_+-]+)\s?{.+?}`)
 	match = regex.FindAllStringSubmatch(expr, -1)
 	visitedMap = make(map[string]bool)
 	for _, m := range match {
 		if _, has := visitedMap[m[1]]; !has {
-			// multiple metrics used to summarize
+			// multiple metrics used with `+`
 			if strings.Contains(m[1], "+") {
 				submatch = strings.Split(m[1], "+")
 				for i := range submatch {
 					submatch[i] = prefix + submatch[i]
 				}
 				expr = strings.Replace(expr, m[1], strings.Join(submatch, "+"), -1)
+				// multiple metrics used with `-`
+			} else if strings.Contains(m[1], "-") {
+				submatch = strings.Split(m[1], "-")
+				for i := range submatch {
+					submatch[i] = prefix + submatch[i]
+				}
+				expr = strings.Replace(expr, m[1], strings.Join(submatch, "-"), -1)
 				// single metric
 			} else {
 				expr = strings.Replace(expr, m[1], prefix+m[1], -1)
diff --git a/conf/rest/9.10.0/aggr.yaml b/conf/rest/9.10.0/aggr.yaml
index 1c96ef17..44475b8d 100644
--- a/conf/rest/9.10.0/aggr.yaml
+++ b/conf/rest/9.10.0/aggr.yaml
@@ -68,7 +68,7 @@ export_options:
     - aggr
     - node
   instance_labels:
-    - type
-    - state
-    - is_encrypted
     - cloud_stores
+    - is_encrypted
+    - state
+    - type
diff --git a/conf/rest/9.11.0/cloud_target.yaml b/conf/rest/9.11.0/cloud_target.yaml
index 88a069ea..dfdaef42 100644
--- a/conf/rest/9.11.0/cloud_target.yaml
+++ b/conf/rest/9.11.0/cloud_target.yaml
@@ -20,15 +20,15 @@ counters:
 
 export_options:
   instance_keys:
-    - name
     - container
+    - name
     - server
   instance_labels:
+    - access_key
+    - authentication_type
+    - certificate_validation_enabled
     - ipspace
     - owner
     - port
     - provider_type
-    - authentication_type
-    - access_key
-    - certificate_validation_enabled
     - ssl_enabled
\ No newline at end of file
diff --git a/conf/rest/9.12.0/aggr.yaml b/conf/rest/9.12.0/aggr.yaml
index b203f0f0..60918227 100644
--- a/conf/rest/9.12.0/aggr.yaml
+++ b/conf/rest/9.12.0/aggr.yaml
@@ -79,7 +79,7 @@ export_options:
     - aggr
     - node
   instance_labels:
-    - type
-    - state
-    - is_encrypted
     - cloud_stores
+    - is_encrypted
+    - state
+    - type
diff --git a/conf/rest/9.12.0/cloud_target.yaml b/conf/rest/9.12.0/cloud_target.yaml
index 1315a004..86c98509 100644
--- a/conf/rest/9.12.0/cloud_target.yaml
+++ b/conf/rest/9.12.0/cloud_target.yaml
@@ -21,16 +21,16 @@ counters:
 
 export_options:
   instance_keys:
-    - name
     - container
+    - name
     - server
   instance_labels:
+    - access_key
+    - authentication_type
+    - certificate_validation_enabled
     - ipspace
     - owner
     - port
     - provider_type
-    - authentication_type
-    - access_key
-    - certificate_validation_enabled
-    - ssl_enabled
     - scope
+    - ssl_enabled
diff --git a/conf/rest/9.12.0/clusterpeer.yaml b/conf/rest/9.12.0/clusterpeer.yaml
index 04aa45c7..058cb18c 100644
--- a/conf/rest/9.12.0/clusterpeer.yaml
+++ b/conf/rest/9.12.0/clusterpeer.yaml
@@ -18,5 +18,5 @@ export_options:
   instance_keys:
     - uuid
   instance_labels:
-    - name
     - encryption_state
+    - name
diff --git a/conf/rest/9.12.0/disk.yaml b/conf/rest/9.12.0/disk.yaml
index 4186b420..01f27b96 100644
--- a/conf/rest/9.12.0/disk.yaml
+++ b/conf/rest/9.12.0/disk.yaml
@@ -44,17 +44,17 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - disk
     - index
+    - node
   instance_labels:
-    - type
+    - container_type
+    - failed
     - model
     - outage
     - owner_node
+    - serial_number
     - shared
     - shelf
     - shelf_bay
-    - serial_number
-    - failed
-    - container_type
+    - type
diff --git a/conf/rest/9.12.0/lun.yaml b/conf/rest/9.12.0/lun.yaml
index a2e5d752..8c939a6f 100644
--- a/conf/rest/9.12.0/lun.yaml
+++ b/conf/rest/9.12.0/lun.yaml
@@ -28,10 +28,10 @@ plugins:
 
 export_options:
   instance_keys:
+    - lun
     - node
     - qtree
-    - lun
-    - volume
     - svm
+    - volume
   instance_labels:
     - state
diff --git a/conf/rest/9.12.0/namespace.yaml b/conf/rest/9.12.0/namespace.yaml
index 58f65479..eb28da23 100644
--- a/conf/rest/9.12.0/namespace.yaml
+++ b/conf/rest/9.12.0/namespace.yaml
@@ -25,17 +25,17 @@ plugins:
 
 export_options:
   instance_keys:
-    - uuid
+    - path
     - svm
+    - uuid
     - volume
-    - path
   instance_labels:
-    - nsid
-    - path
+    - is_read_only
     - node
+    - nsid
     - os_type
-    - is_read_only
+    - path
     - state
     - subsystem
-    - volume
     - svm
+    - volume
diff --git a/conf/rest/9.12.0/netconnections.yaml b/conf/rest/9.12.0/netconnections.yaml
index 1ba3a696..36f02529 100644
--- a/conf/rest/9.12.0/netconnections.yaml
+++ b/conf/rest/9.12.0/netconnections.yaml
@@ -20,14 +20,13 @@ export_options:
   instance_keys:
     - cid
   instance_labels:
-    - node
-    - svm
+    - blocks_lb
     - lif
     - local_address
     - local_port
-    - remote_ip
-#    - remote_host
+    - lru
+    - node
     - proto
+    - remote_ip
     - service
-    - lru
-    - blocks_lb
+    - svm
diff --git a/conf/rest/9.12.0/netroute.yaml b/conf/rest/9.12.0/netroute.yaml
index 48df684c..d33f6c22 100644
--- a/conf/rest/9.12.0/netroute.yaml
+++ b/conf/rest/9.12.0/netroute.yaml
@@ -23,10 +23,10 @@ export_options:
   instance_keys:
     - uuid
   instance_labels:
-    - svm
-    - scope
-    - ipspace
-    - gateway
-    - netmask_length
     - destination
     - family
+    - gateway
+    - ipspace
+    - netmask_length
+    - scope
+    - svm
diff --git a/conf/rest/9.12.0/node.yaml b/conf/rest/9.12.0/node.yaml
index d77e503e..470882b6 100644
--- a/conf/rest/9.12.0/node.yaml
+++ b/conf/rest/9.12.0/node.yaml
@@ -11,6 +11,7 @@ counters:
   - ^location
   - ^model
   - ^serial_number                                    => serial
+  - ^state
   - ^version.full                                     => version
   - controller.failed_fan.count                       => failed_fan
   - controller.failed_power_supply.count              => failed_power
@@ -38,14 +39,15 @@ export_options:
   instance_keys:
     - node
   instance_labels:
-    - max_aggr_size
-    - max_vol_size
-    - max_vol_num
-    - warnings
     - healthy
     - location
+    - max_aggr_size
+    - max_vol_num
+    - max_vol_size
     - model
     - serial
+    - state
     - uptime
     - vendor
     - version
+    - warnings
diff --git a/conf/rest/9.12.0/qos_policy_adaptive.yaml b/conf/rest/9.12.0/qos_policy_adaptive.yaml
index 84eb6534..384c54e0 100644
--- a/conf/rest/9.12.0/qos_policy_adaptive.yaml
+++ b/conf/rest/9.12.0/qos_policy_adaptive.yaml
@@ -21,10 +21,10 @@ export_options:
   instance_keys:
     - svm
   instance_labels:
-    - name
     - absolute_min_iops
     - expected_iops
     - expected_iops_allocation
+    - name
     - object_count
     - peak_iops
     - peak_iops_allocation
diff --git a/conf/rest/9.12.0/qos_policy_fixed.yaml b/conf/rest/9.12.0/qos_policy_fixed.yaml
index 1e129315..eabbcfa6 100644
--- a/conf/rest/9.12.0/qos_policy_fixed.yaml
+++ b/conf/rest/9.12.0/qos_policy_fixed.yaml
@@ -21,11 +21,11 @@ export_options:
   instance_keys:
     - svm
   instance_labels:
-    - name
     - capacity_shared
+    - class
     - max_throughput_iops
     - max_throughput_mbps
     - min_throughput_iops
     - min_throughput_mbps
-    - object_count
-    - class
\ No newline at end of file
+    - name
+    - object_count
\ No newline at end of file
diff --git a/conf/rest/9.12.0/qtree.yaml b/conf/rest/9.12.0/qtree.yaml
index d105225b..1025163f 100644
--- a/conf/rest/9.12.0/qtree.yaml
+++ b/conf/rest/9.12.0/qtree.yaml
@@ -38,10 +38,10 @@ plugins:
 export_options:
   instance_keys:
     - qtree
-    - volume
     - svm
+    - volume
   instance_labels:
     - export_policy
+    - oplocks
     - security_style
     - status
-    - oplocks
diff --git a/conf/rest/9.12.0/security.yaml b/conf/rest/9.12.0/security.yaml
index fb4037a0..ffa16e38 100644
--- a/conf/rest/9.12.0/security.yaml
+++ b/conf/rest/9.12.0/security.yaml
@@ -12,5 +12,5 @@ export_options:
   instance_keys:
     - fips_enabled
   instance_labels:
-    - telnet_enabled
     - rsh_enabled
+    - telnet_enabled
diff --git a/conf/rest/9.12.0/security_account.yaml b/conf/rest/9.12.0/security_account.yaml
index c31ce9c9..d126290e 100644
--- a/conf/rest/9.12.0/security_account.yaml
+++ b/conf/rest/9.12.0/security_account.yaml
@@ -26,11 +26,11 @@ plugins:
 
 export_options:
   instance_keys:
-    - user_name
-    - svm
     - applications
     - methods
+    - svm
+    - user_name
   instance_labels:
-    - role_name
     - hash_algorithm
     - locked
+    - role_name
diff --git a/conf/rest/9.12.0/security_certificate.yaml b/conf/rest/9.12.0/security_certificate.yaml
index be87db81..476db647 100644
--- a/conf/rest/9.12.0/security_certificate.yaml
+++ b/conf/rest/9.12.0/security_certificate.yaml
@@ -25,11 +25,10 @@ export_options:
   instance_keys:
     - uuid
   instance_labels:
+    - certificateExpiryStatus
+    - certificateIssuerType
     - name
-    #- certificatePEM   // Need to decide certificatePEM would be exposed or not in prometheus
     - scope
+    - serial_number
     - svm
     - type
-    - certificateIssuerType
-    - serial_number
-    - certificateExpiryStatus
diff --git a/conf/rest/9.12.0/security_login.yaml b/conf/rest/9.12.0/security_login.yaml
index ac34e4e8..f13fa269 100644
--- a/conf/rest/9.12.0/security_login.yaml
+++ b/conf/rest/9.12.0/security_login.yaml
@@ -13,6 +13,6 @@ export_options:
   instance_keys:
     - uuid
   instance_labels:
-    - svm
-    - scope
     - banner
+    - scope
+    - svm
diff --git a/conf/rest/9.12.0/shelf.yaml b/conf/rest/9.12.0/shelf.yaml
index d5dc80b6..d5427282 100644
--- a/conf/rest/9.12.0/shelf.yaml
+++ b/conf/rest/9.12.0/shelf.yaml
@@ -30,9 +30,9 @@ export_options:
   instance_keys:
     - shelf
   instance_labels:
+    - model
     - module_type
+    - op_status
     - serial_number
-    - model
     - state
-    - op_status
     - vendor_name
diff --git a/conf/rest/9.12.0/snapmirror.yaml b/conf/rest/9.12.0/snapmirror.yaml
index 25b955d5..b5f13183 100644
--- a/conf/rest/9.12.0/snapmirror.yaml
+++ b/conf/rest/9.12.0/snapmirror.yaml
@@ -49,25 +49,24 @@ plugins:
 
 export_options:
   instance_keys:
-    - relationship_id
-    - destination_volume
+    - destination_location
     - destination_node
+    - destination_volume
     - destination_vserver
+    - relationship_id
+    - source_cluster
     - source_volume
     - source_vserver
-#    - source_node
-    - source_cluster
-    - destination_location
   instance_labels:
+    - derived_relationship_type
+    - group_type
     - healthy
-    - unhealthy_reason
     - last_transfer_type
+    - local
+    - policy_type
+    - protectedBy
+    - protectionSourceType
     - relationship_status
     - relationship_type
     - schedule
-    - group_type
-    - protectedBy
-    - protectionSourceType
-    - policy_type
-    - derived_relationship_type
-    - local
+    - unhealthy_reason
diff --git a/conf/rest/9.12.0/snapshotpolicy.yaml b/conf/rest/9.12.0/snapshotpolicy.yaml
index eb7bdc28..93975716 100644
--- a/conf/rest/9.12.0/snapshotpolicy.yaml
+++ b/conf/rest/9.12.0/snapshotpolicy.yaml
@@ -10,6 +10,6 @@ counters:
 
 export_options:
   instance_keys:
-    - svm
+    - comment
     - snapshot_policy
-    - comment
\ No newline at end of file
+    - svm
\ No newline at end of file
diff --git a/conf/rest/9.12.0/subsystem.yaml b/conf/rest/9.12.0/subsystem.yaml
index 2dd64d94..a75fa222 100644
--- a/conf/rest/9.12.0/subsystem.yaml
+++ b/conf/rest/9.12.0/subsystem.yaml
@@ -16,5 +16,5 @@ plugins:
 
 export_options:
   instance_keys:
-    - subsystem
     - health
+    - subsystem
diff --git a/conf/rest/9.12.0/svm.yaml b/conf/rest/9.12.0/svm.yaml
index 8177d02e..c42cce2c 100644
--- a/conf/rest/9.12.0/svm.yaml
+++ b/conf/rest/9.12.0/svm.yaml
@@ -80,25 +80,25 @@ export_options:
   instance_keys:
     - svm
   instance_labels:
-    - state
     - anti_ransomware_state
-    - ciphers
-    - cifs_protocol_enabled
-    - smb_encryption_required
-    - smb_signing_required
-    - cifs_ntlm_enabled
-    - nfs_protocol_enabled
     - audit_protocol_enabled
+    - cifs_ntlm_enabled
+    - cifs_protocol_enabled
+    - ciphers
     - fpolicy_enabled
     - fpolicy_name
-    - nis_domain
-    - ldap_session_security
-    - nfs_kerberos_protocol_enabled
     - iscsi_authentication_type
     - iscsi_service_enabled
+    - ldap_session_security
+    - nfs_kerberos_protocol_enabled
+    - nfs_protocol_enabled
     - nis_authentication_enabled
-    - ns_source
+    - nis_domain
     - ns_db
-    - type
+    - ns_source
     - root_svm
+    - smb_encryption_required
+    - smb_signing_required
+    - state
+    - type
 
diff --git a/conf/rest/9.12.0/volume.yaml b/conf/rest/9.12.0/volume.yaml
index a7cbb42b..df6b3283 100644
--- a/conf/rest/9.12.0/volume.yaml
+++ b/conf/rest/9.12.0/volume.yaml
@@ -103,19 +103,20 @@ plugins:
 
 export_options:
   instance_keys:
-    - volume
-    - node
-    - svm
     - aggr
+    - node
     - style
+    - svm
+    - volume
   instance_labels:
-    - state
-    - is_sis_volume
-    - snapshot_policy
-    - type
-    - svm_root
-    - isEncrypted
-    - snaplock_type
     - antiRansomwareState
+    - isEncrypted
     - isHardwareEncrypted
+    - is_sis_volume
     - root_volume
+    - snaplock_type
+    - snapshot_policy
+    - state
+    - svm_root
+    - type
+
diff --git a/conf/rest/9.6.0/health.yaml b/conf/rest/9.6.0/health.yaml
new file mode 100644
index 00000000..41c0fe24
--- /dev/null
+++ b/conf/rest/9.6.0/health.yaml
@@ -0,0 +1,12 @@
+name:               Health
+query:              api/cluster
+object:             health
+
+counters:
+  - ^^uuid
+  - ^name
+
+plugins:
+  - Health
+
+export_data: false
diff --git a/conf/rest/9.7.0/ontap_s3.yaml b/conf/rest/9.7.0/ontap_s3.yaml
index a75ac84d..4b44ad31 100644
--- a/conf/rest/9.7.0/ontap_s3.yaml
+++ b/conf/rest/9.7.0/ontap_s3.yaml
@@ -4,9 +4,14 @@ object:           ontaps3
 
 counters:
   - ^^uuid
-  - ^name               => bucket
-  - ^svm.name           => svm
-  - ^volume.name        => volume
+  - ^encryption.enabled                          => encryption_enabled
+  - ^name                                        => bucket
+  - ^protection_status.destination.is_cloud      => protected_in_cloud
+  - ^protection_status.destination.is_ontap      => protected_in_ontap
+  - ^protection_status.is_protected              => is_protected
+  - ^qos_policy.name                             => qos_policy_group
+  - ^svm.name                                    => svm
+  - ^volume.name                                 => volume
   - logical_used_size
   - size
 
@@ -16,9 +21,21 @@ endpoints:
       - ^^uuid
       - object_count
 
+plugins:
+  - MetricAgent:
+      compute_metric:
+        - used_percent PERCENT logical_used_size size
+  - OntapS3Service
+
 export_options:
   instance_keys:
     - bucket
     - svm
-  instance_labels:
     - volume
+  instance_labels:
+    - encryption_enabled
+    - is_protected
+    - protected_in_cloud
+    - protected_in_ontap
+    - qos_policy_group
+    - url
diff --git a/conf/rest/9.7.0/ontap_s3_policy.yaml b/conf/rest/9.7.0/ontap_s3_policy.yaml
new file mode 100644
index 00000000..f2bc8087
--- /dev/null
+++ b/conf/rest/9.7.0/ontap_s3_policy.yaml
@@ -0,0 +1,23 @@
+name:             OntapS3Policy
+query:            api/private/cli/vserver/object-store-server/bucket/policy
+object:           ontaps3_policy
+
+counters:
+  - ^^bucket                                     => bucket
+  - ^^effect                                     => permission_type
+  - ^^index                                      => index
+  - ^^vserver                                    => svm
+  - ^action                                      => permission
+  - ^principal                                   => user
+  - ^resource                                    => allowed_resource
+
+export_options:
+  instance_keys:
+    - bucket
+    - index
+    - permission_type
+    - svm
+  instance_labels:
+    - allowed_resource
+    - permission
+    - user
\ No newline at end of file
diff --git a/conf/rest/9.8.0/exports.yaml b/conf/rest/9.8.0/exports.yaml
index 6b231704..d3ea8b76 100644
--- a/conf/rest/9.8.0/exports.yaml
+++ b/conf/rest/9.8.0/exports.yaml
@@ -14,12 +14,12 @@ counters:
 
 export_options:
   instance_keys:
-    - svm
-    - policy
     - index
+    - policy
+    - svm
   instance_labels:
-    - protocol
     - clientmatch
+    - protocol
     - rorule
     - rwrule
     - superuser
diff --git a/conf/rest/9.8.0/netroute.yaml b/conf/rest/9.8.0/netroute.yaml
index f570ca65..88c79322 100644
--- a/conf/rest/9.8.0/netroute.yaml
+++ b/conf/rest/9.8.0/netroute.yaml
@@ -16,10 +16,9 @@ export_options:
   instance_keys:
     - uuid
   instance_labels:
-    - svm
-    - gateway
     - destination
-    - ipspace
-    - gateway
     - family
+    - gateway
+    - ipspace
     - netmask_length
+    - svm
diff --git a/conf/rest/default.yaml b/conf/rest/default.yaml
index 95ef33a1..09114c04 100644
--- a/conf/rest/default.yaml
+++ b/conf/rest/default.yaml
@@ -13,6 +13,7 @@ objects:
   ClusterPeer:                 clusterpeer.yaml
   Disk:                        disk.yaml
 #  ExportRule:                  exports.yaml
+  Health:                      health.yaml
   Lun:                         lun.yaml
   Namespace:                   namespace.yaml
   NetConnections:              netconnections.yaml
@@ -22,6 +23,7 @@ objects:
   Node:                        node.yaml
   NtpServer:                   ntpserver.yaml
   OntapS3:                     ontap_s3.yaml
+  OntapS3Policy:               ontap_s3_policy.yaml
   Port:                        port.yaml
   QosPolicyAdaptive:           qos_policy_adaptive.yaml
   QosPolicyFixed:              qos_policy_fixed.yaml
diff --git a/conf/restperf/9.12.0/fcp_lif.yaml b/conf/restperf/9.12.0/fcp_lif.yaml
index 9ae2b5f5..43fd86f1 100644
--- a/conf/restperf/9.12.0/fcp_lif.yaml
+++ b/conf/restperf/9.12.0/fcp_lif.yaml
@@ -22,6 +22,6 @@ counters:
 export_options:
   instance_keys:
     - lif
-    - svm
     - node
     - port
+    - svm
diff --git a/conf/restperf/9.12.0/hostadapter.yaml b/conf/restperf/9.12.0/hostadapter.yaml
index d8878e58..39653187 100644
--- a/conf/restperf/9.12.0/hostadapter.yaml
+++ b/conf/restperf/9.12.0/hostadapter.yaml
@@ -16,5 +16,5 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - hostadapter
+    - node
diff --git a/conf/restperf/9.12.0/lif.yaml b/conf/restperf/9.12.0/lif.yaml
index 5c87123f..d0fea0fe 100644
--- a/conf/restperf/9.12.0/lif.yaml
+++ b/conf/restperf/9.12.0/lif.yaml
@@ -19,5 +19,5 @@ export_options:
   instance_keys:
     - lif
     - node
-    - svm
     - port
+    - svm
diff --git a/conf/restperf/9.12.0/lun.yaml b/conf/restperf/9.12.0/lun.yaml
index 586399f6..6f506a6f 100644
--- a/conf/restperf/9.12.0/lun.yaml
+++ b/conf/restperf/9.12.0/lun.yaml
@@ -43,5 +43,5 @@ plugins:
 export_options:
   instance_keys:
     - lun # edited by plugin
-    - volume # added by plugin
     - svm
+    - volume # added by plugin
diff --git a/conf/restperf/9.12.0/namespace.yaml b/conf/restperf/9.12.0/namespace.yaml
index 763e6e77..78a07394 100644
--- a/conf/restperf/9.12.0/namespace.yaml
+++ b/conf/restperf/9.12.0/namespace.yaml
@@ -24,9 +24,8 @@ plugins:
 
 export_options:
   instance_keys:
-    - svm
-    - volume
     - namespace
     - path
-
+    - svm
+    - volume
 
diff --git a/conf/restperf/9.12.0/nic_common.yaml b/conf/restperf/9.12.0/nic_common.yaml
index 91ccb4c1..4b94427d 100644
--- a/conf/restperf/9.12.0/nic_common.yaml
+++ b/conf/restperf/9.12.0/nic_common.yaml
@@ -32,8 +32,8 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - nic
+    - node
   instance_labels:
     - speed
     - state
diff --git a/conf/restperf/9.12.0/nvmf_lif.yaml b/conf/restperf/9.12.0/nvmf_lif.yaml
index d5cc962c..4633b8ff 100644
--- a/conf/restperf/9.12.0/nvmf_lif.yaml
+++ b/conf/restperf/9.12.0/nvmf_lif.yaml
@@ -22,7 +22,7 @@ counters:
 export_options:
   instance_keys:
     - lif
-    - svm
     - node
     - port
+    - svm
 
diff --git a/conf/restperf/9.12.0/path.yaml b/conf/restperf/9.12.0/path.yaml
index 23afc4b4..36f79f72 100644
--- a/conf/restperf/9.12.0/path.yaml
+++ b/conf/restperf/9.12.0/path.yaml
@@ -23,7 +23,7 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - hostadapter # from plugin
+    - node
     - target_wwpn # from plugin
 
diff --git a/conf/restperf/9.12.0/qtree.yaml b/conf/restperf/9.12.0/qtree.yaml
index 8bbffb7e..cd413888 100644
--- a/conf/restperf/9.12.0/qtree.yaml
+++ b/conf/restperf/9.12.0/qtree.yaml
@@ -23,5 +23,5 @@ plugins:
 export_options:
   instance_keys:
     - qtree
-    - volume
-    - svm
\ No newline at end of file
+    - svm
+    - volume
\ No newline at end of file
diff --git a/conf/restperf/9.12.0/resource_headroom_aggr.yaml b/conf/restperf/9.12.0/resource_headroom_aggr.yaml
index ae3b1f47..dae9ad6f 100644
--- a/conf/restperf/9.12.0/resource_headroom_aggr.yaml
+++ b/conf/restperf/9.12.0/resource_headroom_aggr.yaml
@@ -24,6 +24,6 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - aggr
     - disk_type
+    - node
diff --git a/conf/restperf/9.12.0/resource_headroom_cpu.yaml b/conf/restperf/9.12.0/resource_headroom_cpu.yaml
index 6258d4c6..799766fe 100644
--- a/conf/restperf/9.12.0/resource_headroom_cpu.yaml
+++ b/conf/restperf/9.12.0/resource_headroom_cpu.yaml
@@ -20,5 +20,5 @@ counters:
 
 export_options:
   instance_keys:
-    - node
     - headroom
+    - node
diff --git a/conf/restperf/9.12.0/volume.yaml b/conf/restperf/9.12.0/volume.yaml
index cc4c837e..91acd0fd 100644
--- a/conf/restperf/9.12.0/volume.yaml
+++ b/conf/restperf/9.12.0/volume.yaml
@@ -44,8 +44,8 @@ plugins:
 
 export_options:
   instance_keys:
-    - volume
+    - aggr
     - node
+    - style
     - svm
-    - aggr
-    - style
\ No newline at end of file
+    - volume
\ No newline at end of file
diff --git a/conf/restperf/9.12.0/vscan.yaml b/conf/restperf/9.12.0/vscan.yaml
index 62a84d93..7bd36a04 100644
--- a/conf/restperf/9.12.0/vscan.yaml
+++ b/conf/restperf/9.12.0/vscan.yaml
@@ -18,6 +18,6 @@ plugins:
 
 export_options:
   instance_keys:
-    - svm
-    - scanner
     - node
+    - scanner
+    - svm
diff --git a/conf/restperf/9.12.0/wafl_hya_per_aggr.yaml b/conf/restperf/9.12.0/wafl_hya_per_aggr.yaml
index 24a89eda..650afe14 100644
--- a/conf/restperf/9.12.0/wafl_hya_per_aggr.yaml
+++ b/conf/restperf/9.12.0/wafl_hya_per_aggr.yaml
@@ -29,5 +29,5 @@ override:
 
 export_options:
   instance_keys:
-    - node
     - aggr
+    - node
diff --git a/conf/restperf/9.12.0/workload.yaml b/conf/restperf/9.12.0/workload.yaml
index 2655a004..ba598908 100644
--- a/conf/restperf/9.12.0/workload.yaml
+++ b/conf/restperf/9.12.0/workload.yaml
@@ -43,11 +43,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
diff --git a/conf/restperf/9.12.0/workload_detail.yaml b/conf/restperf/9.12.0/workload_detail.yaml
index f9793586..868a8b9a 100644
--- a/conf/restperf/9.12.0/workload_detail.yaml
+++ b/conf/restperf/9.12.0/workload_detail.yaml
@@ -61,11 +61,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
\ No newline at end of file
diff --git a/conf/restperf/9.12.0/workload_detail_volume.yaml b/conf/restperf/9.12.0/workload_detail_volume.yaml
index 28556fee..77cec93c 100644
--- a/conf/restperf/9.12.0/workload_detail_volume.yaml
+++ b/conf/restperf/9.12.0/workload_detail_volume.yaml
@@ -58,11 +58,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
diff --git a/conf/restperf/9.12.0/workload_volume.yaml b/conf/restperf/9.12.0/workload_volume.yaml
index 8565796f..e06f54af 100644
--- a/conf/restperf/9.12.0/workload_volume.yaml
+++ b/conf/restperf/9.12.0/workload_volume.yaml
@@ -44,11 +44,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
diff --git a/conf/zapi/7mode/8.6.0/aggr.yaml b/conf/zapi/7mode/8.6.0/aggr.yaml
index 1ae1e774..5ee92d64 100644
--- a/conf/zapi/7mode/8.6.0/aggr.yaml
+++ b/conf/zapi/7mode/8.6.0/aggr.yaml
@@ -62,5 +62,5 @@ export_options:
   instance_keys:
     - aggr
   instance_labels:
-    - type
     - state
+    - type
diff --git a/conf/zapi/7mode/8.6.0/disk.yaml b/conf/zapi/7mode/8.6.0/disk.yaml
index 09dc56b2..c6845752 100644
--- a/conf/zapi/7mode/8.6.0/disk.yaml
+++ b/conf/zapi/7mode/8.6.0/disk.yaml
@@ -28,10 +28,10 @@ export_options:
   instance_keys:
     - disk
   instance_labels:
-    - type
     - model
+    - offline
     - serial_number
     - shelf
-    - offline
+    - type
 
 
diff --git a/conf/zapi/7mode/8.6.0/lun.yaml b/conf/zapi/7mode/8.6.0/lun.yaml
index 057de28f..c4a1ef2f 100644
--- a/conf/zapi/7mode/8.6.0/lun.yaml
+++ b/conf/zapi/7mode/8.6.0/lun.yaml
@@ -26,8 +26,8 @@ plugins:
 
 export_options:
   instance_keys:
-    - qtree
     - lun
+    - qtree
     - volume
   instance_labels:
     - online
diff --git a/conf/zapi/7mode/8.6.0/node.yaml b/conf/zapi/7mode/8.6.0/node.yaml
index 0ddebe78..19a08e1b 100644
--- a/conf/zapi/7mode/8.6.0/node.yaml
+++ b/conf/zapi/7mode/8.6.0/node.yaml
@@ -21,8 +21,8 @@ export_options:
   require_instance_keys: false
   instance_labels:
     - max_aggr_size
-    - max_vol_size
     - max_vol_num
+    - max_vol_size
     - model
     - serial
     - vendor
diff --git a/conf/zapi/7mode/8.6.0/qtree.yaml b/conf/zapi/7mode/8.6.0/qtree.yaml
index 74e1ead1..fda14cf7 100644
--- a/conf/zapi/7mode/8.6.0/qtree.yaml
+++ b/conf/zapi/7mode/8.6.0/qtree.yaml
@@ -34,8 +34,8 @@ export_options:
     - volume
 
   instance_labels:
-    - svm
     - export_policy
     - oplocks
     - security_style
     - status
+    - svm
diff --git a/conf/zapi/7mode/8.6.0/shelf.yaml b/conf/zapi/7mode/8.6.0/shelf.yaml
index ff6856f5..abfdf7df 100644
--- a/conf/zapi/7mode/8.6.0/shelf.yaml
+++ b/conf/zapi/7mode/8.6.0/shelf.yaml
@@ -83,12 +83,12 @@ plugins:
 
 export_options:
   instance_keys:
+    - channel
     - shelf
     - shelf_id
-    - channel
   instance_labels:
+    - model
     - module_type
     - serial_number
-    - model
     - state
     - vendor_name
diff --git a/conf/zapi/7mode/8.6.0/status_7.yaml b/conf/zapi/7mode/8.6.0/status_7.yaml
index 9ba23905..b383efac 100644
--- a/conf/zapi/7mode/8.6.0/status_7.yaml
+++ b/conf/zapi/7mode/8.6.0/status_7.yaml
@@ -25,5 +25,5 @@ plugins:
 
 export_options:
   instance_keys:
-    - monitor
-    - health
\ No newline at end of file
+    - health
+    - monitor
\ No newline at end of file
diff --git a/conf/zapi/7mode/8.6.0/subsystem.yaml b/conf/zapi/7mode/8.6.0/subsystem.yaml
index 902c1ebc..47edd702 100644
--- a/conf/zapi/7mode/8.6.0/subsystem.yaml
+++ b/conf/zapi/7mode/8.6.0/subsystem.yaml
@@ -22,5 +22,5 @@ plugins:
 
 export_options:
   instance_keys:
-    - subsystem
     - health
+    - subsystem
diff --git a/conf/zapi/7mode/8.6.0/volume.yaml b/conf/zapi/7mode/8.6.0/volume.yaml
index 1ec2eb95..bb283e70 100644
--- a/conf/zapi/7mode/8.6.0/volume.yaml
+++ b/conf/zapi/7mode/8.6.0/volume.yaml
@@ -52,10 +52,10 @@ plugins:
 
 export_options:
   instance_keys:
-    - volume
-    - svm
     - aggr
     - style
+    - svm
+    - volume
   instance_labels:
     - state
 
diff --git a/conf/zapi/cdot/9.8.0/aggr.yaml b/conf/zapi/cdot/9.8.0/aggr.yaml
index 37e1e020..a2b4cfd3 100644
--- a/conf/zapi/cdot/9.8.0/aggr.yaml
+++ b/conf/zapi/cdot/9.8.0/aggr.yaml
@@ -73,6 +73,6 @@ export_options:
     - aggr
     - node
   instance_labels:
-    - type
-    - state
     - is_encrypted
+    - state
+    - type
diff --git a/conf/zapi/cdot/9.8.0/clusterpeer.yaml b/conf/zapi/cdot/9.8.0/clusterpeer.yaml
index d7b57518..2b12f063 100644
--- a/conf/zapi/cdot/9.8.0/clusterpeer.yaml
+++ b/conf/zapi/cdot/9.8.0/clusterpeer.yaml
@@ -21,5 +21,5 @@ export_options:
   instance_keys:
     - uuid
   instance_labels:
-    - name
-    - encryption_state
\ No newline at end of file
+    - encryption_state
+    - name
\ No newline at end of file
diff --git a/conf/zapi/cdot/9.8.0/disk.yaml b/conf/zapi/cdot/9.8.0/disk.yaml
index 0ed2691b..ca861e4c 100644
--- a/conf/zapi/cdot/9.8.0/disk.yaml
+++ b/conf/zapi/cdot/9.8.0/disk.yaml
@@ -42,17 +42,17 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - disk
     - index
+    - node
   instance_labels:
-    - type
+    - container_type
+    - failed
     - model
     - outage
     - owner_node
+    - serial_number
     - shared
     - shelf
     - shelf_bay
-    - serial_number
-    - failed
-    - container_type
+    - type
diff --git a/conf/zapi/cdot/9.8.0/lun.yaml b/conf/zapi/cdot/9.8.0/lun.yaml
index 463fef05..27ece4ae 100644
--- a/conf/zapi/cdot/9.8.0/lun.yaml
+++ b/conf/zapi/cdot/9.8.0/lun.yaml
@@ -30,10 +30,10 @@ plugins:
 
 export_options:
   instance_keys:
+    - lun
     - node
     - qtree
-    - lun
-    - volume
     - svm
+    - volume
   instance_labels:
     - state
diff --git a/conf/zapi/cdot/9.8.0/namespace.yaml b/conf/zapi/cdot/9.8.0/namespace.yaml
index 45ce89d4..023e1e43 100644
--- a/conf/zapi/cdot/9.8.0/namespace.yaml
+++ b/conf/zapi/cdot/9.8.0/namespace.yaml
@@ -27,17 +27,17 @@ plugins:
 
 export_options:
   instance_keys:
-    - uuid
+    - path
     - svm
+    - uuid
     - volume
-    - path
   instance_labels:
-    - nsid
-    - path
+    - is_read_only
     - node
+    - nsid
     - os_type
-    - is_read_only
+    - path
     - state
     - subsystem
-    - volume
     - svm
+    - volume
diff --git a/conf/zapi/cdot/9.8.0/node.yaml b/conf/zapi/cdot/9.8.0/node.yaml
index fa1a252e..daac41d5 100644
--- a/conf/zapi/cdot/9.8.0/node.yaml
+++ b/conf/zapi/cdot/9.8.0/node.yaml
@@ -51,14 +51,14 @@ export_options:
   instance_keys:
     - node
   instance_labels:
-    - max_aggr_size
-    - max_vol_size
-    - max_vol_num
-    - warnings
     - healthy
     - location
+    - max_aggr_size
+    - max_vol_num
+    - max_vol_size
     - model
     - serial
     - uptime
     - vendor
     - version
+    - warnings
diff --git a/conf/zapi/cdot/9.8.0/qos_policy_adaptive.yaml b/conf/zapi/cdot/9.8.0/qos_policy_adaptive.yaml
index 69675acb..2f2824d9 100644
--- a/conf/zapi/cdot/9.8.0/qos_policy_adaptive.yaml
+++ b/conf/zapi/cdot/9.8.0/qos_policy_adaptive.yaml
@@ -24,10 +24,10 @@ export_options:
   instance_keys:
     - svm
   instance_labels:
-    - name
     - absolute_min_iops
     - expected_iops
     - expected_iops_allocation
+    - name
     - object_count
     - peak_iops
     - peak_iops_allocation
diff --git a/conf/zapi/cdot/9.8.0/qos_policy_fixed.yaml b/conf/zapi/cdot/9.8.0/qos_policy_fixed.yaml
index 5a1728c5..1a3a1924 100644
--- a/conf/zapi/cdot/9.8.0/qos_policy_fixed.yaml
+++ b/conf/zapi/cdot/9.8.0/qos_policy_fixed.yaml
@@ -23,11 +23,11 @@ export_options:
   instance_keys:
     - svm
   instance_labels:
-    - name
     - capacity_shared
+    - class
     - max_throughput_iops
     - max_throughput_mbps
     - min_throughput_iops
     - min_throughput_mbps
-    - object_count
-    - class
\ No newline at end of file
+    - name
+    - object_count
\ No newline at end of file
diff --git a/conf/zapi/cdot/9.8.0/qtree.yaml b/conf/zapi/cdot/9.8.0/qtree.yaml
index b43764be..55ce2308 100644
--- a/conf/zapi/cdot/9.8.0/qtree.yaml
+++ b/conf/zapi/cdot/9.8.0/qtree.yaml
@@ -43,9 +43,8 @@ plugins:
 export_options:
   instance_keys:
     - qtree
-    - volume
     - svm
-
+    - volume
   instance_labels:
     - export_policy
     - oplocks
diff --git a/conf/zapi/cdot/9.8.0/security.yaml b/conf/zapi/cdot/9.8.0/security.yaml
index 99ab347c..a7acaf7a 100644
--- a/conf/zapi/cdot/9.8.0/security.yaml
+++ b/conf/zapi/cdot/9.8.0/security.yaml
@@ -19,5 +19,5 @@ export_options:
     - uuid
   instance_labels:
     - fips_enabled
-    - telnet_enabled
-    - rsh_enabled
\ No newline at end of file
+    - rsh_enabled
+    - telnet_enabled
\ No newline at end of file
diff --git a/conf/zapi/cdot/9.8.0/security_account.yaml b/conf/zapi/cdot/9.8.0/security_account.yaml
index 432de869..9be6a293 100644
--- a/conf/zapi/cdot/9.8.0/security_account.yaml
+++ b/conf/zapi/cdot/9.8.0/security_account.yaml
@@ -27,12 +27,12 @@ plugins:
 
 export_options:
   instance_keys:
-    - user_name
     - applications
-    - svm
     - methods
     - remote_switch_ipaddress
+    - svm
+    - user_name
   instance_labels:
-    - role_name
     - hash_algorithm
-    - locked
\ No newline at end of file
+    - locked
+    - role_name
\ No newline at end of file
diff --git a/conf/zapi/cdot/9.8.0/security_certificate.yaml b/conf/zapi/cdot/9.8.0/security_certificate.yaml
index bc1cb069..67108e50 100644
--- a/conf/zapi/cdot/9.8.0/security_certificate.yaml
+++ b/conf/zapi/cdot/9.8.0/security_certificate.yaml
@@ -23,9 +23,9 @@ plugins:
 export_options:
   instance_keys:
     - name
-    - svm
     - serial_number
+    - svm
   instance_labels:
-    - type
-    - certificateIssuerType
     - certificateExpiryStatus
+    - certificateIssuerType
+    - type
diff --git a/conf/zapi/cdot/9.8.0/shelf.yaml b/conf/zapi/cdot/9.8.0/shelf.yaml
index 6ae3c354..a3656ea4 100644
--- a/conf/zapi/cdot/9.8.0/shelf.yaml
+++ b/conf/zapi/cdot/9.8.0/shelf.yaml
@@ -26,10 +26,10 @@ export_options:
   instance_keys:
     - shelf
   instance_labels:
+    - model
     - module_type
+    - op_status
     - serial_number
-    - model
     - state
-    - op_status
     - vendor_name
 
diff --git a/conf/zapi/cdot/9.8.0/snapmirror.yaml b/conf/zapi/cdot/9.8.0/snapmirror.yaml
index f1ccc8e2..dce7b1b2 100644
--- a/conf/zapi/cdot/9.8.0/snapmirror.yaml
+++ b/conf/zapi/cdot/9.8.0/snapmirror.yaml
@@ -37,28 +37,28 @@ plugins:
   - Snapmirror
 export_options:
   instance_keys:
-    - relationship_id
-    - destination_volume
+    - destination_location
     - destination_node
+    - destination_volume
     - destination_vserver
+    - relationship_id
+    - source_cluster
+    - source_node
     - source_volume
     - source_vserver
-    - source_node
-    - source_cluster
-    - destination_location
   instance_labels:
+    - derived_relationship_type
+    - destination_node_limit
+    - group_type
     - healthy
-    - unhealthy_reason
     - last_transfer_type
+    - local
+    - policy_type
+    - protectedBy
+    - protectionSourceType
     - relationship_status
     - relationship_type
     - schedule
-    - destination_node_limit
     - source_node_limit
-    - group_type
-    - protectedBy
-    - protectionSourceType
-    - policy_type
-    - derived_relationship_type
-    - local
+    - unhealthy_reason
     
\ No newline at end of file
diff --git a/conf/zapi/cdot/9.8.0/snapshotpolicy.yaml b/conf/zapi/cdot/9.8.0/snapshotpolicy.yaml
index c3a09089..1c9d598b 100644
--- a/conf/zapi/cdot/9.8.0/snapshotpolicy.yaml
+++ b/conf/zapi/cdot/9.8.0/snapshotpolicy.yaml
@@ -12,8 +12,8 @@ counters:
 
 export_options:
   instance_keys:
-    - svm
-    - snapshot_policy
     - comment
+    - snapshot_policy
+    - svm
 
 
diff --git a/conf/zapi/cdot/9.8.0/subsystem.yaml b/conf/zapi/cdot/9.8.0/subsystem.yaml
index ebbe543f..0ce58cad 100644
--- a/conf/zapi/cdot/9.8.0/subsystem.yaml
+++ b/conf/zapi/cdot/9.8.0/subsystem.yaml
@@ -18,5 +18,5 @@ plugins:
 
 export_options:
   instance_keys:
-    - subsystem
     - health
+    - subsystem
diff --git a/conf/zapi/cdot/9.8.0/svm.yaml b/conf/zapi/cdot/9.8.0/svm.yaml
index cec7c576..d402738c 100644
--- a/conf/zapi/cdot/9.8.0/svm.yaml
+++ b/conf/zapi/cdot/9.8.0/svm.yaml
@@ -34,25 +34,25 @@ export_options:
   instance_keys:
     - svm
   instance_labels:
-    - state
     - anti_ransomware_state
-    - nis_authentication_enabled
     - audit_protocol_enabled
     - cifs_ntlm_enabled
     - cifs_protocol_enabled
-    - nfs_protocol_enabled
-    - nis_domain
-    - ns_source
-    - ns_db
     - ciphers
-    - iscsi_authentication_type
-    - iscsi_service_enabled
     - fpolicy_enabled
     - fpolicy_name
+    - iscsi_authentication_type
+    - iscsi_service_enabled
     - ldap_session_security
     - nfs_kerberos_protocol_enabled
+    - nfs_protocol_enabled
+    - nis_authentication_enabled
+    - nis_domain
+    - ns_db
+    - ns_source
+    - root_svm
     - smb_encryption_required
     - smb_signing_required
+    - state
     - type
-    - root_svm
 
diff --git a/conf/zapi/cdot/9.8.0/volume.yaml b/conf/zapi/cdot/9.8.0/volume.yaml
index d58a3eaf..5222fbbf 100644
--- a/conf/zapi/cdot/9.8.0/volume.yaml
+++ b/conf/zapi/cdot/9.8.0/volume.yaml
@@ -106,19 +106,18 @@ plugins:
 
 export_options:
   instance_keys:
-    - volume
-    - node
-    - svm
     - aggr
+    - node
     - style
+    - svm
+    - volume
   instance_labels:
-    - state
-    - is_sis_volume
-    - snapshot_policy
-    - type
     - isEncrypted
     - isHardwareEncrypted
-    - svm_root
+    - is_sis_volume
     - node_root
     - root_volume
-
+    - snapshot_policy
+    - state
+    - svm_root
+    - type
diff --git a/conf/zapiperf/7mode/8.2.5/disk.yaml b/conf/zapiperf/7mode/8.2.5/disk.yaml
index e8c7d4a6..c10c3626 100644
--- a/conf/zapiperf/7mode/8.2.5/disk.yaml
+++ b/conf/zapiperf/7mode/8.2.5/disk.yaml
@@ -42,8 +42,8 @@ export_options:
   instance_keys:
     - aggr
     - disk
-    - raid
     - plex
+    - raid
   instance_labels:
     - disk_speed
     - raid_type
diff --git a/conf/zapiperf/7mode/8.2.5/volume.yaml b/conf/zapiperf/7mode/8.2.5/volume.yaml
index fe1fbb93..76baa07c 100644
--- a/conf/zapiperf/7mode/8.2.5/volume.yaml
+++ b/conf/zapiperf/7mode/8.2.5/volume.yaml
@@ -43,7 +43,7 @@ plugins:
 
 export_options:
   instance_keys:
-    - volume
     - aggr
     - style
     - svm
+    - volume
diff --git a/conf/zapiperf/cdot/9.10.1/namespace.yaml b/conf/zapiperf/cdot/9.10.1/namespace.yaml
index ce9a422b..608fd779 100644
--- a/conf/zapiperf/cdot/9.10.1/namespace.yaml
+++ b/conf/zapiperf/cdot/9.10.1/namespace.yaml
@@ -25,9 +25,9 @@ plugins:
 
 export_options:
   instance_keys:
-    - svm
-    - volume
     - namespace
     - path
+    - svm
+    - volume
 
 
diff --git a/conf/zapiperf/cdot/9.10.1/nvmf_lif.yaml b/conf/zapiperf/cdot/9.10.1/nvmf_lif.yaml
index fb8987c2..782967c5 100644
--- a/conf/zapiperf/cdot/9.10.1/nvmf_lif.yaml
+++ b/conf/zapiperf/cdot/9.10.1/nvmf_lif.yaml
@@ -24,7 +24,7 @@ counters:
 export_options:
   instance_keys:
     - lif
-    - svm
     - node
     - port
+    - svm
 
diff --git a/conf/zapiperf/cdot/9.8.0/fcp_lif.yaml b/conf/zapiperf/cdot/9.8.0/fcp_lif.yaml
index d91a0bb9..2e69c2c8 100644
--- a/conf/zapiperf/cdot/9.8.0/fcp_lif.yaml
+++ b/conf/zapiperf/cdot/9.8.0/fcp_lif.yaml
@@ -26,6 +26,6 @@ counters:
 export_options:
   instance_keys:
     - lif
-    - svm
     - node
     - port
+    - svm
diff --git a/conf/zapiperf/cdot/9.8.0/hostadapter.yaml b/conf/zapiperf/cdot/9.8.0/hostadapter.yaml
index d10d4c8a..2b339e47 100644
--- a/conf/zapiperf/cdot/9.8.0/hostadapter.yaml
+++ b/conf/zapiperf/cdot/9.8.0/hostadapter.yaml
@@ -13,5 +13,5 @@ counters:
 
 export_options:
   instance_keys:
-    - node
     - hostadapter
+    - node
diff --git a/conf/zapiperf/cdot/9.8.0/lif.yaml b/conf/zapiperf/cdot/9.8.0/lif.yaml
index 4c3e5c4c..2d925c41 100644
--- a/conf/zapiperf/cdot/9.8.0/lif.yaml
+++ b/conf/zapiperf/cdot/9.8.0/lif.yaml
@@ -20,5 +20,5 @@ export_options:
   instance_keys:
     - lif
     - node
-    - svm
     - port
+    - svm
diff --git a/conf/zapiperf/cdot/9.8.0/lun.yaml b/conf/zapiperf/cdot/9.8.0/lun.yaml
index fd0c84f3..14c8def9 100644
--- a/conf/zapiperf/cdot/9.8.0/lun.yaml
+++ b/conf/zapiperf/cdot/9.8.0/lun.yaml
@@ -43,5 +43,5 @@ plugins:
 export_options:
   instance_keys:
     - lun # edited by plugin
-    - volume # added by plugin
     - svm
+    - volume # added by plugin
diff --git a/conf/zapiperf/cdot/9.8.0/netstat.yaml b/conf/zapiperf/cdot/9.8.0/netstat.yaml
index 9679825b..e8297535 100644
--- a/conf/zapiperf/cdot/9.8.0/netstat.yaml
+++ b/conf/zapiperf/cdot/9.8.0/netstat.yaml
@@ -33,6 +33,6 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - faddr
-    - laddr
\ No newline at end of file
+    - laddr
+    - node
\ No newline at end of file
diff --git a/conf/zapiperf/cdot/9.8.0/nic_common.yaml b/conf/zapiperf/cdot/9.8.0/nic_common.yaml
index 9b686b19..7cd0bd87 100644
--- a/conf/zapiperf/cdot/9.8.0/nic_common.yaml
+++ b/conf/zapiperf/cdot/9.8.0/nic_common.yaml
@@ -36,8 +36,8 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - nic
+    - node
   instance_labels:
     - speed
     - state
diff --git a/conf/zapiperf/cdot/9.8.0/object_store_client_op.yaml b/conf/zapiperf/cdot/9.8.0/object_store_client_op.yaml
index 56545cc6..9b376dfd 100644
--- a/conf/zapiperf/cdot/9.8.0/object_store_client_op.yaml
+++ b/conf/zapiperf/cdot/9.8.0/object_store_client_op.yaml
@@ -17,5 +17,5 @@ counters:
 
 export_options:
   instance_keys:
-    - node
     - fabricpool
+    - node
diff --git a/conf/zapiperf/cdot/9.8.0/path.yaml b/conf/zapiperf/cdot/9.8.0/path.yaml
index 8dbd801c..41494b54 100644
--- a/conf/zapiperf/cdot/9.8.0/path.yaml
+++ b/conf/zapiperf/cdot/9.8.0/path.yaml
@@ -25,7 +25,7 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - hostadapter # from plugin
+    - node
     - target_wwpn # from plugin
 
diff --git a/conf/zapiperf/cdot/9.8.0/qtree.yaml b/conf/zapiperf/cdot/9.8.0/qtree.yaml
index 37694b3d..3407c6c2 100644
--- a/conf/zapiperf/cdot/9.8.0/qtree.yaml
+++ b/conf/zapiperf/cdot/9.8.0/qtree.yaml
@@ -22,5 +22,5 @@ plugins:
 export_options:
   instance_keys:
     - qtree
-    - volume
-    - svm
\ No newline at end of file
+    - svm
+    - volume
\ No newline at end of file
diff --git a/conf/zapiperf/cdot/9.8.0/resource_headroom_aggr.yaml b/conf/zapiperf/cdot/9.8.0/resource_headroom_aggr.yaml
index c8dceca7..353051d6 100644
--- a/conf/zapiperf/cdot/9.8.0/resource_headroom_aggr.yaml
+++ b/conf/zapiperf/cdot/9.8.0/resource_headroom_aggr.yaml
@@ -22,6 +22,6 @@ plugins:
 
 export_options:
   instance_keys:
-    - node
     - aggr
     - disk_type
+    - node
diff --git a/conf/zapiperf/cdot/9.8.0/volume.yaml b/conf/zapiperf/cdot/9.8.0/volume.yaml
index 4f13d71e..2f511c56 100644
--- a/conf/zapiperf/cdot/9.8.0/volume.yaml
+++ b/conf/zapiperf/cdot/9.8.0/volume.yaml
@@ -46,8 +46,8 @@ plugins:
 
 export_options:
   instance_keys:
-    - volume
-    - node
-    - svm
     - aggr
+    - node
     - style
+    - svm
+    - volume
diff --git a/conf/zapiperf/cdot/9.8.0/vscan.yaml b/conf/zapiperf/cdot/9.8.0/vscan.yaml
index 941ec9dd..4acbe76a 100644
--- a/conf/zapiperf/cdot/9.8.0/vscan.yaml
+++ b/conf/zapiperf/cdot/9.8.0/vscan.yaml
@@ -22,6 +22,6 @@ plugins:
 
 export_options:
   instance_keys:
-    - svm
-    - scanner
     - node
+    - scanner
+    - svm
diff --git a/conf/zapiperf/cdot/9.8.0/wafl_hya_per_aggr.yaml b/conf/zapiperf/cdot/9.8.0/wafl_hya_per_aggr.yaml
index 45f88b01..162a7691 100644
--- a/conf/zapiperf/cdot/9.8.0/wafl_hya_per_aggr.yaml
+++ b/conf/zapiperf/cdot/9.8.0/wafl_hya_per_aggr.yaml
@@ -30,5 +30,5 @@ override:
 
 export_options:
   instance_keys:
-    - node
     - aggr
+    - node
diff --git a/conf/zapiperf/cdot/9.8.0/workload.yaml b/conf/zapiperf/cdot/9.8.0/workload.yaml
index 65d0e629..037e12cb 100644
--- a/conf/zapiperf/cdot/9.8.0/workload.yaml
+++ b/conf/zapiperf/cdot/9.8.0/workload.yaml
@@ -46,11 +46,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
diff --git a/conf/zapiperf/cdot/9.8.0/workload_detail.yaml b/conf/zapiperf/cdot/9.8.0/workload_detail.yaml
index 1fbd6872..c7fcd28d 100644
--- a/conf/zapiperf/cdot/9.8.0/workload_detail.yaml
+++ b/conf/zapiperf/cdot/9.8.0/workload_detail.yaml
@@ -62,11 +62,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
diff --git a/conf/zapiperf/cdot/9.8.0/workload_detail_volume.yaml b/conf/zapiperf/cdot/9.8.0/workload_detail_volume.yaml
index fc521965..08199192 100644
--- a/conf/zapiperf/cdot/9.8.0/workload_detail_volume.yaml
+++ b/conf/zapiperf/cdot/9.8.0/workload_detail_volume.yaml
@@ -60,11 +60,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
diff --git a/conf/zapiperf/cdot/9.8.0/workload_volume.yaml b/conf/zapiperf/cdot/9.8.0/workload_volume.yaml
index 7bb5e8bc..4291e041 100644
--- a/conf/zapiperf/cdot/9.8.0/workload_volume.yaml
+++ b/conf/zapiperf/cdot/9.8.0/workload_volume.yaml
@@ -47,11 +47,11 @@ qos_labels:
 
 export_options:
   instance_keys:
-    - wid
-    - svm
-    - volume
-    - qtree
-    - lun
     - file
+    - lun
     - policy_group
+    - qtree
+    - svm
+    - volume
+    - wid
     - workload
diff --git a/grafana/dashboards/cmode/health.json b/grafana/dashboards/cmode/health.json
new file mode 100644
index 00000000..6f9f3dbb
--- /dev/null
+++ b/grafana/dashboards/cmode/health.json
@@ -0,0 +1,3219 @@
+{
+  "__inputs": [
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "Prometheus",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
+    }
+  ],
+  "__requires": [
+    {
+      "type": "grafana",
+      "id": "grafana",
+      "name": "Grafana",
+      "version": "8.1.8"
+    },
+    {
+      "type": "panel",
+      "id": "piechart",
+      "name": "Pie chart",
+      "version": ""
+    },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    },
+    {
+      "type": "panel",
+      "id": "stat",
+      "name": "Stat",
+      "version": ""
+    },
+    {
+      "type": "panel",
+      "id": "table",
+      "name": "Table",
+      "version": ""
+    },
+    {
+      "type": "panel",
+      "id": "text",
+      "name": "Text",
+      "version": ""
+    }
+  ],
+  "annotations": {
+    "list": [
+      {
+        "builtIn": 1,
+        "datasource": "-- Grafana --",
+        "enable": true,
+        "hide": true,
+        "iconColor": "rgba(0, 211, 255, 1)",
+        "name": "Annotations & Alerts",
+        "target": {
+          "limit": 100,
+          "matchAny": false,
+          "tags": [],
+          "type": "dashboard"
+        },
+        "type": "dashboard"
+      }
+    ]
+  },
+  "description": "",
+  "editable": true,
+  "gnetId": null,
+  "graphTooltip": 1,
+  "id": null,
+  "iteration": 1681133194625,
+  "links": [
+    {
+      "asDropdown": true,
+      "icon": "external link",
+      "includeVars": true,
+      "keepTime": true,
+      "tags": [
+        "cdot"
+      ],
+      "targetBlank": false,
+      "title": "Related Dashboards",
+      "tooltip": "",
+      "type": "dashboards",
+      "url": ""
+    }
+  ],
+  "panels": [
+    {
+      "collapsed": false,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 0
+      },
+      "id": 239,
+      "panels": [],
+      "title": "Important Information about Health Dashboard",
+      "type": "row"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "gridPos": {
+        "h": 3,
+        "w": 24,
+        "x": 0,
+        "y": 1
+      },
+      "id": 241,
+      "options": {
+        "content": "This dashboard requires ONTAP 9.6+ and the REST collector. Two actions are required to use this dashboard: <br>1. Enable the REST collector in your harvest.yml config<br>2. Enable the EMS collector in your harvest.yml config for EMS events<br>",
+        "mode": "markdown"
+      },
+      "pluginVersion": "8.1.8",
+      "type": "text"
+    },
+    {
+      "collapsed": false,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 4
+      },
+      "id": 225,
+      "panels": [],
+      "title": "Highlights",
+      "type": "row"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 0,
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-red",
+                "value": null
+              }
+            ]
+          },
+          "unit": "locale"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "green",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes not protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "yellow",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 6,
+        "w": 8,
+        "x": 0,
+        "y": 5
+      },
+      "id": 277,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.8",
+      "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_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))",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Total Errors",
+      "transformations": [],
+      "type": "stat"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 0,
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "orange",
+                "value": null
+              }
+            ]
+          },
+          "unit": "locale"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "green",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes not protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "yellow",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 6,
+        "w": 8,
+        "x": 8,
+        "y": 5
+      },
+      "id": 278,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.8",
+      "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_network_interface_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))",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Total Warnings",
+      "transformations": [],
+      "type": "stat"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "$EMSDescription",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 0,
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-red",
+                "value": null
+              }
+            ]
+          },
+          "unit": "locale"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes not protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "yellow",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 6,
+        "w": 8,
+        "x": 16,
+        "y": 5
+      },
+      "id": 270,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.8",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "(count(last_over_time(ems_events{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"emergency\"}[$__range]) == 1) or vector(0))",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Total Active Emergency EMS",
+      "transformations": [],
+      "type": "stat"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            }
+          },
+          "decimals": 0,
+          "mappings": [],
+          "unit": "locale"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 16,
+        "w": 8,
+        "x": 0,
+        "y": 11
+      },
+      "id": 268,
+      "options": {
+        "displayLabels": [
+          "value"
+        ],
+        "legend": {
+          "displayMode": "table",
+          "placement": "bottom",
+          "values": [
+            "value"
+          ]
+        },
+        "pieType": "donut",
+        "reduceOptions": {
+          "calcs": [
+            "last"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "tooltip": {
+          "mode": "single"
+        }
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Broken Disk",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Shelf Error",
+          "refId": "B"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Node Down",
+          "refId": "D"
+        },
+        {
+          "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))",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Network Port Down",
+          "refId": "E"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "License Non Compliant",
+          "refId": "C"
+        }
+      ],
+      "title": "Errors",
+      "transformations": [],
+      "type": "piechart"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            }
+          },
+          "decimals": 0,
+          "mappings": [],
+          "unit": "locale"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "green",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes not protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "yellow",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 16,
+        "w": 8,
+        "x": 8,
+        "y": 11
+      },
+      "id": 269,
+      "options": {
+        "displayLabels": [
+          "value"
+        ],
+        "legend": {
+          "displayMode": "table",
+          "placement": "bottom",
+          "values": [
+            "value"
+          ]
+        },
+        "pieType": "donut",
+        "reduceOptions": {
+          "calcs": [
+            "last"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "tooltip": {
+          "mode": "single"
+        }
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Unassigned Disk",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Shelf Warning",
+          "refId": "B"
+        },
+        {
+          "exemplar": false,
+          "expr": "(count(last_over_time(health_support_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}[24h]) == 1) or vector(0))",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Health Monitor Alerts (last 24h)",
+          "refId": "C"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(health_network_interface_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Network Interface are not at home port",
+          "refId": "D"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(health_volume_move_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"warning\"}) or vector(0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Volume Move Alerts",
+          "refId": "E"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(health_volume_ransomware_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"error\"}) or vector(0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Volume Ransomware (9.10+)",
+          "refId": "F"
+        }
+      ],
+      "title": "Warnings",
+      "transformations": [],
+      "type": "piechart"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "$EMSDescription",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "auto"
+          },
+          "decimals": 0,
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "locale"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "green",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volumes not protected"
+            },
+            "properties": [
+              {
+                "id": "color",
+                "value": {
+                  "fixedColor": "yellow",
+                  "mode": "fixed"
+                }
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 16,
+        "w": 8,
+        "x": 16,
+        "y": 11
+      },
+      "id": 272,
+      "options": {
+        "showHeader": true
+      },
+      "pluginVersion": "8.1.8",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(last_over_time(ems_events{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"emergency\"}[$__range]) == 1) by (message)",
+          "format": "table",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Active Emergency EMS",
+      "transformations": [
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Time": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "Value": "Count",
+              "message": "EMS"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 27
+      },
+      "id": 251,
+      "panels": [
+        {
+          "datasource": null,
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto"
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  }
+                ]
+              }
+            },
+            "overrides": [
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Healthy"
+                },
+                "properties": [
+                  {
+                    "id": "mappings",
+                    "value": [
+                      {
+                        "options": {
+                          "false": {
+                            "index": 0,
+                            "text": "No"
+                          }
+                        },
+                        "type": "value"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 6,
+            "w": 24,
+            "x": 0,
+            "y": 19
+          },
+          "id": 253,
+          "options": {
+            "showHeader": true
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "node_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(cluster,node,datacenter) group_left(severity) health_node_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "Node Issues",
+          "transformations": [
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "instance": true,
+                  "job": true
+                },
+                "indexByName": {
+                  "Time": 0,
+                  "Value": 10,
+                  "cluster": 1,
+                  "datacenter": 2,
+                  "healthy": 4,
+                  "instance": 8,
+                  "job": 9,
+                  "node": 3,
+                  "severity": 6,
+                  "state": 5,
+                  "version": 7
+                },
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "datacenter": "Datacenter",
+                  "healthy": "Healthy",
+                  "node": "Node",
+                  "severity": "Severity",
+                  "state": "State",
+                  "version": "Version"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Node",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 28
+      },
+      "id": 230,
+      "panels": [
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto",
+                "filterable": true
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              }
+            },
+            "overrides": [
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Datacenter"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "string"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Shelf"
+                },
+                "properties": [
+                  {
+                    "id": "custom.width",
+                    "value": null
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 9,
+            "w": 24,
+            "x": 0,
+            "y": 29
+          },
+          "id": 248,
+          "options": {
+            "showHeader": true,
+            "sortBy": []
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "disk_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(disk,cluster,datacenter) group_left(severity) health_disk_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "Disks Issues",
+          "transformations": [
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "failed": true,
+                  "index": true,
+                  "instance": true,
+                  "job": true,
+                  "node": true,
+                  "owner_node": true
+                },
+                "indexByName": {
+                  "Time": 0,
+                  "Value": 11,
+                  "cluster": 2,
+                  "container_type": 5,
+                  "datacenter": 1,
+                  "disk": 3,
+                  "instance": 9,
+                  "job": 10,
+                  "model": 8,
+                  "serial_number": 7,
+                  "severity": 4,
+                  "shelf": 6
+                },
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "container_type": "Container Type",
+                  "datacenter": "Datacenter",
+                  "disk": "Disk",
+                  "model": "Model",
+                  "serial_number": "Serial Number",
+                  "severity": "Severity",
+                  "shelf": "Shelf"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Disks",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 29
+      },
+      "id": 245,
+      "panels": [
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "description": "",
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "left",
+                "displayMode": "auto",
+                "filterable": true
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "semi-dark-yellow",
+                    "value": null
+                  }
+                ]
+              },
+              "unit": "none"
+            },
+            "overrides": [
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "disk_count"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "locale"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "shelf"
+                },
+                "properties": [
+                  {
+                    "id": "custom.displayMode",
+                    "value": "json-view"
+                  },
+                  {
+                    "id": "custom.width"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "state"
+                },
+                "properties": [
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background"
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "rgb(224, 47, 47)",
+                          "value": null
+                        },
+                        {
+                          "color": "rgb(118, 204, 49)",
+                          "value": 1
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "mappings",
+                    "value": [
+                      {
+                        "options": {
+                          "1": {
+                            "text": "ONLINE"
+                          }
+                        },
+                        "type": "value"
+                      },
+                      {
+                        "options": {
+                          "from": 0,
+                          "result": {
+                            "text": "OFFLINE"
+                          },
+                          "to": 0.999
+                        },
+                        "type": "range"
+                      }
+                    ]
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Avg Ambient Temp (C)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background"
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "transparent",
+                          "value": null
+                        },
+                        {
+                          "color": "green",
+                          "value": 5
+                        },
+                        {
+                          "color": "#EAB839",
+                          "value": 45
+                        },
+                        {
+                          "color": "orange",
+                          "value": 65
+                        },
+                        {
+                          "color": "red",
+                          "value": 75
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "celsius"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Max Temp (C)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background"
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "transparent",
+                          "value": null
+                        },
+                        {
+                          "color": "green",
+                          "value": 5
+                        },
+                        {
+                          "color": "yellow",
+                          "value": 45
+                        },
+                        {
+                          "color": "orange",
+                          "value": 65
+                        },
+                        {
+                          "color": "red",
+                          "value": 75
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "celsius"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Avg Temp (C)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background"
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "transparent",
+                          "value": null
+                        },
+                        {
+                          "color": "green",
+                          "value": 5
+                        },
+                        {
+                          "color": "yellow",
+                          "value": 45
+                        },
+                        {
+                          "color": "orange",
+                          "value": 65
+                        },
+                        {
+                          "color": "red",
+                          "value": 75
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "celsius"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Max Fan Speed (rpm)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "rotrpm"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Avg Fan Speed (rpm)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "rotrpm"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Min Fan Speed (rpm)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "rotrpm"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Power"
+                },
+                "properties": [
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "watt"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Min Ambient Temp (C)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background"
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "transparent",
+                          "value": null
+                        },
+                        {
+                          "color": "green",
+                          "value": 5
+                        },
+                        {
+                          "color": "#eab839",
+                          "value": 45
+                        },
+                        {
+                          "color": "orange",
+                          "value": 65
+                        },
+                        {
+                          "color": "red",
+                          "value": 75
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "celsius"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Min Temp (C)"
+                },
+                "properties": [
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background"
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "transparent",
+                          "value": null
+                        },
+                        {
+                          "color": "green",
+                          "value": 5
+                        },
+                        {
+                          "color": "yellow",
+                          "value": 45
+                        },
+                        {
+                          "color": "orange",
+                          "value": 65
+                        },
+                        {
+                          "color": "red",
+                          "value": 75
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "custom.align",
+                    "value": "right"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "celsius"
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 7,
+            "w": 24,
+            "x": 0,
+            "y": 21
+          },
+          "id": 243,
+          "interval": "1m",
+          "maxDataPoints": 2,
+          "options": {
+            "footer": {
+              "fields": "",
+              "reducer": [
+                "sum"
+              ],
+              "show": false
+            },
+            "showHeader": true,
+            "sortBy": []
+          },
+          "pluginVersion": "8.1.8",
+          "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\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            },
+            {
+              "exemplar": false,
+              "expr": "shelf_disk_count{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "B"
+            },
+            {
+              "exemplar": false,
+              "expr": "shelf_new_status{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "C"
+            },
+            {
+              "exemplar": false,
+              "expr": "shelf_power{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "D"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "E"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "K"
+            },
+            {
+              "exemplar": false,
+              "expr": "shelf_max_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "F"
+            },
+            {
+              "exemplar": false,
+              "expr": "shelf_average_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "G"
+            },
+            {
+              "exemplar": false,
+              "expr": "shelf_min_temperature{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} * on(shelf,cluster,datacenter) group_left(severity) health_shelf_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "L"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "H"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "I"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "J"
+            }
+          ],
+          "title": "Storage Shelf Issues",
+          "transformations": [
+            {
+              "id": "filterFieldsByName",
+              "options": {
+                "include": {
+                  "names": [
+                    "cluster",
+                    "datacenter",
+                    "model",
+                    "module_type",
+                    "op_status",
+                    "serial_number",
+                    "shelf",
+                    "state",
+                    "vendor_name",
+                    "Value #A",
+                    "Value #B",
+                    "Value #C",
+                    "error_text",
+                    "error_type",
+                    "severity"
+                  ]
+                }
+              }
+            },
+            {
+              "id": "merge",
+              "options": {}
+            },
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Value #A": true,
+                  "shelf_id": true,
+                  "state": true
+                },
+                "indexByName": {
+                  "Value #A": 13,
+                  "Value #B": 10,
+                  "Value #C": 14,
+                  "cluster": 1,
+                  "datacenter": 0,
+                  "error_text": 3,
+                  "error_type": 4,
+                  "model": 6,
+                  "module_type": 9,
+                  "op_status": 11,
+                  "serial_number": 7,
+                  "severity": 5,
+                  "shelf": 2,
+                  "state": 12,
+                  "vendor_name": 8
+                },
+                "renameByName": {
+                  "Value #A": "",
+                  "Value #B": "disk_count",
+                  "Value #C": "state",
+                  "Value #D": "Power",
+                  "Value #E": "Avg Ambient Temp (C)",
+                  "Value #F": "Max Temp (C)",
+                  "Value #G": "Avg Temp (C)",
+                  "Value #H": "Max Fan Speed (rpm)",
+                  "Value #I": "Avg Fan Speed (rpm)",
+                  "Value #J": "Min Fan Speed (rpm)",
+                  "Value #K": "Min Ambient Temp (C)",
+                  "Value #L": "Min Temp (C)",
+                  "error_text": "Error",
+                  "error_type": "Error Type",
+                  "module_type": "",
+                  "op_status": "",
+                  "severity": "Severity",
+                  "shelf_id": ""
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Shelves",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 30
+      },
+      "id": 266,
+      "panels": [
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "description": "Volumes with abnormal activity",
+          "fieldConfig": {
+            "defaults": {
+              "custom": {
+                "align": "left",
+                "displayMode": "auto",
+                "filterable": false
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "rgb(31, 176, 196)",
+                    "value": null
+                  }
+                ]
+              },
+              "unit": "none"
+            },
+            "overrides": [
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Value #A"
+                },
+                "properties": [
+                  {
+                    "id": "mappings",
+                    "value": [
+                      {
+                        "options": {
+                          "1": {
+                            "text": "online"
+                          }
+                        },
+                        "type": "value"
+                      },
+                      {
+                        "options": {
+                          "from": 0,
+                          "result": {
+                            "text": "offline"
+                          },
+                          "to": 0.99
+                        },
+                        "type": "range"
+                      }
+                    ]
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "rgb(83, 179, 59)",
+                          "value": null
+                        },
+                        {
+                          "color": "semi-dark-red",
+                          "value": 5
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background-solid"
+                  },
+                  {
+                    "id": "custom.width"
+                  },
+                  {
+                    "id": "displayName",
+                    "value": "status"
+                  },
+                  {
+                    "id": "color",
+                    "value": {
+                      "mode": "thresholds"
+                    }
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Value #D"
+                },
+                "properties": [
+                  {
+                    "id": "displayName",
+                    "value": "space used"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "percent"
+                  },
+                  {
+                    "id": "custom.displayMode",
+                    "value": "gradient-gauge"
+                  },
+                  {
+                    "id": "max",
+                    "value": 100
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Size"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Dedupe Space Saved"
+                },
+                "properties": [
+                  {
+                    "id": "custom.width"
+                  },
+                  {
+                    "id": "displayName",
+                    "value": "Dedupe Space Saved"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Compression Space Saved"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Total Space Saved"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Logical Space Used"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Physical Space Used"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 9,
+            "w": 24,
+            "x": 0,
+            "y": 22
+          },
+          "id": 264,
+          "interval": "1m",
+          "maxDataPoints": 2,
+          "options": {
+            "showHeader": true,
+            "sortBy": [
+              {
+                "desc": true,
+                "displayName": "space used"
+              }
+            ]
+          },
+          "pluginVersion": "8.1.8",
+          "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\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "B"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "A"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "C"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "D"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "E"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "F"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "G"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "H"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "I"
+            }
+          ],
+          "timeFrom": null,
+          "timeShift": null,
+          "title": "Volumes with Ransomware Issues (9.10+ Only)",
+          "transformations": [
+            {
+              "id": "filterFieldsByName",
+              "options": {
+                "include": {
+                  "names": [
+                    "aggr",
+                    "node",
+                    "svm",
+                    "volume",
+                    "Value #A",
+                    "Value #C",
+                    "Value #D",
+                    "Value #E",
+                    "Value #F",
+                    "Value #H",
+                    "Value #I",
+                    "antiRansomwareState",
+                    "anti_ransomware_attack_probability"
+                  ]
+                }
+              }
+            },
+            {
+              "id": "merge",
+              "options": {}
+            },
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "Value #C": false,
+                  "__name__": true,
+                  "cluster": true,
+                  "datacenter": true,
+                  "instance": true,
+                  "job": true,
+                  "state": true
+                },
+                "indexByName": {
+                  "Value #A": 6,
+                  "Value #C": 7,
+                  "Value #D": 8,
+                  "Value #E": 11,
+                  "Value #F": 12,
+                  "Value #H": 9,
+                  "Value #I": 10,
+                  "aggr": 3,
+                  "antiRansomwareState": 4,
+                  "anti_ransomware_attack_probability": 5,
+                  "node": 2,
+                  "svm": 0,
+                  "volume": 1
+                },
+                "renameByName": {
+                  "Value #C": "Size",
+                  "Value #D": "",
+                  "Value #E": "Dedupe Space Saved",
+                  "Value #F": "Compression Space Saved",
+                  "Value #G": "Total Space Saved",
+                  "Value #H": "Logical Space Used",
+                  "Value #I": "Physical Space Used",
+                  "antiRansomwareState": "Ransomware State",
+                  "anti_ransomware_attack_probability": "Ransomware Attack Probability"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        },
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "description": "",
+          "fieldConfig": {
+            "defaults": {
+              "custom": {
+                "align": "left",
+                "displayMode": "auto",
+                "filterable": false
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "rgb(31, 176, 196)",
+                    "value": null
+                  }
+                ]
+              },
+              "unit": "none"
+            },
+            "overrides": [
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Value #A"
+                },
+                "properties": [
+                  {
+                    "id": "mappings",
+                    "value": [
+                      {
+                        "options": {
+                          "1": {
+                            "text": "online"
+                          }
+                        },
+                        "type": "value"
+                      },
+                      {
+                        "options": {
+                          "from": 0,
+                          "result": {
+                            "text": "offline"
+                          },
+                          "to": 0.99
+                        },
+                        "type": "range"
+                      }
+                    ]
+                  },
+                  {
+                    "id": "thresholds",
+                    "value": {
+                      "mode": "absolute",
+                      "steps": [
+                        {
+                          "color": "rgb(83, 179, 59)",
+                          "value": null
+                        },
+                        {
+                          "color": "semi-dark-red",
+                          "value": 5
+                        }
+                      ]
+                    }
+                  },
+                  {
+                    "id": "custom.displayMode",
+                    "value": "color-background-solid"
+                  },
+                  {
+                    "id": "custom.width"
+                  },
+                  {
+                    "id": "displayName",
+                    "value": "status"
+                  },
+                  {
+                    "id": "color",
+                    "value": {
+                      "mode": "thresholds"
+                    }
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Value #D"
+                },
+                "properties": [
+                  {
+                    "id": "displayName",
+                    "value": "space used"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "percent"
+                  },
+                  {
+                    "id": "custom.displayMode",
+                    "value": "gradient-gauge"
+                  },
+                  {
+                    "id": "max",
+                    "value": 100
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Size"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Dedupe Space Saved"
+                },
+                "properties": [
+                  {
+                    "id": "custom.width"
+                  },
+                  {
+                    "id": "displayName",
+                    "value": "Dedupe Space Saved"
+                  },
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Compression Space Saved"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Total Space Saved"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Logical Space Used"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Physical Space Used"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "bytes"
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 9,
+            "w": 24,
+            "x": 0,
+            "y": 31
+          },
+          "id": 271,
+          "interval": "1m",
+          "maxDataPoints": 2,
+          "options": {
+            "showHeader": true,
+            "sortBy": [
+              {
+                "desc": true,
+                "displayName": "space used"
+              }
+            ]
+          },
+          "pluginVersion": "8.1.8",
+          "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\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "B"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "A"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "C"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "D"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "E"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "F"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "G"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "H"
+            },
+            {
+              "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\"}",
+              "format": "table",
+              "hide": false,
+              "instant": true,
+              "interval": "",
+              "intervalFactor": 1,
+              "legendFormat": "",
+              "refId": "I"
+            }
+          ],
+          "timeFrom": null,
+          "timeShift": null,
+          "title": "Volumes Move Issues",
+          "transformations": [
+            {
+              "id": "filterFieldsByName",
+              "options": {
+                "include": {
+                  "names": [
+                    "aggr",
+                    "cluster",
+                    "datacenter",
+                    "movement_state",
+                    "node",
+                    "severity",
+                    "svm",
+                    "volume",
+                    "Value #A",
+                    "Value #C",
+                    "Value #D",
+                    "Value #E",
+                    "Value #F",
+                    "Value #H",
+                    "Value #I"
+                  ]
+                }
+              }
+            },
+            {
+              "id": "merge",
+              "options": {}
+            },
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "Value #A": false,
+                  "Value #C": false,
+                  "__name__": true,
+                  "cluster": false,
+                  "datacenter": false,
+                  "instance": true,
+                  "job": true,
+                  "state": true
+                },
+                "indexByName": {
+                  "Value #A": 8,
+                  "Value #C": 9,
+                  "Value #D": 10,
+                  "Value #E": 13,
+                  "Value #F": 14,
+                  "Value #H": 11,
+                  "Value #I": 12,
+                  "aggr": 7,
+                  "cluster": 1,
+                  "datacenter": 0,
+                  "movement_state": 5,
+                  "node": 6,
+                  "severity": 4,
+                  "svm": 2,
+                  "volume": 3
+                },
+                "renameByName": {
+                  "Value #C": "Size",
+                  "Value #D": "",
+                  "Value #E": "Dedupe Space Saved",
+                  "Value #F": "Compression Space Saved",
+                  "Value #G": "Total Space Saved",
+                  "Value #H": "Logical Space Used",
+                  "Value #I": "Physical Space Used",
+                  "aggr": "Aggregate",
+                  "antiRansomwareState": "Ransomware State",
+                  "anti_ransomware_attack_probability": "Ransomware Attack Probability",
+                  "cluster": "Cluster",
+                  "datacenter": "Datacenter",
+                  "movement_state": "Movement State",
+                  "node": "Node",
+                  "severity": "Severity",
+                  "svm": "SVM",
+                  "volume": "Volume"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Volume",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 31
+      },
+      "id": 274,
+      "panels": [
+        {
+          "datasource": null,
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto"
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              }
+            },
+            "overrides": []
+          },
+          "gridPos": {
+            "h": 7,
+            "w": 24,
+            "x": 0,
+            "y": 1
+          },
+          "id": 276,
+          "options": {
+            "showHeader": true
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "health_license_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "Non Compliant License",
+          "transformations": [
+            {
+              "id": "filterFieldsByName",
+              "options": {
+                "include": {
+                  "names": [
+                    "cluster",
+                    "datacenter",
+                    "name",
+                    "scope",
+                    "severity",
+                    "state"
+                  ]
+                }
+              }
+            },
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {},
+                "indexByName": {},
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "datacenter": "Datacenter",
+                  "name": "Name",
+                  "scope": "Scope",
+                  "severity": "Severity",
+                  "state": "State"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "License",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 32
+      },
+      "id": 255,
+      "panels": [
+        {
+          "datasource": null,
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto"
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              }
+            },
+            "overrides": [
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Home?"
+                },
+                "properties": [
+                  {
+                    "id": "mappings",
+                    "value": [
+                      {
+                        "options": {
+                          "false": {
+                            "index": 0,
+                            "text": "No"
+                          }
+                        },
+                        "type": "value"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 8,
+            "w": 24,
+            "x": 0,
+            "y": 23
+          },
+          "id": 257,
+          "options": {
+            "showHeader": true
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "health_network_interface_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "Network interfaces not at home port",
+          "transformations": [
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "__name__": true,
+                  "instance": true,
+                  "job": true
+                },
+                "indexByName": {
+                  "Time": 0,
+                  "Value": 9,
+                  "__name__": 1,
+                  "cluster": 3,
+                  "datacenter": 2,
+                  "instance": 7,
+                  "isHome": 5,
+                  "job": 8,
+                  "lif": 4,
+                  "severity": 6
+                },
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "datacenter": "Datacenter",
+                  "instance": "",
+                  "isHome": "Home?",
+                  "lif": "Network Interface",
+                  "severity": "Severity"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Network Interface",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 33
+      },
+      "id": 259,
+      "panels": [
+        {
+          "datasource": null,
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto"
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              }
+            },
+            "overrides": []
+          },
+          "gridPos": {
+            "h": 8,
+            "w": 24,
+            "x": 0,
+            "y": 24
+          },
+          "id": 261,
+          "options": {
+            "showHeader": true
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "health_network_ethernet_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "Ethernet ports are down",
+          "transformations": [
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "__name__": true,
+                  "instance": true,
+                  "job": true
+                },
+                "indexByName": {
+                  "Time": 0,
+                  "Value": 10,
+                  "__name__": 1,
+                  "cluster": 3,
+                  "datacenter": 2,
+                  "instance": 4,
+                  "job": 5,
+                  "node": 6,
+                  "port": 7,
+                  "severity": 9,
+                  "state": 8
+                },
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "datacenter": "Datacenter",
+                  "node": "Node",
+                  "port": "Port",
+                  "severity": "Severity",
+                  "state": "State"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        },
+        {
+          "datasource": null,
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto"
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              }
+            },
+            "overrides": []
+          },
+          "gridPos": {
+            "h": 8,
+            "w": 24,
+            "x": 0,
+            "y": 32
+          },
+          "id": 262,
+          "options": {
+            "showHeader": true
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "health_network_fc_port_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "FC ports are down",
+          "transformations": [
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "__name__": true,
+                  "instance": true,
+                  "job": true
+                },
+                "indexByName": {
+                  "Time": 0,
+                  "Value": 10,
+                  "__name__": 1,
+                  "cluster": 2,
+                  "datacenter": 3,
+                  "instance": 4,
+                  "job": 5,
+                  "node": 6,
+                  "port": 7,
+                  "severity": 9,
+                  "state": 8
+                },
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "datacenter": "Datacenter",
+                  "node": "Node",
+                  "port": "Port",
+                  "severity": "Severity",
+                  "state": "State"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Network Port",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 34
+      },
+      "id": 235,
+      "panels": [
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "description": "$EMSDescription",
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto"
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              }
+            },
+            "overrides": []
+          },
+          "gridPos": {
+            "h": 8,
+            "w": 24,
+            "x": 0,
+            "y": 35
+          },
+          "id": 237,
+          "options": {
+            "showHeader": true
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "last_over_time(ems_events{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",severity=\"emergency\"}[$__range]) == 1",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "Emergency EMS",
+          "transformations": [
+            {
+              "id": "filterFieldsByName",
+              "options": {
+                "include": {
+                  "pattern": "/^(datacenter|cluster|message|node|severity)$/"
+                }
+              }
+            },
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {},
+                "indexByName": {
+                  "cluster": 1,
+                  "datacenter": 0,
+                  "message": 2,
+                  "node": 3,
+                  "severity": 4
+                },
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "datacenter": "Datacenter",
+                  "message": "Message",
+                  "node": "Node",
+                  "severity": "Severity"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Emergency EMS",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 35
+      },
+      "id": 247,
+      "panels": [
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "description": "These are the health monitor events that have occurred within the selected time range",
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "thresholds"
+              },
+              "custom": {
+                "align": "auto",
+                "displayMode": "auto",
+                "filterable": true
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              }
+            },
+            "overrides": [
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Datacenter"
+                },
+                "properties": [
+                  {
+                    "id": "unit",
+                    "value": "string"
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 8,
+            "w": 24,
+            "x": 0,
+            "y": 36
+          },
+          "id": 249,
+          "options": {
+            "showHeader": true
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "last_over_time(health_support_alerts{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}[$__range]) == 1",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
+            }
+          ],
+          "title": "System Alerts",
+          "transformations": [
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "Time": true,
+                  "Value": true,
+                  "__name__": true,
+                  "index": true,
+                  "instance": true,
+                  "job": true,
+                  "node": true,
+                  "owner_node": true
+                },
+                "indexByName": {
+                  "Time": 0,
+                  "Value": 6,
+                  "__name__": 7,
+                  "cluster": 2,
+                  "correctiveAction": 12,
+                  "datacenter": 1,
+                  "instance": 4,
+                  "job": 5,
+                  "monitor": 9,
+                  "name": 8,
+                  "node": 13,
+                  "reason": 11,
+                  "resource": 10,
+                  "severity": 3
+                },
+                "renameByName": {
+                  "cluster": "Cluster",
+                  "container_type": "Container Type",
+                  "correctiveAction": "Corrective Action",
+                  "datacenter": "Datacenter",
+                  "disk": "Disk",
+                  "model": "Model",
+                  "monitor": "Monitor",
+                  "name": "Name",
+                  "reason": "Reason",
+                  "resource": "Resource",
+                  "serial_number": "Serial Number",
+                  "severity": "Severity",
+                  "shelf": "Shelf"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "System Health Alerts",
+      "type": "row"
+    }
+  ],
+  "refresh": "",
+  "schemaVersion": 30,
+  "style": "dark",
+  "tags": [
+    "harvest",
+    "ontap",
+    "cdot"
+  ],
+  "templating": {
+    "list": [
+      {
+        "current": {
+          "selected": false,
+          "text": "Prometheus",
+          "value": "Prometheus"
+        },
+        "description": null,
+        "error": null,
+        "hide": 2,
+        "includeAll": false,
+        "label": "Data Source",
+        "multi": false,
+        "name": "DS_PROMETHEUS",
+        "options": [],
+        "query": "prometheus",
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "type": "datasource"
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(node_labels{system_type!=\"7mode\"},datacenter)",
+        "description": null,
+        "error": null,
+        "hide": 0,
+        "includeAll": false,
+        "label": "",
+        "multi": true,
+        "name": "Datacenter",
+        "options": [],
+        "query": {
+          "query": "label_values(node_labels{system_type!=\"7mode\"},datacenter)",
+          "refId": "Prometheus-Datacenter-Variable-Query"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "tagValuesQuery": "",
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(node_labels{system_type!=\"7mode\",datacenter=~\"$Datacenter\"},cluster)",
+        "description": null,
+        "error": null,
+        "hide": 0,
+        "includeAll": true,
+        "label": "",
+        "multi": true,
+        "name": "Cluster",
+        "options": [],
+        "query": {
+          "query": "label_values(node_labels{system_type!=\"7mode\",datacenter=~\"$Datacenter\"},cluster)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "tagValuesQuery": "",
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "current": {
+          "selected": false,
+          "text": "The EMS collector gathers EMS events as defined in your ems.yml file. This panel displays events with emergency severity that occurred within the selected time range.",
+          "value": "The EMS collector gathers EMS events as defined in your ems.yml file. This panel displays events with emergency severity that occurred within the selected time range."
+        },
+        "description": null,
+        "error": null,
+        "hide": 2,
+        "label": null,
+        "name": "EMSDescription",
+        "options": [
+          {
+            "selected": true,
+            "text": "The EMS collector gathers EMS events as defined in your ems.yml file. This panel displays events with emergency severity that occurred within the selected time range.",
+            "value": "The EMS collector gathers EMS events as defined in your ems.yml file. This panel displays events with emergency severity that occurred within the selected time range."
+          }
+        ],
+        "query": "The EMS collector gathers EMS events as defined in your ems.yml file. This panel displays events with emergency severity that occurred within the selected time range.",
+        "skipUrlSync": false,
+        "type": "textbox"
+      }
+    ]
+  },
+  "time": {
+    "from": "now-24h",
+    "to": "now"
+  },
+  "timepicker": {
+    "refresh_intervals": [
+      "10s",
+      "30s",
+      "1m",
+      "5m",
+      "15m",
+      "30m",
+      "1h",
+      "2h",
+      "1d"
+    ]
+  },
+  "timezone": "",
+  "title": "ONTAP: Health",
+  "uid": "",
+  "version": 1
+}
\ No newline at end of file
diff --git a/grafana/dashboards/cmode/nfs_clients.json b/grafana/dashboards/cmode/nfs_clients.json
index 8ee7c7e3..744ab53a 100644
--- a/grafana/dashboards/cmode/nfs_clients.json
+++ b/grafana/dashboards/cmode/nfs_clients.json
@@ -71,7 +71,7 @@
   "gnetId": null,
   "graphTooltip": 1,
   "id": null,
-  "iteration": 1665135798398,
+  "iteration": 1680864207753,
   "links": [
     {
       "asDropdown": true,
@@ -227,8 +227,8 @@
       "id": 27,
       "options": {
         "legend": {
-          "displayMode": "hidden",
-          "placement": "right",
+          "displayMode": "table",
+          "placement": "bottom",
           "values": [
             "value"
           ]
@@ -577,5 +577,5 @@
   "timezone": "",
   "title": "ONTAP: NFS Clients",
   "uid": "",
-  "version": 2
-}
+  "version": 3
+}
\ No newline at end of file
diff --git a/grafana/dashboards/cmode/s3ObjectStorage.json b/grafana/dashboards/cmode/s3ObjectStorage.json
new file mode 100644
index 00000000..64ca38ee
--- /dev/null
+++ b/grafana/dashboards/cmode/s3ObjectStorage.json
@@ -0,0 +1,901 @@
+{
+  "__inputs": [
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "Prometheus",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
+    }
+  ],
+  "__requires": [
+    {
+      "type": "grafana",
+      "id": "grafana",
+      "name": "Grafana",
+      "version": "8.1.8"
+    },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    },
+    {
+      "type": "panel",
+      "id": "timeseries",
+      "name": "Time series",
+      "version": ""
+    }
+  ],
+  "annotations": {
+    "enable": false,
+    "list": [
+      {
+        "builtIn": 1,
+        "datasource": "-- Grafana --",
+        "enable": true,
+        "hide": true,
+        "iconColor": "rgba(0, 211, 255, 1)",
+        "name": "Annotations & Alerts",
+        "target": {
+          "limit": 100,
+          "matchAny": false,
+          "tags": [],
+          "type": "dashboard"
+        },
+        "type": "dashboard"
+      }
+    ]
+  },
+  "description": "",
+  "editable": true,
+  "fiscalYearStartMonth": 0,
+  "gnetId": null,
+  "graphTooltip": 1,
+  "id": "",
+  "iteration": 1679321054447,
+  "links": [
+    {
+      "asDropdown": true,
+      "icon": "external link",
+      "includeVars": true,
+      "keepTime": true,
+      "tags": [
+        "cdot"
+      ],
+      "targetBlank": false,
+      "title": "Related Dashboards",
+      "tooltip": "",
+      "type": "dashboards",
+      "url": ""
+    }
+  ],
+  "panels": [
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 0
+      },
+      "id": 125,
+      "panels": [],
+      "title": "Important Information",
+      "type": "row"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "gridPos": {
+        "h": 2,
+        "w": 24,
+        "x": 0,
+        "y": 1
+      },
+      "id": 107,
+      "options": {
+        "content": "This dashboard requires ONTAP 9.7+. One action is required to use this dashboard: <br>1. On Harvest, enable the Rest collector for OntapS3 template in your `harvest.yml` config for configuration metrics",
+        "mode": "markdown"
+      },
+      "pluginVersion": "8.4.11",
+      "type": "text"
+    },
+    {
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 3
+      },
+      "id": 16,
+      "title": "Bucket Drilldown",
+      "type": "row"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "You must enable the Rest collector in your harvest.yml config.",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "auto",
+            "filterable": true
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "bytes"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Free Size"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "from": -10000000000000000,
+                      "result": {
+                        "index": 0,
+                        "text": "0 B"
+                      },
+                      "to": 0
+                    },
+                    "type": "range"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Object Count"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "locale"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Used %"
+            },
+            "properties": [
+              {
+                "id": "custom.displayMode",
+                "value": "basic"
+              },
+              {
+                "id": "decimals",
+                "value": 0
+              },
+              {
+                "id": "min",
+                "value": 0
+              },
+              {
+                "id": "max",
+                "value": 100
+              },
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "from": 100,
+                      "result": {
+                        "index": 0,
+                        "text": "100%"
+                      },
+                      "to": 999999
+                    },
+                    "type": "range"
+                  }
+                ]
+              },
+              {
+                "id": "unit",
+                "value": "percent"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Encrypted"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "type": "value",
+                    "options": {
+                      "false": {
+                        "text": "No",
+                        "index": 0
+                      },
+                      "true": {
+                        "text": "Yes",
+                        "index": 1
+                      }
+                    }
+                  }
+                ]
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 24,
+        "x": 0,
+        "y": 4
+      },
+      "id": 5,
+      "options": {
+        "footer": {
+          "fields": "",
+          "reducer": [
+            "sum"
+          ],
+          "show": false
+        },
+        "showHeader": true
+      },
+      "pluginVersion": "8.4.11",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "ontaps3_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"} * on (volume,svm,cluster,datacenter) group_left(aggr) volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "ontaps3_size{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "B"
+        },
+        {
+          "exemplar": false,
+          "expr": "ontaps3_size-ontaps3_logical_used_size{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "C"
+        },
+        {
+          "exemplar": false,
+          "expr": "ontaps3_logical_used_size{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "D"
+        },
+        {
+          "exemplar": false,
+          "expr": "ontaps3_used_percent{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "E"
+        },
+        {
+          "exemplar": false,
+          "expr": "ontaps3_object_count{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "F"
+        }
+      ],
+      "title": "Bucket Overview",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "aggr",
+                "bucket",
+                "cluster",
+                "svm",
+                "Value #B",
+                "Value #C",
+                "Value #D",
+                "volume",
+                "encryption_enabled",
+                "Value #E",
+                "Value #F",
+                "url",
+                "qos_policy_group",
+                "is_protected",
+                "protected_in_cloud",
+                "protected_in_ontap"
+              ]
+            }
+          }
+        },
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Time": true,
+              "__name__": true,
+              "instance": true,
+              "job": true
+            },
+            "indexByName": {
+              "cluster": 0,
+              "svm": 1,
+              "volume": 2,
+              "bucket": 3,
+              "aggr": 4,
+              "url": 9,
+              "encryption_enabled": 10,
+              "Value #B": 5,
+              "Value #C": 6,
+              "Value #D": 7,
+              "Value #E": 8,
+              "Value #F": 11,
+              "qos_policy_group": 12
+            },
+            "renameByName": {
+              "Value #A": "",
+              "Value #B": "Size",
+              "Value #C": "Free Size",
+              "Value #D": "Used Size",
+              "Value #E": "Used %",
+              "Value #F": "Object Count",
+              "aggr": "Local Tiers",
+              "bucket": "Bucket",
+              "cluster": "Cluster",
+              "encryption_enabled": "Encrypted",
+              "qos_policy_group": "QoS Policy Group",
+              "svm": "SVM",
+              "volume": "Volume",
+              "url": "Url",
+              "is_protected": "IsProtected",
+              "protected_in_cloud": "IsProtectedInCloud",
+              "protected_in_ontap": "IsProtectedInOntap"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "Used",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 10,
+            "gradientMode": "opacity",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 1,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": true,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "bytes"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 11,
+        "w": 12,
+        "x": 0,
+        "y": 12
+      },
+      "id": 127,
+      "options": {
+        "legend": {
+          "calcs": [
+            "mean",
+            "lastNotNull",
+            "max"
+          ],
+          "displayMode": "table",
+          "placement": "bottom",
+          "sortBy": "Last *",
+          "sortDesc": true
+        },
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
+      },
+      "pluginVersion": "8.1.8",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "EO6UabnVz"
+          },
+          "exemplar": false,
+          "expr": "ontaps3_logical_used_size{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"}",
+          "hide": false,
+          "interval": "",
+          "legendFormat": "{{svm}} - {{bucket}}",
+          "refId": "A"
+        }
+      ],
+      "title": "Bucket Used Size",
+      "transformations": [],
+      "type": "timeseries"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "Used Percent %",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 10,
+            "gradientMode": "opacity",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 1,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": true,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "decimals": 0,
+          "mappings": [],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "percent"
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Value"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "from": 100,
+                      "result": {
+                        "index": 0,
+                        "text": "100%"
+                      },
+                      "to": 9999
+                    },
+                    "type": "range"
+                  }
+                ]
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 11,
+        "w": 12,
+        "x": 12,
+        "y": 12
+      },
+      "id": 128,
+      "options": {
+        "legend": {
+          "calcs": [
+            "mean",
+            "lastNotNull",
+            "max"
+          ],
+          "displayMode": "table",
+          "placement": "bottom",
+          "sortBy": "Last *",
+          "sortDesc": true
+        },
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
+      },
+      "pluginVersion": "8.1.8",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "EO6UabnVz"
+          },
+          "exemplar": false,
+          "expr": "ontaps3_used_percent{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\"}",
+          "hide": false,
+          "interval": "",
+          "legendFormat": "{{svm}} - {{bucket}}",
+          "refId": "A"
+        }
+      ],
+      "title": "Bucket Used Size Percent",
+      "transformations": [],
+      "type": "timeseries"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "You must enable the Rest collector in your harvest.yml config",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "auto",
+            "filterable": true
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "User"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 0,
+                        "text": "All users of this storage VM"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 24,
+        "x": 0,
+        "y": 23
+      },
+      "id": 6,
+      "options": {
+        "footer": {
+          "fields": "",
+          "reducer": [
+            "sum"
+          ],
+          "show": false
+        },
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "8.4.11",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "ontaps3_policy_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\",svm=~\"$SVM\",bucket=~\"$Bucket\",permission_type!=\"\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Bucket Permission",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "allowed_resource",
+                "bucket",
+                "cluster",
+                "permission_type",
+                "permission",
+                "svm",
+                "user"
+              ]
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {},
+            "indexByName": {
+              "allowed_resource": 6,
+              "bucket": 2,
+              "cluster": 0,
+              "permission_type": 4,
+              "permission": 5,
+              "svm": 1,
+              "user": 3
+            },
+            "renameByName": {
+              "allowed_resource": "Allowed Resource",
+              "bucket": "Bucket",
+              "cluster": "Cluster",
+              "encryption_enabled": "",
+              "permission_type": "Type",
+              "permission": "Permission",
+              "svm": "SVM",
+              "user": "User"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    }
+  ],
+  "refresh": "",
+  "schemaVersion": 35,
+  "style": "dark",
+  "tags": [
+    "harvest",
+    "ontap",
+    "cdot"
+  ],
+  "templating": {
+    "list": [
+      {
+        "current": {
+          "selected": false,
+          "text": "Prometheus",
+          "value": "Prometheus"
+        },
+        "hide": 2,
+        "includeAll": false,
+        "label": "Data Source",
+        "multi": false,
+        "name": "DS_PROMETHEUS",
+        "options": [],
+        "query": "prometheus",
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "type": "datasource"
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(ontaps3_labels{system_type!=\"7mode\"}, datacenter)",
+        "hide": 0,
+        "includeAll": false,
+        "multi": true,
+        "name": "Datacenter",
+        "options": [],
+        "query": {
+          "query": "label_values(ontaps3_labels{system_type!=\"7mode\"}, datacenter)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "tagValuesQuery": "",
+        "tags": [],
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(ontaps3_labels{system_type!=\"7mode\",datacenter=~\"$Datacenter\"}, cluster)",
+        "hide": 0,
+        "includeAll": true,
+        "multi": true,
+        "multiFormat": "glob",
+        "name": "Cluster",
+        "options": [],
+        "query": {
+          "query": "label_values(ontaps3_labels{system_type!=\"7mode\",datacenter=~\"$Datacenter\"}, cluster)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "refresh_on_load": false,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "type": "query"
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(ontaps3_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}, svm)",
+        "hide": 0,
+        "includeAll": true,
+        "multi": true,
+        "multiFormat": "glob",
+        "name": "SVM",
+        "options": [],
+        "query": {
+          "query": "label_values(ontaps3_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"}, svm)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "refresh_on_load": false,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "type": "query"
+      },
+      {
+        "allValue": "(.*)",
+        "current": {
+          "selected": true,
+          "text": [
+            "All"
+          ],
+          "value": [
+            "$__all"
+          ]
+        },
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(ontaps3_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\"}, bucket)",
+        "hide": 0,
+        "includeAll": true,
+        "multi": true,
+        "multiFormat": "glob",
+        "name": "Bucket",
+        "options": [],
+        "query": {
+          "query": "label_values(ontaps3_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\"}, bucket)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "refresh_on_load": false,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "type": "query"
+      }
+    ]
+  },
+  "time": {
+    "from": "now-5m",
+    "to": "now"
+  },
+  "timepicker": {
+    "refresh_intervals": [
+      "10s",
+      "30s",
+      "1m",
+      "5m",
+      "15m",
+      "30m",
+      "1h",
+      "2h",
+      "1d"
+    ]
+  },
+  "timezone": "",
+  "title": "ONTAP: S3 Object Storage",
+  "uid": "",
+  "version": 1,
+  "weekStart": ""
+}
\ No newline at end of file


Test patch:
diff --git a/cmd/collectors/commonutils_test.go b/cmd/collectors/commonutils_test.go
index 03a5034e..db942104 100644
--- a/cmd/collectors/commonutils_test.go
+++ b/cmd/collectors/commonutils_test.go
@@ -2,6 +2,7 @@ package collectors
 
 import (
 	"github.com/netapp/harvest/v2/pkg/matrix"
+	"github.com/netapp/harvest/v2/pkg/tree/node"
 	"testing"
 	"time"
 )
@@ -256,3 +257,43 @@ func testNewerTimestampThanDuration(t *testing.T) {
 		t.Errorf("timestamp= %f is newer than duration %s", timestamp, duration.String())
 	}
 }
+
+func TestGetDataInterval(t *testing.T) {
+	defaultDataPollDuration := 3 * time.Minute
+	type args struct {
+		param           *node.Node
+		defaultInterval time.Duration
+	}
+
+	type test struct {
+		name    string
+		args    args
+		want    float64
+		wantErr bool
+	}
+	tests := []test{
+		{"success_return_poller_schedule", args{param: generateScheduleParam("4m"), defaultInterval: defaultDataPollDuration}, 240, false},
+		{"error_return_default_schedule", args{param: generateScheduleParam("4ma"), defaultInterval: defaultDataPollDuration}, 180, true},
+		{"return_default_schedule", args{param: generateScheduleParam(""), defaultInterval: defaultDataPollDuration}, 180, true},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got, err := GetDataInterval(tt.args.param, tt.args.defaultInterval)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("GetDataInterval() error = %v, wantErr %v", err, tt.wantErr)
+				return
+			}
+			if got.Seconds() != tt.want {
+				t.Errorf("GetDataInterval() got = %v, want %v", got, tt.want)
+			}
+		})
+	}
+}
+
+func generateScheduleParam(duration string) *node.Node {
+	root := node.NewS("root")
+	param := root.NewChildS("schedule", "")
+	param.NewChildS("data", duration)
+	return root
+}
diff --git a/cmd/tools/grafana/dashboard_test.go b/cmd/tools/grafana/dashboard_test.go
index 315afba1..cb258f8e 100644
--- a/cmd/tools/grafana/dashboard_test.go
+++ b/cmd/tools/grafana/dashboard_test.go
@@ -311,7 +311,7 @@ func doPanel(t *testing.T, pathPrefix string, key gjson.Result, value gjson.Resu
 	numExpressions := len(expressions)
 	for _, e := range expressions {
 		// Ignore labels and _status
-		if strings.HasSuffix(e.metric, "_labels") || strings.HasSuffix(e.metric, "_status") {
+		if strings.HasSuffix(e.metric, "_labels") || strings.HasSuffix(e.metric, "_status") || strings.HasSuffix(e.metric, "_events") || strings.HasSuffix(e.metric, "_alerts") {
 			continue
 		}
 		unit := unitForExpr(e, overrides, defaultUnit, valueToName, numExpressions)
@@ -615,6 +615,7 @@ func TestOnlyHighlightsExpanded(t *testing.T) {
 		"cmode/fsa.json":      2,
 		"cmode/workload.json": 2,
 		"cmode/smb2.json":     2,
+		"cmode/health.json":   2,
 	}
 	// count number of expanded sections in dashboard and ensure num expanded = 1
 	visitDashboards(
diff --git a/cmd/tools/grafana/grafana_test.go b/cmd/tools/grafana/grafana_test.go
index 833d35c9..4d88a7b5 100644
--- a/cmd/tools/grafana/grafana_test.go
+++ b/cmd/tools/grafana/grafana_test.go
@@ -96,20 +96,24 @@ func TestAddPrefixToMetricNames(t *testing.T) {
 
 			for i := 0; i < len(newExpressions); i++ {
 				if newExpressions[i] != prefix+oldExpressions[i] {
-					t.Errorf("\nExpected: [%s]\n     Got: [%s]", prefix+oldExpressions[i], newExpressions[i])
+					t.Errorf("path: %s \nExpected: [%s]\n     Got: [%s]", path, prefix+oldExpressions[i], newExpressions[i])
 				}
 			}
 		})
 }
 
 func getExp(expr string, expressions *[]string) {
-	regex := regexp.MustCompile(`([a-zA-Z_+]+)\s?{.+?}`)
+	regex := regexp.MustCompile(`([a-zA-Z0-9_+-]+)\s?{.+?}`)
 	match := regex.FindAllStringSubmatch(expr, -1)
 	for _, m := range match {
-		// multiple metrics used to summarize
+		// multiple metrics used with `+`
 		if strings.Contains(m[1], "+") {
 			submatch := strings.Split(m[1], "+")
 			*expressions = append(*expressions, submatch...)
+			// multiple metrics used with `-`
+		} else if strings.Contains(m[1], "-") {
+			submatch := strings.Split(m[1], "-")
+			*expressions = append(*expressions, submatch...)
 			// single metric
 		} else {
 			*expressions = append(*expressions, m[1])
diff --git a/cmd/tools/template/template_test.go b/cmd/tools/template/template_test.go
index 96ebb663..a92a06ec 100644
--- a/cmd/tools/template/template_test.go
+++ b/cmd/tools/template/template_test.go
@@ -336,6 +336,7 @@ func (m metric) pathString() string {
 // - single hats (alphabetically)
 // - metrics (alphabetically)
 // ZAPI parent attributes are sorted alphabetically
+// Tests that exported keys and labels are in sorted order
 func TestMetricsAreSortedAndNoDuplicates(t *testing.T) {
 	visitTemplates(t, func(path string, model TemplateModel) {
 		sortedCounters := checkSortedCounters(model.metrics)
@@ -356,6 +357,22 @@ func TestMetricsAreSortedAndNoDuplicates(t *testing.T) {
 
 		checkForDuplicateMetrics(t, model, path)
 
+		// check sorted exported instance keys
+		sortedKeys := checkSortedKeyLabels(model.ExportOptions.InstanceKeys)
+		if sortedKeys.got != sortedKeys.want {
+			t.Errorf("keys should be sorted path=[%s]", shortPath(path))
+			t.Errorf("use this instead")
+			t.Errorf("%s", sortedKeys.want)
+		}
+
+		// check sorted exported instance labels
+		sortedLabels := checkSortedKeyLabels(model.ExportOptions.InstanceLabels)
+		if sortedLabels.got != sortedLabels.want {
+			t.Errorf("labels should be sorted path=[%s]", shortPath(path))
+			t.Errorf("use this instead")
+			t.Errorf("%s", sortedLabels.want)
+		}
+
 	}, allTemplatesButEms...)
 }
 
@@ -452,6 +469,13 @@ func sortZapiCounters(counters []metric) {
 	})
 }
 
+func checkSortedKeyLabels(keyLabels []string) sorted {
+	got := strings.Join(keyLabels, ",")
+	sort.Strings(keyLabels)
+	want := strings.Join(keyLabels, ",")
+	return sorted{got: got, want: want}
+}
+
 var sigilReplacer = strings.NewReplacer("^", "", "- ", "")
 
 func visitTemplates(t *testing.T, eachTemplate func(path string, model TemplateModel), dirs ...string) {
diff --git a/integration/test/dashboard_json_test.go b/integration/test/dashboard_json_test.go
index a694bf4e..16970195 100644
--- a/integration/test/dashboard_json_test.go
+++ b/integration/test/dashboard_json_test.go
@@ -34,7 +34,14 @@ var counterMap = data.GetCounterMap()
 
 // zapiCounterMap consists of counters which needs to be excluded for Zapi only in addition to counters present in counterMap
 var zapiCounterMap = map[string]struct{}{
-	"net_route_labels": {},
+	"net_route_labels":          {},
+	"ontaps3_labels":            {},
+	"ontaps3_logical_used_size": {},
+	"ontaps3_size":              {},
+	"ontaps3_object_count":      {},
+	"ontaps3_used_percent":      {},
+	"ontaps3_services_labels":   {},
+	"ontaps3_policy_labels":     {},
 }
 
 // restCounters  consists of counters which needs to be excluded for Rest only in addition to counters present in counterMap
diff --git a/integration/test/data/counter_data.go b/integration/test/data/counter_data.go
index f85b4273..d3764d39 100644
--- a/integration/test/data/counter_data.go
+++ b/integration/test/data/counter_data.go
@@ -42,6 +42,8 @@ func GetCounterMap() map[string][]string {
 		"svm_nfs_read_latency_hist_bucket",
 		"svm_nfs_write_latency_hist_bucket",
 		"smb2_",
+		"health_",
+		"ems_events",
 	}
 	//if docker.IsDockerBasedPoller() || setup.IsMac {
 	counterMap["NO_DATA_CONTAINS"] = append(counterMap["NO_DATA_CONTAINS"], "poller", "metadata_exporter_count")