Files
ljwx-k8s/monitoring-migration-backup/dashboard-database-backups.json
2026-02-20 22:50:45 +08:00

1 line
9.8 KiB
JSON

{"database-backups-dashboard.json":"{\n \"dashboard\": {\n \"title\": \"Database Backups Monitoring\",\n \"tags\": [\"database\", \"backup\", \"postgres\", \"mysql\", \"minio\"],\n \"timezone\": \"browser\",\n \"schemaVersion\": 16,\n \"version\": 0,\n \"refresh\": \"30s\",\n \"panels\": [\n {\n \"id\": 1,\n \"title\": \"Backup Jobs Overview\",\n \"type\": \"stat\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 0,\n \"w\": 24,\n \"h\": 4\n },\n \"targets\": [\n {\n \"expr\": \"sum(kube_job_status_succeeded{namespace=\\\"infra\\\", job_name=~\\\"postgres-backup.*|mysql-backup.*\\\"}) OR vector(0)\",\n \"legendFormat\": \"Successful Backups (24h)\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"sum(kube_job_status_failed{namespace=\\\"infra\\\", job_name=~\\\"postgres-backup.*|mysql-backup.*\\\"}) OR vector(0)\",\n \"legendFormat\": \"Failed Backups (24h)\",\n \"refId\": \"B\"\n },\n {\n \"expr\": \"count(kube_cronjob_info{namespace=\\\"infra\\\", cronjob=~\\\"postgres-backup.*|mysql-backup.*\\\"}) OR vector(0)\",\n \"legendFormat\": \"Active CronJobs\",\n \"refId\": \"C\"\n }\n ],\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"area\",\n \"justifyMode\": \"auto\",\n \"orientation\": \"horizontal\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"thresholds\": {\n \"mode\": \"absolute\",\n \"steps\": [\n {\n \"color\": \"green\",\n \"value\": null\n },\n {\n \"color\": \"red\",\n \"value\": 1\n }\n ]\n }\n }\n }\n },\n {\n \"id\": 2,\n \"title\": \"PostgreSQL Backup Status\",\n \"type\": \"timeseries\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 4,\n \"w\": 12,\n \"h\": 8\n },\n \"targets\": [\n {\n \"expr\": \"kube_job_status_succeeded{namespace=\\\"infra\\\", job_name=~\\\"postgres-backup.*\\\"}\",\n \"legendFormat\": \"Success - {{job_name}}\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"kube_job_status_failed{namespace=\\\"infra\\\", job_name=~\\\"postgres-backup.*\\\"}\",\n \"legendFormat\": \"Failed - {{job_name}}\",\n \"refId\": \"B\"\n }\n ],\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"palette-classic\"\n },\n \"custom\": {\n \"fillOpacity\": 10,\n \"lineWidth\": 2\n }\n }\n }\n },\n {\n \"id\": 3,\n \"title\": \"MySQL Backup Status\",\n \"type\": \"timeseries\",\n \"gridPos\": {\n \"x\": 12,\n \"y\": 4,\n \"w\": 12,\n \"h\": 8\n },\n \"targets\": [\n {\n \"expr\": \"kube_job_status_succeeded{namespace=\\\"infra\\\", job_name=~\\\"mysql-backup.*\\\"}\",\n \"legendFormat\": \"Success - {{job_name}}\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"kube_job_status_failed{namespace=\\\"infra\\\", job_name=~\\\"mysql-backup.*\\\"}\",\n \"legendFormat\": \"Failed - {{job_name}}\",\n \"refId\": \"B\"\n }\n ],\n \"fieldConfig\": {\n \"defaults\": {\n \"color\": {\n \"mode\": \"palette-classic\"\n },\n \"custom\": {\n \"fillOpacity\": 10,\n \"lineWidth\": 2\n }\n }\n }\n },\n {\n \"id\": 4,\n \"title\": \"Backup Job Duration\",\n \"type\": \"timeseries\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 12,\n \"w\": 12,\n \"h\": 8\n },\n \"targets\": [\n {\n \"expr\": \"kube_job_status_completion_time{namespace=\\\"infra\\\", job_name=~\\\"postgres-backup.*\\\"} - kube_job_status_start_time{namespace=\\\"infra\\\", job_name=~\\\"postgres-backup.*\\\"}\",\n \"legendFormat\": \"PostgreSQL - {{job_name}}\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"kube_job_status_completion_time{namespace=\\\"infra\\\", job_name=~\\\"mysql-backup.*\\\"} - kube_job_status_start_time{namespace=\\\"infra\\\", job_name=~\\\"mysql-backup.*\\\"}\",\n \"legendFormat\": \"MySQL - {{job_name}}\",\n \"refId\": \"B\"\n }\n ],\n \"fieldConfig\": {\n \"defaults\": {\n \"unit\": \"s\",\n \"custom\": {\n \"fillOpacity\": 10,\n \"lineWidth\": 2\n }\n }\n }\n },\n {\n \"id\": 5,\n \"title\": \"Last Successful Backup\",\n \"type\": \"stat\",\n \"gridPos\": {\n \"x\": 12,\n \"y\": 12,\n \"w\": 12,\n \"h\": 8\n },\n \"targets\": [\n {\n \"expr\": \"max(kube_job_status_completion_time{namespace=\\\"infra\\\", job_name=~\\\"postgres-backup.*\\\", condition=\\\"Complete\\\"}) * 1000\",\n \"legendFormat\": \"PostgreSQL Last Backup\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"max(kube_job_status_completion_time{namespace=\\\"infra\\\", job_name=~\\\"mysql-backup.*\\\", condition=\\\"Complete\\\"}) * 1000\",\n \"legendFormat\": \"MySQL Last Backup\",\n \"refId\": \"B\"\n }\n ],\n \"options\": {\n \"colorMode\": \"background\",\n \"graphMode\": \"none\"\n },\n \"fieldConfig\": {\n \"defaults\": {\n \"unit\": \"dateTimeAsIso\"\n }\n }\n },\n {\n \"id\": 6,\n \"title\": \"PostgreSQL Database Status\",\n \"type\": \"stat\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 20,\n \"w\": 12,\n \"h\": 6\n },\n \"targets\": [\n {\n \"expr\": \"pg_up{namespace=\\\"infra\\\"}\",\n \"legendFormat\": \"PostgreSQL Status\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"pg_stat_database_numbackends{namespace=\\\"infra\\\", datname=\\\"appdb\\\"}\",\n \"legendFormat\": \"Active Connections\",\n \"refId\": \"B\"\n }\n ],\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"area\"\n }\n },\n {\n \"id\": 7,\n \"title\": \"Redis Database Status\",\n \"type\": \"stat\",\n \"gridPos\": {\n \"x\": 12,\n \"y\": 20,\n \"w\": 12,\n \"h\": 6\n },\n \"targets\": [\n {\n \"expr\": \"redis_up{namespace=\\\"infra\\\"}\",\n \"legendFormat\": \"Redis Status\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"redis_connected_clients{namespace=\\\"infra\\\"}\",\n \"legendFormat\": \"Connected Clients\",\n \"refId\": \"B\"\n }\n ],\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"area\"\n }\n },\n {\n \"id\": 8,\n \"title\": \"MySQL Database Status\",\n \"type\": \"stat\",\n \"gridPos\": {\n \"x\": 0,\n \"y\": 26,\n \"w\": 12,\n \"h\": 6\n },\n \"targets\": [\n {\n \"expr\": \"mysql_up{namespace=\\\"infra\\\"} OR vector(0)\",\n \"legendFormat\": \"MySQL Status\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"mysql_global_status_threads_connected{namespace=\\\"infra\\\"}\",\n \"legendFormat\": \"Active Connections\",\n \"refId\": \"B\"\n }\n ],\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"area\"\n }\n },\n {\n \"id\": 9,\n \"title\": \"MinIO Storage Status\",\n \"type\": \"stat\",\n \"gridPos\": {\n \"x\": 12,\n \"y\": 26,\n \"w\": 12,\n \"h\": 6\n },\n \"targets\": [\n {\n \"expr\": \"minio_cluster_nodes_online_total{namespace=\\\"infra\\\"}\",\n \"legendFormat\": \"MinIO Nodes Online\",\n \"refId\": \"A\"\n },\n {\n \"expr\": \"minio_bucket_usage_total_bytes{namespace=\\\"infra\\\", bucket=\\\"backups\\\"} / 1024 / 1024\",\n \"legendFormat\": \"Backup Bucket Size (MB)\",\n \"refId\": \"B\"\n }\n ],\n \"options\": {\n \"colorMode\": \"value\",\n \"graphMode\": \"area\"\n }\n }\n ],\n \"templating\": {\n \"list\": []\n },\n \"annotations\": {\n \"list\": [\n {\n \"datasource\": \"Prometheus\",\n \"enable\": true,\n \"expr\": \"changes(kube_cronjob_status_last_schedule_time{namespace=\\\"infra\\\", cronjob=~\\\"postgres-backup.*|mysql-backup.*\\\"}[1m]) \u003e 0\",\n \"iconColor\": \"green\",\n \"name\": \"Backup Schedule\",\n \"tagKeys\": \"cronjob\",\n \"titleFormat\": \"Backup Scheduled\"\n }\n ]\n },\n \"editable\": true,\n \"gnetId\": null,\n \"graphTooltip\": 1,\n \"time\": {\n \"from\": \"now-24h\",\n \"to\": \"now\"\n },\n \"uid\": \"database-backups\",\n \"version\": 1\n }\n}\n"}