diff --git a/deployment/clouddeploy/gke-workers/base/ksm/ksm_cluster_pod_monitoring.yaml b/deployment/clouddeploy/gke-workers/base/ksm/ksm_cluster_pod_monitoring.yaml index 63ec93161ab..9d30428a191 100644 --- a/deployment/clouddeploy/gke-workers/base/ksm/ksm_cluster_pod_monitoring.yaml +++ b/deployment/clouddeploy/gke-workers/base/ksm/ksm_cluster_pod_monitoring.yaml @@ -9,6 +9,7 @@ spec: selector: matchLabels: app.kubernetes.io/name: kube-state-metrics + app.kubernetes.io/version: 2.14.0 endpoints: - port: metrics # Customized from 30s to 5s. diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_dashboards_prov.yaml b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_dashboards_prov.yaml index d62e3307d67..90542db3b02 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_dashboards_prov.yaml +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_dashboards_prov.yaml @@ -14,6 +14,7 @@ data: folder: '' type: file disableDeletion: false + updateIntervalSeconds: 10 editable: false options: - path: /etc/grafana/dashboards + path: /etc/plutono/dashboards diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_datasources.yaml b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_datasources.yaml index 6ac299aa5df..21921f021fd 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_datasources.yaml +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/configmaps/grafana_datasources.yaml @@ -27,11 +27,3 @@ data: jsonData: authenticationType: gce defaultProject: oss-vdb-test - - name: Cloud Logging - uid: cloud-logging - type: googlecloud-logging-datasource - access: proxy - editable: false - jsonData: - authenticationType: gce - defaultProject: oss-vdb-test diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/data-quality-drift.json b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/data-quality-drift.json index d1519a9f818..7280fc6dfb5 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/data-quality-drift.json +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/data-quality-drift.json @@ -3,23 +3,20 @@ "list": [ { "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, + "datasource": "-- Plutono --", "enable": true, "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": false, - "fiscalYearStartMonth": 0, + "gnetId": null, "graphTooltip": 1, "id": null, "links": [], - "liveNow": false, "panels": [ { "collapsed": false, @@ -34,10 +31,7 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { "color": { @@ -53,7 +47,7 @@ } ] }, - "unit": "none" + "unit": "short" }, "overrides": [] }, @@ -78,29 +72,20 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(osv_dataset_total_vulnerabilities{ecosystem=\"all\"}) or sum(osv_dataset_total_vulnerabilities)", - "instant": true, + "refId": "A", "legendFormat": "Total Vulns", - "range": false, - "refId": "A" + "instant": true } ], "title": "Total Vulnerabilities", "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { "color": { @@ -124,7 +109,7 @@ } ] }, - "unit": "none" + "unit": "short" }, "overrides": [] }, @@ -149,29 +134,20 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(osv_recordchecker_drift)", - "instant": true, + "refId": "A", "legendFormat": "Datastore vs GCS Drift", - "range": false, - "refId": "A" + "instant": true } ], "title": "Datastore vs GCS Drift", "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { "color": { @@ -195,7 +171,7 @@ } ] }, - "unit": "none" + "unit": "short" }, "overrides": [] }, @@ -220,29 +196,20 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(osv_data_quality_findings)", - "instant": true, + "refId": "A", "legendFormat": "Active Linter Findings", - "range": false, - "refId": "A" + "instant": true } ], "title": "Active Linter Findings", "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { "color": { @@ -283,19 +250,13 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(osv_export_zip_size_bytes{ecosystem=\"all\"}) or sum(osv_export_zip_size_bytes)", - "instant": true, + "refId": "A", "legendFormat": "all.zip Size", - "range": false, - "refId": "A" + "instant": true } ], "title": "Export all.zip Size", @@ -314,133 +275,189 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "short" - }, - "overrides": [] - }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, + "hiddenSeries": false, "id": 5, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (type) (osv_recordchecker_drift)", - "legendFormat": "Drift Type: {{type}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "Drift Type: {{type}}" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (reason, status) (increase(osv_recoverer_processed_records_total[1h]))", - "legendFormat": "Recoverer (1h): {{reason}} ({{status}})", - "range": true, - "refId": "B" + "refId": "B", + "legendFormat": "Recoverer (1h): {{reason}} ({{status}})" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Datastore vs. GCS Drift Discrepancies & Recoverer Activity", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "short" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, + "hiddenSeries": false, "id": 6, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (source) (osv_recordchecker_invalid_records)", - "legendFormat": "{{source}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{source}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Invalid Records Detected by Record Checker", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, @@ -455,122 +472,184 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "short" - }, - "overrides": [] - }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 }, + "hiddenSeries": false, "id": 7, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (rule_code, severity) (osv_data_quality_findings)", - "legendFormat": "[{{severity}}] {{rule_code}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "[{{severity}}] {{rule_code}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Linter Findings by Rule Code & Severity", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "short" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 }, + "hiddenSeries": false, "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "topk(10, sum by (source) (osv_data_quality_findings))", - "legendFormat": "{{source}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{source}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Top Upstream Sources by Linter Findings", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, @@ -585,138 +664,199 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 10, - "lineWidth": 2 - }, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "orange", - "value": 24 - }, - { - "color": "red", - "value": 72 - } - ] - }, - "unit": "h" - }, - "overrides": [] - }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 24 }, + "hiddenSeries": false, "id": 9, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "(time() - max by (source) (osv_importer_last_new_record_timestamp_seconds)) / 3600", - "legendFormat": "{{source}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{source}}" + } + ], + "thresholds": [ + { + "colorMode": "warning", + "fill": false, + "line": true, + "op": "gt", + "value": 24 + }, + { + "colorMode": "critical", + "fill": false, + "line": true, + "op": "gt", + "value": 72 } ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Feed Ingestion Staleness (Hours Since Last New Record)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "bars", - "fillOpacity": 80, - "lineWidth": 1 - }, - "unit": "short" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "h", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 8, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 24 }, + "hiddenSeries": false, "id": 10, + "legend": { + "alignAsTable": true, + "avg": false, + "current": false, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": true, + "values": true + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "sum", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "topk(10, sum by (source) (increase(osv_importer_records_discovered_total[1d])))", - "legendFormat": "{{source}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{source}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Daily Discovered Records by Upstream Source", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, @@ -731,136 +871,194 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "ops" - }, - "overrides": [] - }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 33 }, + "hiddenSeries": false, "id": 11, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(rate(osv_gitter_commits_scanned_total[5m]))", - "legendFormat": "Commits Scanned / s", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "Commits Scanned / s" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(rate(osv_gitter_data_errors_total[5m]))", - "legendFormat": "Gitter Data Errors / s", - "range": true, - "refId": "B" + "refId": "B", + "legendFormat": "Gitter Data Errors / s" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Gitter Commit Scanning Velocity & Data Errors", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "bytes" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 33 }, + "hiddenSeries": false, "id": 12, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "topk(10, osv_export_zip_size_bytes)", - "legendFormat": "{{ecosystem}} archive", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{ecosystem}} archive" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Export Archive Expansion (Top Ecosystems & all.zip)", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } } ], "refresh": "1m", - "schemaVersion": 39, + "schemaVersion": 27, + "style": "dark", "tags": [ "osv", "quality", @@ -892,4 +1090,4 @@ "title": "3. Vulnerability Data Quality & Ecosystem Health", "uid": "osv-data-quality-drift", "version": 1 -} \ No newline at end of file +} diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/executive-overview.json b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/executive-overview.json index d8d190d1e55..4405ce44ce4 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/executive-overview.json +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/executive-overview.json @@ -3,48 +3,60 @@ "list": [ { "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, + "datasource": "-- Plutono --", "enable": true, "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": false, - "fiscalYearStartMonth": 0, + "gnetId": null, "graphTooltip": 1, "id": null, "links": [], - "liveNow": false, "panels": [ { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, "id": 100, "title": "Service Level Objectives (SLOs) & Key Performance Indicators", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "blue", "value": null } + { + "color": "blue", + "value": null + } ] }, - "unit": "none" + "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 1 + }, "id": 1, "options": { "colorMode": "value", @@ -52,48 +64,63 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "sum(increase(osv_worker_tasks_processed_total[$__range]))", - "instant": true, + "refId": "A", "legendFormat": "Total Tasks", - "range": false, - "refId": "A" + "instant": true } ], "title": "Total Tasks Processed", "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "max": 100, "min": 0, "thresholds": { "mode": "absolute", "steps": [ - { "color": "red", "value": null }, - { "color": "orange", "value": 95 }, - { "color": "green", "value": 99 } + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 95 + }, + { + "color": "green", + "value": 99 + } ] }, "unit": "percent" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 }, + "gridPos": { + "h": 4, + "w": 6, + "x": 6, + "y": 1 + }, "id": 2, "options": { "colorMode": "value", @@ -101,48 +128,63 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "(sum(increase(osv_worker_tasks_processed_total{status=\"success\"}[$__range])) / sum(increase(osv_worker_tasks_processed_total{status=~\"success|error\"}[$__range]))) * 100", - "instant": true, + "refId": "A", "legendFormat": "Success Rate", - "range": false, - "refId": "A" + "instant": true } ], "title": "Worker Success Rate (Target: > 99%)", "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "max": 100, "min": 0, "thresholds": { "mode": "absolute", "steps": [ - { "color": "red", "value": null }, - { "color": "orange", "value": 99.0 }, - { "color": "green", "value": 99.95 } + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 99.0 + }, + { + "color": "green", + "value": 99.95 + } ] }, "unit": "percent" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 }, + "gridPos": { + "h": 4, + "w": 6, + "x": 12, + "y": 1 + }, "id": 3, "options": { "colorMode": "value", @@ -150,46 +192,61 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "(1 - (sum(rate(run_googleapis_com:request_count{service_name=\"osv-grpc-v1\",response_code_class=\"5xx\", monitored_resource=\"cloud_run_revision\"}[$__range])) / sum(rate(run_googleapis_com:request_count{service_name=\"osv-grpc-v1\", monitored_resource=\"cloud_run_revision\"}[$__range])))) * 100", - "instant": true, + "refId": "A", "legendFormat": "Availability", - "range": false, - "refId": "A" + "instant": true } ], "title": "API Availability SLO (Target: 99.95%)", "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "green", "value": null }, - { "color": "orange", "value": 0.100 }, - { "color": "red", "value": 0.150 } + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 0.1 + }, + { + "color": "red", + "value": 0.15 + } ] }, "unit": "s" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 1 + }, "id": 4, "options": { "colorMode": "value", @@ -197,22 +254,21 @@ "justifyMode": "auto", "orientation": "auto", "reduceOptions": { - "calcs": ["lastNotNull"], + "calcs": [ + "lastNotNull" + ], "fields": "", "values": false }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "histogram_quantile(0.99, sum by(le) (rate(run_googleapis_com:request_latencies_bucket{service_name=\"osv-grpc-v1\", monitored_resource=\"cloud_run_revision\"}[5m]))) / 1000", - "instant": true, + "refId": "A", "legendFormat": "p99 Latency", - "range": false, - "refId": "A" + "instant": true } ], "title": "API p99 Latency (Target: <= 150ms)", @@ -220,256 +276,513 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, "id": 101, "title": "Worker Ingestion Pipeline Throughput", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineInterpolation": "smooth", - "lineWidth": 2, - "showPoints": "never", - "spanNulls": false, - "stacking": { "group": "A", "mode": "none" } - }, - "unit": "ops" - }, - "overrides": [] + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 6 }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, + "hiddenSeries": false, "id": 5, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "mode": "multi", "sort": "desc" } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "sum(rate(osv_worker_tasks_processed_total[5m])) by (status)", - "legendFormat": "{{status}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{status}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Worker Task Processing Rate", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "bars", - "fillOpacity": 80, - "lineWidth": 1, - "showPoints": "never", - "spanNulls": false, - "stacking": { "group": "A", "mode": "normal" } - }, - "unit": "short" - }, - "overrides": [] + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 8, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 6 }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, + "hiddenSeries": false, "id": 6, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", "options": { - "legend": { - "calcs": ["lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { "mode": "multi", "sort": "desc" } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "sum(increase(osv_worker_tasks_processed_total[1h])) by (status)", - "interval": "1h", + "refId": "A", "legendFormat": "{{status}}", - "range": true, - "refId": "A" + "interval": "1h" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Hourly Task Volume by Status", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 14 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, "id": 102, "title": "Public API Serving & Error Budget Burn Rate", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "reqps" - }, - "overrides": [] + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 15 }, - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 }, + "hiddenSeries": false, "id": 7, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { "mode": "multi", "sort": "desc" } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "sum by (response_code_class) (rate(run_googleapis_com:request_count{service_name=\"osv-grpc-v1\", monitored_resource=\"cloud_run_revision\"}[5m]))", - "legendFormat": "{{response_code_class}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{response_code_class}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Cloud Run Request Rate (QPS by Status Class)", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "reqps", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 10, - "lineWidth": 2 - }, - "unit": "s" - }, - "overrides": [] + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 15 }, - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 }, + "hiddenSeries": false, "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { "mode": "multi", "sort": "desc" } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "histogram_quantile(0.50, sum by(le) (rate(run_googleapis_com:request_latencies_bucket{service_name=\"osv-grpc-v1\", monitored_resource=\"cloud_run_revision\"}[5m]))) / 1000", - "legendFormat": "p50 Latency", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "p50 Latency" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "histogram_quantile(0.95, sum by(le) (rate(run_googleapis_com:request_latencies_bucket{service_name=\"osv-grpc-v1\", monitored_resource=\"cloud_run_revision\"}[5m]))) / 1000", - "legendFormat": "p95 Latency", - "range": true, - "refId": "B" + "refId": "B", + "legendFormat": "p95 Latency" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "histogram_quantile(0.99, sum by(le) (rate(run_googleapis_com:request_latencies_bucket{service_name=\"osv-grpc-v1\", monitored_resource=\"cloud_run_revision\"}[5m]))) / 1000", - "legendFormat": "p99 Latency", - "range": true, - "refId": "C" + "refId": "C", + "legendFormat": "p99 Latency" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Cloud Run API Latency Percentiles", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 23 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, "id": 103, "title": "Ingestion Latency by Source", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "fieldConfig": { - "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 10, - "lineWidth": 2 - }, - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 7200 } - ] - }, - "unit": "s" - }, - "overrides": [] + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 24 }, - "gridPos": { "h": 8, "w": 24, "x": 0, "y": 24 }, + "hiddenSeries": false, "id": 9, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { "mode": "multi", "sort": "desc" } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { "type": "prometheus", "uid": "gmp" }, - "editorMode": "code", "expr": "histogram_quantile(0.95, sum by(le, source) (rate(osv_worker_published_to_available_seconds_bucket[1h])))", - "legendFormat": "{{source}} (p95)", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{source}} (p95)" + } + ], + "thresholds": [ + { + "colorMode": "critical", + "fill": false, + "line": true, + "op": "gt", + "value": 7200 } ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Published-to-Available Lag by Source (Target: < 2h)", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } } ], "refresh": "30s", - "schemaVersion": 39, + "schemaVersion": 27, + "style": "dark", "tags": [ "osv", "executive", diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/home.json b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/home.json index 846dcd1a3d8..047413d8343 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/home.json +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/home.json @@ -3,12 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, + "datasource": "-- Plutono --", "enable": true, "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } @@ -16,13 +14,13 @@ }, "description": "Landing page and directory for all OSV.dev infrastructure, ingestion pipeline, data quality, and feed conversion dashboards.", "editable": false, - "fiscalYearStartMonth": 0, + "gnetId": null, "graphTooltip": 0, "id": null, "links": [], - "liveNow": false, "panels": [ { + "datasource": null, "gridPos": { "h": 13, "w": 16, @@ -31,19 +29,15 @@ }, "id": 1, "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "## Welcome to OSV.dev Observability\n\nChoose the dashboard below that best matches what you are investigating:\n\n| Dashboard | Best For / Questions Answered | Key Signals |\n| :--- | :--- | :--- |\n| **[1. Executive Overview & SLAs](/d/osv-exec-overview)** | **Overall health & SLO status** — *Is the public API healthy and fast? Are advisories published within our 2-hour freshness target?* | Cloud Run API availability & p99 latency, E2E publish-to-available lag, worker success rate |\n| **[2. Ingestion & Worker Pipeline Operations](/d/osv-pipeline-ingestion-ops)** | **On-call pipeline triage** — *Is Pub/Sub backed up? Are worker pools scaling and draining fast enough? Which tasks recently failed?* | Queue depth (`default` / `reimport` / `cves`), intake vs. drain rate, live error logs, reconciler & deleter safety limits |\n| **[3. Vulnerability Data Quality & Ecosystem Health](/d/osv-data-quality-drift)** | **Dataset integrity & feed freshness** — *Are Datastore and GCS out of sync? Which upstream feeds are stale or triggering linter errors?* | `recordchecker` drift, `osv-linter` findings by source/rule, feed staleness, `all.zip` export sizes, Gitter SSD usage |\n| **[4. CVE & Feed Conversions](/d/osv-cve-feed-conversions)** | **`vulnfeeds/` & CNA conversion quality** — *Why are CVEs failing to convert? How are CVEListV5, NVD, Debian, and Alpine converters running?* | Conversion funnel & outcomes, range extraction sources, Assigner CNA scorecards, `vulnfeeds/` CronJob status |\n\n---\n**Planned Deep-Dive Dashboards (Upcoming):** *5. API Serving & Analytics* · *6. Gitter & Recoverer Deep-Dive* · *7. CronJobs & Storage Capacity*\n\n*Tip: Click **Home** in the top-left breadcrumb from any dashboard to return to this directory.*", + "content": "## Welcome to OSV.dev Observability\n\nChoose the dashboard below that best matches what you are investigating:\n\n| Dashboard | Best For / Questions Answered | Key Signals |\n| :--- | :--- | :--- |\n| **[1. Executive Overview & SLAs](/d/osv-exec-overview)** | **Overall health & SLO status** — *Is the public API healthy and fast? Are advisories published within our 2-hour freshness target?* | Cloud Run API availability & p99 latency, E2E publish-to-available lag, worker success rate |\n| **[2. Ingestion & Worker Pipeline Operations](/d/osv-pipeline-ingestion-ops)** | **On-call pipeline triage** — *Is Pub/Sub backed up? Are worker pools scaling and draining fast enough? Which tasks recently failed?* | Queue depth (`default` / `reimport` / `cves`), intake vs. drain rate, error log triage links, reconciler & deleter safety limits |\n| **[3. Vulnerability Data Quality & Ecosystem Health](/d/osv-data-quality-drift)** | **Dataset integrity & feed freshness** — *Are Datastore and GCS out of sync? Which upstream feeds are stale or triggering linter errors?* | `recordchecker` drift, `osv-linter` findings by source/rule, feed staleness, `all.zip` export sizes, Gitter SSD usage |\n| **[4. CVE & Feed Conversions](/d/osv-cve-feed-conversions)** | **`vulnfeeds/` & CNA conversion quality** — *Why are CVEs failing to convert? How are CVEListV5, NVD, Debian, and Alpine converters running?* | Conversion funnel & outcomes, range extraction sources, Assigner CNA scorecards, `vulnfeeds/` CronJob status |\n\n---\n**Planned Deep-Dive Dashboards (Upcoming):** *5. API Serving & Analytics* · *6. Gitter & Recoverer Deep-Dive* · *7. CronJobs & Storage Capacity*\n\n*Tip: Click the **Plutono** icon or **Home** in the top-left navigation from any dashboard to return to this directory.*", "mode": "markdown" }, - "pluginVersion": "11.5.10", + "pluginVersion": "7.5.52", "title": "Where Should I Start?", "type": "text" }, { + "datasource": null, "description": "Automatically lists every provisioned dashboard tagged with 'osv'. New dashboards appear here automatically.", "gridPos": { "h": 13, @@ -53,11 +47,10 @@ }, "id": 2, "options": { - "keepTime": false, "includeVars": false, + "keepTime": false, "maxItems": 20, "query": "", - "showFolderNames": false, "showHeadings": false, "showRecentlyViewed": false, "showSearch": true, @@ -66,7 +59,7 @@ "osv" ] }, - "pluginVersion": "11.5.10", + "pluginVersion": "7.5.52", "title": "All OSV Dashboards (Auto-Updated)", "type": "dashlist" }, @@ -79,14 +72,12 @@ "y": 13 }, "id": 100, + "panels": [], "title": "At-a-Glance System Pulse (Click any card to open its dashboard)", "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "description": "24-hour Cloud Run availability for osv-grpc-v1. Click to open Dashboard 1 (Executive Overview & SLAs).", "fieldConfig": { "defaults": { @@ -144,17 +135,11 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.10", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "(1 - (sum(rate(run_googleapis_com:request_count{service_name=\"osv-grpc-v1\",response_code_class=\"5xx\", monitored_resource=\"cloud_run_revision\"}[24h])) / sum(rate(run_googleapis_com:request_count{service_name=\"osv-grpc-v1\", monitored_resource=\"cloud_run_revision\"}[24h])))) * 100", "instant": true, - "range": false, "refId": "A" } ], @@ -162,10 +147,7 @@ "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "description": "Undelivered Pub/Sub messages waiting in the primary worker subscription. Click to open Dashboard 2 (Ingestion & Worker Pipeline Operations).", "fieldConfig": { "defaults": { @@ -222,16 +204,10 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.10", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(pubsub_googleapis_com:subscription_num_undelivered_messages{subscription_id=\"default\"}) or vector(0)", - "range": true, "refId": "A" } ], @@ -239,10 +215,7 @@ "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "description": "Missing or stale GCS vulnerability blobs relative to Datastore detected by recordchecker. Click to open Dashboard 3 (Data Quality & Ecosystem Health).", "fieldConfig": { "defaults": { @@ -299,16 +272,10 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.10", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "max(osv_recordchecker_drift{type=\"gcs_missing_or_stale\"}) or vector(0)", - "range": true, "refId": "A" } ], @@ -316,10 +283,7 @@ "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "description": "Percentage of actionable CVEs successfully converted into OSV records across vulnfeeds/. Click to open Dashboard 4 (CVE & Feed Conversions).", "fieldConfig": { "defaults": { @@ -377,17 +341,11 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.10", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "100 * sum(osv_cve_conversion_outcomes{outcome=\"Successful\"}) / clamp_min(sum(osv_cve_conversion_outcomes{outcome!~\"Rejected|NoSoftware\"}), 1)", "instant": true, - "range": false, "refId": "A" } ], @@ -396,7 +354,8 @@ } ], "refresh": "1m", - "schemaVersion": 39, + "schemaVersion": 27, + "style": "dark", "tags": [ "directory", "home" @@ -414,6 +373,5 @@ "timezone": "browser", "title": "OSV.dev Observability Directory", "uid": "osv-home", - "version": 1, - "weekStart": "" + "version": 1 } diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/pipeline-ingestion-ops.json b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/pipeline-ingestion-ops.json index 4f383e1c97b..a3b9dbfcdb8 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/pipeline-ingestion-ops.json +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/dashboards/pipeline-ingestion-ops.json @@ -3,23 +3,20 @@ "list": [ { "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, + "datasource": "-- Plutono --", "enable": true, "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": false, - "fiscalYearStartMonth": 0, + "gnetId": null, "graphTooltip": 1, "id": null, "links": [], - "liveNow": false, "panels": [ { "collapsed": false, @@ -34,10 +31,7 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { "color": { @@ -86,29 +80,20 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(pubsub_googleapis_com:subscription_num_undelivered_messages{subscription_id=~\"default|.*tasks.*\"}) or sum(pubsub_googleapis_com:subscription_num_undelivered_messages{subscription_id=\"default\"})", - "instant": true, + "refId": "A", "legendFormat": "Default Tasks Backlog", - "range": false, - "refId": "A" + "instant": true } ], "title": "Default Tasks Backlog", "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { "color": { @@ -157,29 +142,20 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(pubsub_googleapis_com:subscription_num_undelivered_messages{subscription_id=~\".*reimport.*\"})", - "instant": true, + "refId": "A", "legendFormat": "Reimport Backlog", - "range": false, - "refId": "A" + "instant": true } ], "title": "Reimport Queue Backlog", "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "description": "Current age of the single oldest unacknowledged message across Pub/Sub subscriptions (labeled with its subscription_id). Drops immediately once the message is acknowledged or expires.", "fieldConfig": { "defaults": { @@ -229,29 +205,20 @@ }, "textMode": "value_and_name" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "topk(1, max by (subscription_id) (pubsub_googleapis_com:subscription_oldest_unacked_message_age))", - "instant": true, + "refId": "A", "legendFormat": "{{subscription_id}}", - "range": false, - "refId": "A" + "instant": true } ], "title": "Oldest Unacked Message Age", "type": "stat" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, + "datasource": "GMP (Prometheus)", "fieldConfig": { "defaults": { "color": { @@ -292,19 +259,13 @@ }, "textMode": "auto" }, - "pluginVersion": "11.5.0", + "pluginVersion": "7.5.52", "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(kube_deployment_status_replicas_available{deployment=~\"workers.*\"}) or sum(kube_deployment_status_replicas_available{deployment=\"workers\"})", - "instant": true, + "refId": "A", "legendFormat": "Active Workers", - "range": false, - "refId": "A" + "instant": true } ], "title": "Worker Pool Active Replicas", @@ -323,144 +284,194 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "short" - }, - "overrides": [] - }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, + "hiddenSeries": false, "id": 5, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (subscription_id) (pubsub_googleapis_com:subscription_num_undelivered_messages)", - "legendFormat": "{{subscription_id}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{subscription_id}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Pub/Sub Queue Depth by Topic / Subscription", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": true, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "ops" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, + "hiddenSeries": false, "id": 6, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(rate(pubsub_googleapis_com:topic_send_message_operation_count{topic_id=~\"tasks|reimport|cves\"}[5m]))", - "legendFormat": "Intake Rate (Tasks In)", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "Intake Rate (Tasks In)" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(rate(osv_worker_tasks_processed_total[5m]))", - "legendFormat": "Drain Rate (Worker Tasks Out)", - "range": true, - "refId": "B" + "refId": "B", + "legendFormat": "Drain Rate (Worker Tasks Out)" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum(rate(osv_worker_tasks_processed_total[5m])) - sum(rate(pubsub_googleapis_com:topic_send_message_operation_count{topic_id=~\"tasks|reimport|cves\"}[5m]))", - "legendFormat": "Net Drain Speed (Tasks/s)", - "range": true, - "refId": "C" + "refId": "C", + "legendFormat": "Net Drain Speed (Tasks/s)" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Intake vs. Drain Velocity (Queue Drain Speed)", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, @@ -475,172 +486,214 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 10, - "lineWidth": 2 - }, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "orange", - "value": 10 - }, - { - "color": "red", - "value": 30 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 }, + "hiddenSeries": false, "id": 7, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "histogram_quantile(0.50, sum by(le) (rate(osv_worker_record_latency_seconds_bucket[5m])))", - "legendFormat": "p50 Latency", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "p50 Latency" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "histogram_quantile(0.90, sum by(le) (rate(osv_worker_record_latency_seconds_bucket[5m])))", - "legendFormat": "p90 Latency", - "range": true, - "refId": "B" + "refId": "B", + "legendFormat": "p90 Latency" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "histogram_quantile(0.95, sum by(le) (rate(osv_worker_record_latency_seconds_bucket[5m])))", - "legendFormat": "p95 Latency", - "range": true, - "refId": "C" + "refId": "C", + "legendFormat": "p95 Latency" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "histogram_quantile(0.99, sum by(le) (rate(osv_worker_record_latency_seconds_bucket[5m])))", - "legendFormat": "p99 Latency", - "range": true, - "refId": "D" + "refId": "D", + "legendFormat": "p99 Latency" } ], + "thresholds": [ + { + "colorMode": "warning", + "fill": false, + "line": true, + "op": "gt", + "value": 10 + }, + { + "colorMode": "critical", + "fill": false, + "line": true, + "op": "gt", + "value": 30 + } + ], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Worker Task Latency Distribution (Task Receive to Finish)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "ops" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 }, + "hiddenSeries": false, "id": 8, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (action, status) (rate(osv_worker_tasks_processed_total[5m]))", - "legendFormat": "{{action}} ({{status}})", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{action}} ({{status}})" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Worker Tasks Processed per Second by Action & Status", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, @@ -655,203 +708,284 @@ "type": "row" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "ops" - }, - "overrides": [] - }, + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 0, "y": 24 }, + "hiddenSeries": false, "id": 9, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (error_type, recoverable) (rate(osv_worker_failed_tasks_total[5m]))", - "legendFormat": "{{error_type}} (recoverable={{recoverable}})", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "{{error_type}} (recoverable={{recoverable}})" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Worker Task Failures by Error Type & Recoverability", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "short" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "ops", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 8, "y": 24 }, + "hiddenSeries": false, "id": 10, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (status) (osv_reconciler_records_reconciled)", - "legendFormat": "Reconciled ({{status}})", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "Reconciled ({{status}})" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (status) (rate(osv_worker_tasks_processed_total{work_pool=\"reimport\"}[5m]))", - "legendFormat": "Reimport Pool / s ({{status}})", - "range": true, - "refId": "B" + "refId": "B", + "legendFormat": "Reimport Pool / s ({{status}})" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Importer Reconciler & Reimport Pool Status", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "gmp" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "drawStyle": "line", - "fillOpacity": 15, - "lineWidth": 2 - }, - "unit": "short" - }, - "overrides": [] + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "GMP (Prometheus)", + "fill": 2, + "fillGradient": 0, "gridPos": { "h": 8, "w": 8, "x": 16, "y": 24 }, + "hiddenSeries": false, "id": 11, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "nullPointMode": "null", "options": { - "legend": { - "calcs": [ - "mean", - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } + "alertThreshold": true }, - "pluginVersion": "11.5.0", + "percentage": false, + "pluginVersion": "7.5.52", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, "targets": [ { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (source) (increase(osv_deleter_upstream_withdrawals_total[1h]))", - "legendFormat": "Withdrawals (1h): {{source}}", - "range": true, - "refId": "A" + "refId": "A", + "legendFormat": "Withdrawals (1h): {{source}}" }, { - "datasource": { - "type": "prometheus", - "uid": "gmp" - }, - "editorMode": "code", "expr": "sum by (source) (osv_deleter_refused_deletions)", - "legendFormat": "Safety Refusals: {{source}}", - "range": true, - "refId": "B" + "refId": "B", + "legendFormat": "Safety Refusals: {{source}}" } ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, "title": "Upstream Withdrawals & Safety Refusals", - "type": "timeseries" + "tooltip": { + "shared": true, + "sort": 2, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": 0, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } }, { "collapsed": false, @@ -866,45 +1000,26 @@ "type": "row" }, { - "datasource": { - "type": "googlecloud-logging-datasource", - "uid": "cloud-logging" - }, + "datasource": null, "gridPos": { - "h": 10, + "h": 7, "w": 24, "x": 0, "y": 33 }, "id": 12, "options": { - "dedupStrategy": "none", - "enableLogDetails": true, - "prettifyLogMessage": false, - "showCommonLabels": false, - "showLabels": false, - "showTime": true, - "sortOrder": "Descending", - "wrapLogMessage": false - }, - "pluginVersion": "11.5.0", - "targets": [ - { - "datasource": { - "type": "googlecloud-logging-datasource", - "uid": "cloud-logging" - }, - "projectId": "oss-vdb-test", - "queryText": "resource.type=\"k8s_container\"\nresource.labels.container_name=~\"^(worker-private|workers-reimport|workers-cves|recoverer|importer|importer-deleter)$\"\nseverity>=ERROR", - "refId": "A" - } - ], - "title": "Failed Worker, Importer & Recoverer Error Logs", - "type": "logs" + "content": "### Cloud Logging Triage Links (`severity >= ERROR`)\nInline Cloud Logging panels require Grafana >= 8.5 (`googlecloud-logging-datasource`); use the pre-filtered Google Cloud Logs Explorer links below for live stack traces and `ref_id` inspection:\n\n- [**All Pipeline Error Logs** (`worker-*`, `recoverer`, `importer`, `importer-deleter`)](https://console.cloud.google.com/logs/query;query=resource.type%3D%22k8s_container%22%0Aresource.labels.container_name%3D~%22%5E%28worker-private%7Cworkers-reimport%7Cworkers-cves%7Crecoverer%7Cimporter%7Cimporter-deleter%29%24%22%0Aseverity%3E%3DERROR?project=oss-vdb-test)\n- [**Worker Pool Errors Only** (`worker-private`, `workers-reimport`, `workers-cves`)](https://console.cloud.google.com/logs/query;query=resource.type%3D%22k8s_container%22%0Aresource.labels.container_name%3D~%22%5E%28worker-private%7Cworkers-reimport%7Cworkers-cves%29%24%22%0Aseverity%3E%3DERROR?project=oss-vdb-test)\n- [**Importer & Deleter Errors** (`importer`, `importer-deleter`)](https://console.cloud.google.com/logs/query;query=resource.type%3D%22k8s_container%22%0Aresource.labels.container_name%3D~%22%5E%28importer%7Cimporter-deleter%29%24%22%0Aseverity%3E%3DERROR?project=oss-vdb-test)\n- [**Recoverer Errors** (`recoverer`)](https://console.cloud.google.com/logs/query;query=resource.type%3D%22k8s_container%22%0Aresource.labels.container_name%3D~%22%5E%28recoverer%29%24%22%0Aseverity%3E%3DERROR?project=oss-vdb-test)\n\n```text\nresource.type=\"k8s_container\"\nresource.labels.container_name=~\"^(worker-private|workers-reimport|workers-cves|recoverer|importer|importer-deleter)$\"\nseverity>=ERROR\n```", + "mode": "markdown" + }, + "pluginVersion": "7.5.52", + "title": "Failed Worker, Importer & Recoverer Error Logs (Cloud Logging Explorer)", + "type": "text" } ], "refresh": "30s", - "schemaVersion": 39, + "schemaVersion": 27, + "style": "dark", "tags": [ "osv", "pipeline", @@ -934,4 +1049,4 @@ "title": "2. Ingestion & Worker Pipeline Operations", "uid": "osv-pipeline-ingestion-ops", "version": 1 -} \ No newline at end of file +} diff --git a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/grafana_deployment.yaml b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/grafana_deployment.yaml index 78f01a8f38b..cc4864cc4da 100644 --- a/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/grafana_deployment.yaml +++ b/deployment/clouddeploy/gke-workers/environments/oss-vdb-test/monitoring/grafana_deployment.yaml @@ -20,44 +20,38 @@ spec: spec: containers: - name: grafana - image: grafana/grafana:11.5.10@sha256:4d1b2146de6488324c4e880be2028620259c414406e36a9ac2160485f8fd3259 + image: ghcr.io/credativ/plutono:v7.5.52@sha256:5e5c86066c5adc0e7fa06f33eeb3396ac6f98cf1f387253c681fb7783c610f5e imagePullPolicy: IfNotPresent ports: - name: http containerPort: 3000 env: - - name: GF_SECURITY_ALLOW_EMBEDDING + - name: PL_SECURITY_ALLOW_EMBEDDING value: "true" - - name: GF_AUTH_ANONYMOUS_ENABLED + - name: PL_AUTH_ANONYMOUS_ENABLED value: "false" - - name: GF_AUTH_BASIC_ENABLED + - name: PL_AUTH_BASIC_ENABLED value: "false" - - name: GF_AUTH_DISABLE_LOGIN_FORM + - name: PL_AUTH_DISABLE_LOGIN_FORM value: "true" - - name: GF_AUTH_JWT_ENABLED + - name: PL_AUTH_DISABLE_SIGNOUT_MENU value: "true" - - name: GF_AUTH_JWT_HEADER_NAME - value: "X-Goog-IAP-JWT-Assertion" - - name: GF_AUTH_JWT_EMAIL_CLAIM - value: "email" - - name: GF_AUTH_JWT_USERNAME_CLAIM - value: "email" - - name: GF_AUTH_JWT_JWK_SET_URL - value: "https://www.gstatic.com/iap/verify/public_key-jwk" - - name: GF_AUTH_JWT_EXPECT_CLAIMS - value: '{"iss": "https://cloud.google.com/iap"}' - - name: GF_AUTH_JWT_AUTO_SIGN_UP + - name: PL_AUTH_PROXY_ENABLED value: "true" - - name: GF_USERS_AUTO_ASSIGN_ORG + - name: PL_AUTH_PROXY_HEADER_NAME + value: "X-Goog-Authenticated-User-Email" + - name: PL_AUTH_PROXY_HEADER_PROPERTY + value: "username" + - name: PL_AUTH_PROXY_AUTO_SIGN_UP value: "true" - - name: GF_USERS_AUTO_ASSIGN_ORG_ROLE + - name: PL_USERS_AUTO_ASSIGN_ORG + value: "true" + - name: PL_USERS_AUTO_ASSIGN_ORG_ROLE value: "Viewer" - - name: GF_SERVER_ROOT_URL + - name: PL_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH + value: "/etc/plutono/dashboards/home.json" + - name: PL_SERVER_ROOT_URL value: "https://monitoring.test.osv.dev" - - name: GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH - value: "/etc/grafana/dashboards/home.json" - - name: GF_INSTALL_PLUGINS - value: "googlecloud-logging-datasource 1.8.1" resources: requests: cpu: 250m @@ -83,16 +77,16 @@ spec: failureThreshold: 2 volumeMounts: - name: datasources - mountPath: /etc/grafana/provisioning/datasources + mountPath: /etc/plutono/provisioning/datasources readOnly: true - name: dashboards-prov - mountPath: /etc/grafana/provisioning/dashboards + mountPath: /etc/plutono/provisioning/dashboards readOnly: true - name: dashboards - mountPath: /etc/grafana/dashboards + mountPath: /etc/plutono/dashboards readOnly: true - name: storage - mountPath: /var/lib/grafana + mountPath: /var/lib/plutono - name: gmp-frontend image: gke.gcr.io/prometheus-engine/frontend:v0.18.2-gke.1@sha256:35ab356d969255dd7694ae371bf0991b97907451b4c7e1574b58a096d3be5977 args: diff --git a/tools/run_grafana_local.sh b/tools/run_grafana_local.sh index b9c47e13a30..fddf1e2209e 100755 --- a/tools/run_grafana_local.sh +++ b/tools/run_grafana_local.sh @@ -56,14 +56,6 @@ datasources: jsonData: authenticationType: gce defaultProject: $GCP_PROJECT - - name: Cloud Logging - uid: cloud-logging - type: googlecloud-logging-datasource - access: proxy - editable: true - jsonData: - authenticationType: gce - defaultProject: $GCP_PROJECT EOF # Extract dashboards.yaml provider @@ -75,9 +67,10 @@ providers: folder: '' type: file disableDeletion: false + updateIntervalSeconds: 10 editable: true # Allow editing locally options: - path: /etc/grafana/dashboards + path: /etc/plutono/dashboards EOF chmod 644 "$TMP_DIR/datasources.yaml" "$TMP_DIR/dashboards.yaml" @@ -91,16 +84,16 @@ docker run -d --rm \ --web.listen-address=0.0.0.0:9090 \ --query.project-id=$GCP_PROJECT -echo "Starting Grafana on http://localhost:3000" +echo "Starting Plutono (Apache 2.0 Grafana 7.5 fork) on http://localhost:3000" echo "Login skipped (Anonymous access enabled as Admin)" echo "To save changes: Edit dashboard in UI -> Settings -> JSON Model -> Copy -> Save to file" # Open browser automatically in background ( - # Wait for Grafana to be ready + # Wait for Plutono to be ready for i in {1..30}; do if curl -s -o /dev/null http://localhost:3000/api/health; then - echo "Grafana is ready! Opening browser..." + echo "Plutono is ready! Opening browser..." if command -v xdg-open > /dev/null; then xdg-open http://localhost:3000 > /dev/null 2>&1 elif command -v open > /dev/null; then @@ -114,20 +107,19 @@ echo "To save changes: Edit dashboard in UI -> Settings -> JSON Model -> Copy -> done ) & -# Run Grafana +# Run Plutono # Anonymous access is enabled as Admin for local development convenience ONLY. # Do NOT use these settings in production! docker run --rm \ --name grafana-local \ --network grafana-local-net \ -p 127.0.0.1:3000:3000 \ - -e GF_AUTH_ANONYMOUS_ENABLED="true" \ - -e GF_AUTH_ANONYMOUS_ORG_ROLE="Admin" \ - -e GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH="/etc/grafana/dashboards/home.json" \ - -e GF_INSTALL_PLUGINS="googlecloud-logging-datasource 1.8.1" \ + -e PL_AUTH_ANONYMOUS_ENABLED="true" \ + -e PL_AUTH_ANONYMOUS_ORG_ROLE="Admin" \ + -e PL_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH="/etc/plutono/dashboards/home.json" \ -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/adc.json \ -v "$TMP_DIR/adc.json:/tmp/keys/adc.json:ro" \ - -v "$TMP_DIR/datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml:ro" \ - -v "$TMP_DIR/dashboards.yaml:/etc/grafana/provisioning/dashboards/dashboards.yaml:ro" \ - -v "$(pwd)/$MONITORING_DIR/dashboards:/etc/grafana/dashboards:ro" \ - grafana/grafana:11.5.10@sha256:4d1b2146de6488324c4e880be2028620259c414406e36a9ac2160485f8fd3259 + -v "$TMP_DIR/datasources.yaml:/etc/plutono/provisioning/datasources/datasources.yaml:ro" \ + -v "$TMP_DIR/dashboards.yaml:/etc/plutono/provisioning/dashboards/dashboards.yaml:ro" \ + -v "$(pwd)/$MONITORING_DIR/dashboards:/etc/plutono/dashboards:ro" \ + ghcr.io/credativ/plutono:v7.5.52@sha256:5e5c86066c5adc0e7fa06f33eeb3396ac6f98cf1f387253c681fb7783c610f5e