From 68006467f75ccdcb47317d9f1138fb5da59446e8 Mon Sep 17 00:00:00 2001 From: yuyr Date: Wed, 17 Jun 2026 20:45:37 +0800 Subject: [PATCH] =?UTF-8?q?20260617=20=E5=A2=9E=E5=8A=A0=E7=8A=B6=E6=80=81?= =?UTF-8?q?DB=E7=9B=91=E6=8E=A7=E6=8C=87=E6=A0=87=E5=92=8CGrafana=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboards/ours-rp-soak-overview.json | 88 +++++++++++++++++++ src/tools/rpki_artifact_metrics.rs | 23 +++++ 2 files changed, 111 insertions(+) diff --git a/monitor/grafana/dashboards/ours-rp-soak-overview.json b/monitor/grafana/dashboards/ours-rp-soak-overview.json index ebe15e0..805bb56 100644 --- a/monitor/grafana/dashboards/ours-rp-soak-overview.json +++ b/monitor/grafana/dashboards/ours-rp-soak-overview.json @@ -614,6 +614,94 @@ ], "title": "Max RSS Over Time", "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "Prometheus" + }, + "fieldConfig": { + "defaults": { + "unit": "bytes", + "decimals": 2 + }, + "overrides": [] + }, + "gridPos": { + "x": 0, + "y": 32, + "w": 24, + "h": 8 + }, + "id": 15, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "expr": "ours_rp_state_db_size_bytes", + "legendFormat": "{{db}}", + "refId": "A" + } + ], + "title": "State DB Size Over Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "Prometheus" + }, + "fieldConfig": { + "defaults": { + "unit": "none", + "decimals": 0 + }, + "overrides": [] + }, + "gridPos": { + "x": 0, + "y": 40, + "w": 24, + "h": 8 + }, + "id": 16, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "expr": "ours_rp_state_db_files", + "legendFormat": "{{db}}", + "refId": "A" + } + ], + "title": "State DB File Count Over Time", + "type": "timeseries" } ], "refresh": "5s", diff --git a/src/tools/rpki_artifact_metrics.rs b/src/tools/rpki_artifact_metrics.rs index 1c15ad1..ee72b15 100644 --- a/src/tools/rpki_artifact_metrics.rs +++ b/src/tools/rpki_artifact_metrics.rs @@ -1435,6 +1435,24 @@ fn render_latest_metrics(writer: &mut PromWriter<'_>, instance: &str, latest: &L &[label("instance", instance), label("path", path)], stat.file_count as f64, ); + writer.gauge( + "ours_rp_state_db_size_bytes", + "Persistent state database size from latest run pathStats", + &[label("instance", instance), label("db", path)], + stat.total_size_bytes as f64, + ); + writer.gauge( + "ours_rp_state_db_files", + "Persistent state database file count from latest run pathStats", + &[label("instance", instance), label("db", path)], + stat.file_count as f64, + ); + writer.gauge( + "ours_rp_state_db_dirs", + "Persistent state database directory count from latest run pathStats", + &[label("instance", instance), label("db", path)], + stat.dir_count as f64, + ); } } @@ -2296,6 +2314,11 @@ mod tests { assert!(metrics.contains("ours_rp_cir_object_list_digest_present")); assert!(metrics.contains("ours_rp_cir_reject_list_digest_present_by_source")); assert!(metrics.contains("ours_rp_ccr_state_items")); + assert!( + metrics.contains(r#"ours_rp_state_db_size_bytes{instance="test",db="work-db"} 99"#) + ); + assert!(metrics.contains(r#"ours_rp_state_db_files{instance="test",db="work-db"} 2"#)); + assert!(metrics.contains(r#"ours_rp_state_db_dirs{instance="test",db="work-db"} 1"#)); assert!( metrics.contains(r#"ours_rp_cir_objects_by_source{instance="test",source="fresh"} 2"#) );