{ "schemaVersion": 1, "metrics": [ { "semanticName": "host.cpu.utilization", "version": 1, "description": "Average host CPU utilization excluding idle time.", "unit": "percent", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\",instance={{instance}}}[{{window}}])) * 100)", "requiredCapabilities": [ "node-exporter.cpu" ], "allowedLabels": [ "instance" ], "defaultAggregation": "avg", "cardinalityBudget": 10, "limits": { "maxRangeSeconds": 2592000, "maxSeries": 10, "maxPoints": 20000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "gauge" ], "freshnessSeconds": 30, "defaultThresholds": [ { "state": "attention", "operator": ">=", "value": 75, "durationSeconds": 300 }, { "state": "degraded", "operator": ">=", "value": 90, "durationSeconds": 300 } ] }, { "semanticName": "host.memory.utilization", "version": 1, "description": "Host memory utilization based on available memory.", "unit": "percent", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "(1 - node_memory_MemAvailable_bytes{instance={{instance}}} / node_memory_MemTotal_bytes{instance={{instance}}}) * 100", "requiredCapabilities": [ "node-exporter.memory" ], "allowedLabels": [ "instance" ], "defaultAggregation": "avg", "cardinalityBudget": 10, "limits": { "maxRangeSeconds": 2592000, "maxSeries": 10, "maxPoints": 20000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "gauge" ], "freshnessSeconds": 30, "defaultThresholds": [ { "state": "attention", "operator": ">=", "value": 80, "durationSeconds": 300 }, { "state": "degraded", "operator": ">=", "value": 92, "durationSeconds": 300 } ] }, { "semanticName": "container.cpu.utilization", "version": 1, "description": "Container CPU utilization normalized to a percentage of one core unless configured otherwise.", "unit": "percent", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "rate(container_cpu_usage_seconds_total{name={{container}}}[{{window}}]) * 100", "requiredCapabilities": [ "container.cpu" ], "allowedLabels": [ "instance", "container", "image" ], "defaultAggregation": "avg", "cardinalityBudget": 500, "limits": { "maxRangeSeconds": 2592000, "maxSeries": 200, "maxPoints": 100000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "ranked-list", "table" ], "freshnessSeconds": 30, "defaultThresholds": [] }, { "semanticName": "container.memory.used", "version": 1, "description": "Current working-set memory used by a container.", "unit": "bytes", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "container_memory_working_set_bytes{name={{container}}}", "requiredCapabilities": [ "container.memory" ], "allowedLabels": [ "instance", "container", "image" ], "defaultAggregation": "avg", "cardinalityBudget": 500, "limits": { "maxRangeSeconds": 2592000, "maxSeries": 200, "maxPoints": 100000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "ranked-list", "table" ], "freshnessSeconds": 30, "defaultThresholds": [] }, { "semanticName": "storage.disk.temperature", "version": 1, "description": "Observed disk temperature.", "unit": "celsius", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "smartctl_device_temperature{device={{device}}}", "requiredCapabilities": [ "smart.temperature" ], "allowedLabels": [ "instance", "device", "model", "serial_hash" ], "defaultAggregation": "max", "cardinalityBudget": 100, "limits": { "maxRangeSeconds": 7776000, "maxSeries": 100, "maxPoints": 100000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "gauge", "heatmap", "table", "storage-map" ], "freshnessSeconds": 300, "defaultThresholds": [ { "state": "attention", "operator": ">=", "value": 45, "durationSeconds": 300 }, { "state": "degraded", "operator": ">=", "value": 50, "durationSeconds": 300 }, { "state": "critical", "operator": ">=", "value": 60, "durationSeconds": 60 } ] }, { "semanticName": "storage.disk.temperature.maximum", "version": 1, "description": "Maximum observed disk temperature across the approved source set.", "unit": "celsius", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "max(max_over_time(smartctl_device_temperature[{{window}}]))", "requiredCapabilities": [ "smart.temperature" ], "allowedLabels": [ "instance", "device", "model", "serial_hash" ], "defaultAggregation": "max", "cardinalityBudget": 1, "limits": { "maxRangeSeconds": 7776000, "maxSeries": 1, "maxPoints": 100000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "gauge" ], "freshnessSeconds": 300, "defaultThresholds": [] }, { "semanticName": "storage.pool.utilization.maximum", "version": 1, "description": "Highest used-capacity percentage across all storage pools. Placeholder-free variant of storage.pool.utilization for host-agnostic alert rules that need no per-pool scope binding.", "unit": "percent", "valueKind": "gauge", "sourceKind": "derived", "queryTemplate": "max(pulse_storage_pool_used_bytes / pulse_storage_pool_capacity_bytes * 100)", "requiredCapabilities": [ "storage.pool.capacity" ], "allowedLabels": [ "instance" ], "defaultAggregation": "max", "cardinalityBudget": 10, "limits": { "maxRangeSeconds": 7776000, "maxSeries": 10, "maxPoints": 100000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "gauge" ], "freshnessSeconds": 120, "defaultThresholds": [ { "state": "attention", "operator": ">=", "value": 80, "durationSeconds": 600 }, { "state": "degraded", "operator": ">=", "value": 90, "durationSeconds": 600 }, { "state": "critical", "operator": ">=", "value": 97, "durationSeconds": 300 } ] }, { "semanticName": "storage.pool.utilization", "version": 1, "description": "Used capacity as a percentage of usable pool capacity.", "unit": "percent", "valueKind": "gauge", "sourceKind": "derived", "queryTemplate": "pulse_storage_pool_used_bytes{pool={{pool}}} / pulse_storage_pool_capacity_bytes{pool={{pool}}} * 100", "requiredCapabilities": [ "storage.pool.capacity" ], "allowedLabels": [ "instance", "pool", "filesystem" ], "defaultAggregation": "max", "cardinalityBudget": 100, "limits": { "maxRangeSeconds": 7776000, "maxSeries": 100, "maxPoints": 100000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "gauge", "table", "storage-map" ], "freshnessSeconds": 120, "defaultThresholds": [ { "state": "attention", "operator": ">=", "value": 80, "durationSeconds": 600 }, { "state": "degraded", "operator": ">=", "value": 90, "durationSeconds": 600 }, { "state": "critical", "operator": ">=", "value": 97, "durationSeconds": 300 } ] }, { "semanticName": "service.response_time", "version": 1, "description": "End-to-end probe response time.", "unit": "seconds", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "probe_duration_seconds{probe_id={{probe_id}}}", "requiredCapabilities": [ "probe.duration" ], "allowedLabels": [ "probe_id", "service_id", "probe_type" ], "defaultAggregation": "p95", "cardinalityBudget": 1000, "limits": { "maxRangeSeconds": 7776000, "maxSeries": 500, "maxPoints": 200000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "ranked-list", "table", "heatmap", "service-matrix" ], "freshnessSeconds": 120, "defaultThresholds": [] }, { "semanticName": "service.availability", "version": 1, "description": "Probe success represented as 0 or 1 and aggregated to availability.", "unit": "ratio", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "probe_success{probe_id={{probe_id}}}", "requiredCapabilities": [ "probe.success" ], "allowedLabels": [ "probe_id", "service_id", "probe_type" ], "defaultAggregation": "avg", "cardinalityBudget": 1000, "limits": { "maxRangeSeconds": 7776000, "maxSeries": 500, "maxPoints": 200000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries", "table", "service-matrix" ], "freshnessSeconds": 120, "defaultThresholds": [] }, { "semanticName": "service.availability.minimum", "version": 1, "description": "Minimum probe availability across the approved service source set.", "unit": "ratio", "valueKind": "gauge", "sourceKind": "prometheus", "queryTemplate": "min(min_over_time(probe_success[{{window}}]))", "requiredCapabilities": [ "probe.success" ], "allowedLabels": [ "probe_id", "service_id", "probe_type" ], "defaultAggregation": "min", "cardinalityBudget": 1, "limits": { "maxRangeSeconds": 7776000, "maxSeries": 1, "maxPoints": 100000, "timeoutSeconds": 10 }, "allowedVisualizations": [ "stat", "timeseries" ], "freshnessSeconds": 120, "defaultThresholds": [] } ] }