[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-cockroachdb-reviewing-cluster-health":3,"mdc-eys9az-key":39,"related-org-cockroachdb-reviewing-cluster-health":2867,"related-repo-cockroachdb-reviewing-cluster-health":3025},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":34,"sourceUrl":37,"mdContent":38},"reviewing-cluster-health","review CockroachDB cluster health","Performs a comprehensive health check of a CockroachDB cluster. Gathers deployment context first, then provides tier-appropriate diagnostics. Self-Hosted uses SQL against node-level system tables and CLI. Advanced\u002FBYOC use Cloud Console and SQL with node visibility. Standard monitors provisioned compute and workload via Cloud Console. Basic monitors Request Unit consumption and connectivity. Use for daily checks, pre-maintenance validation, post-incident verification, or production readiness assessment.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"cockroachdb","CockroachDB","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fcockroachdb.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Performance","performance","tag",{"name":17,"slug":18,"type":15},"Monitoring","monitoring",{"name":20,"slug":21,"type":15},"Database","database",{"name":23,"slug":24,"type":15},"Debugging","debugging",3,"https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fclaude-plugin","2026-07-12T07:57:06.877963",null,2,[31,32,8,33],"claude","cockroach-cloud","developer-tools",{"repoUrl":26,"stars":25,"forks":29,"topics":35,"description":36},[31,32,8,33],"CockroachDB development plugin for Claude","https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fclaude-plugin\u002Ftree\u002FHEAD\u002Fskills\u002Fcockroachdb-operations-and-lifecycle\u002Freviewing-cluster-health","---\nname: reviewing-cluster-health\ndescription: Performs a comprehensive health check of a CockroachDB cluster. Gathers deployment context first, then provides tier-appropriate diagnostics. Self-Hosted uses SQL against node-level system tables and CLI. Advanced\u002FBYOC use Cloud Console and SQL with node visibility. Standard monitors provisioned compute and workload via Cloud Console. Basic monitors Request Unit consumption and connectivity. Use for daily checks, pre-maintenance validation, post-incident verification, or production readiness assessment.\ncompatibility: Self-Hosted requires SQL access with admin or VIEWCLUSTERMETADATA privilege. Advanced\u002FBYOC require Cloud Console and SQL connectivity. Standard requires Cloud Console and SQL. Basic requires Cloud Console.\nmetadata:\n  author: cockroachdb\n  version: \"2.0\"\n---\n\n# Reviewing Cluster Health\n\nPerforms a comprehensive health check of a CockroachDB cluster. Before running diagnostics, this skill gathers deployment context to provide the right queries and tools for the operator's tier.\n\n## When to Use This Skill\n\n- Daily or shift-start operational health checks\n- Before starting maintenance (Self-Hosted, Advanced, BYOC)\n- After incidents to confirm recovery\n- Verifying production readiness\n- Monitoring capacity and performance\n\n**For live query issues:** Use [triaging-live-sql-activity](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Ftriaging-live-sql-activity\u002FSKILL.md).\n**For background jobs:** Use [monitoring-background-jobs](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fmonitoring-background-jobs\u002FSKILL.md).\n**For range analysis:** Use [analyzing-range-distribution](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fanalyzing-range-distribution\u002FSKILL.md).\n\n---\n\n## Step 1: Gather Context\n\n### Required Context\n\n| Question | Options | Why It Matters |\n|----------|---------|----------------|\n| **Deployment tier?** | Self-Hosted, Advanced, BYOC, Standard, Basic | Determines available diagnostics and operator responsibilities |\n| **Reason for health check?** | Daily check, Pre-maintenance, Post-incident, Pre-upgrade | Prioritizes which dimensions to check first |\n\n### Additional Context (by tier)\n\n**If Self-Hosted:**\n\n| Question | Options | Why It Matters |\n|----------|---------|----------------|\n| **Access available?** | SQL + CLI, SQL only | Determines which tools can be used |\n| **Cloud provider?** | AWS, GCP, Azure, On-Premises | Affects infrastructure-level checks |\n| **Kubernetes deployment?** | Yes (Operator, Helm, manual), No | Changes CLI commands and monitoring |\n| **Node count and regions?** | e.g., 9 nodes, 3 regions | Sets expectations for query results |\n\n**If Advanced or BYOC:**\n\n| Question | Options | Why It Matters |\n|----------|---------|----------------|\n| **Cloud provider?** (BYOC only) | AWS, GCP, Azure | For infrastructure-level monitoring in your cloud account |\n\n**If Standard:**\n\n| Question | Options | Why It Matters |\n|----------|---------|----------------|\n| **Current provisioned vCPUs?** | Number | Context for compute utilization assessment |\n\n**If Basic:** No additional context needed.\n\n### Context-Driven Routing\n\n| Tier | Go To |\n|------|-------|\n| Self-Hosted | [Self-Hosted Health Check](#self-hosted-health-check) |\n| Advanced | [Advanced Health Check](#advanced-health-check) |\n| BYOC | [BYOC Health Check](#byoc-health-check) |\n| Standard | [Standard Health Check](#standard-health-check) |\n| Basic | [Basic Health Check](#basic-health-check) |\n\n---\n\n## Self-Hosted Health Check\n\n**Applies when:** Tier = Self-Hosted\n\nSelf-Hosted node-level health is read primarily through `cockroach node status` (CLI) and the DB Console. Cluster settings and jobs are read through public SQL (`SHOW ALL CLUSTER SETTINGS`, `SHOW JOBS`). The `crdb_internal` virtual tables for cluster topology, storage, and certificates are not for production use — see the [docs](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fcrdb-internal) for the production-safe table list.\n\n### Check 1: Node Liveness, Version, and Replication\n\n```bash\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n```\n\nKey columns:\n- `is_live` — `false` requires immediate investigation\n- `is_draining`, `is_decommissioning`, `membership` — flag in-progress lifecycle operations\n- `started_at` — compare across runs to spot flapping (node restarts)\n- `build` — version per node; should be a single value (or two during a rolling upgrade)\n- `ranges_underreplicated` — non-zero indicates ranges below the zone's `num_replicas`\n\nFor finer-grained range breakdown, use the DB Console **Replication** page.\n\n### Check 2: Storage Capacity\n\nNo production-safe SQL view exposes per-store capacity. Use:\n- DB Console **Overview** → **Storage** for per-node usage\n- The Prometheus metric endpoint on each node: `curl -ks https:\u002F\u002F\u003Cnode>:8080\u002F_status\u002Fvars | grep '^capacity'` (`capacity`, `capacity_used`, `capacity_available`)\n\n### Check 3: Certificate Expiration\n\nNo SQL view exposes node certificate expiration. Use one of:\n- `cockroach cert list --certs-dir=\u003Ccerts-dir>` to inspect certs locally on each node\n- `openssl x509 -in \u003Ccert.crt> -noout -enddate` for a single cert file\n- The Prometheus metric endpoint: `curl -ks https:\u002F\u002F\u003Cnode>:8080\u002F_status\u002Fvars | grep '^security_certificate_expiration_'` (UNIX-timestamp seconds; `node`, `ca`, `client_ca`, `ui_ca`)\n\nTreat anything within 90 days as `EXPIRING_SOON`.\n\n### Check 4: Critical Settings\n\n```sql\nSELECT variable, value FROM [SHOW ALL CLUSTER SETTINGS]\nWHERE variable IN (\n  'kv.rangefeed.enabled', 'sql.stats.automatic_collection.enabled',\n  'server.time_until_store_dead', 'admission.kv.enabled',\n  'cluster.preserve_downgrade_option'\n) ORDER BY variable;\n```\n\n`gc.ttlseconds` is a zone-config parameter, not a cluster setting; check the effective value with `SHOW ZONE CONFIGURATION FOR ...` against the relevant table\u002Fdatabase\u002Frange.\n\n### Check 5: Consolidated Summary\n\nThe DB Console **Cluster Overview** page consolidates live\u002Fdead node count, version distribution, range counts, and storage. From the CLI:\n\n```bash\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n```\n\nthen aggregate the columns of interest in your shell. The cluster's logical version comes from SQL:\n\n```sql\nSELECT value AS cluster_version FROM [SHOW CLUSTER SETTING version];\n```\n\n**If reason = Pre-maintenance**, also check for running jobs:\n```sql\nWITH j AS (SHOW JOBS)\nSELECT job_type, COUNT(*) FROM j WHERE status = 'running' GROUP BY job_type;\n```\n\n### Check 6: Production Readiness Assessment\n\nUse when verifying a cluster is ready for production workloads or during periodic operational reviews.\n\n```bash\n# Node count, liveness, and locality diversity\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n```\n\nIn the output, count rows with `is_live = true` (production wants ≥ 3) and check that `locality` shows multiple regions\u002Fzones.\n\n```sql\n-- Critical production settings check\nSELECT variable, value,\n  CASE\n    WHEN variable = 'kv.rangefeed.enabled' AND value = 'true' THEN 'OK'\n    WHEN variable = 'kv.rangefeed.enabled' AND value = 'false' THEN 'WARN: should be true for CDC'\n    WHEN variable = 'sql.stats.automatic_collection.enabled' AND value = 'true' THEN 'OK'\n    WHEN variable = 'sql.stats.automatic_collection.enabled' AND value = 'false' THEN 'WARN: should be true'\n    WHEN variable = 'admission.kv.enabled' AND value = 'true' THEN 'OK'\n    WHEN variable = 'admission.kv.enabled' AND value = 'false' THEN 'WARN: recommended for production'\n    WHEN variable = 'cluster.preserve_downgrade_option' AND value != '' THEN 'INFO: finalization pending'\n    ELSE 'OK'\n  END AS assessment\nFROM [SHOW ALL CLUSTER SETTINGS]\nWHERE variable IN (\n  'kv.rangefeed.enabled', 'sql.stats.automatic_collection.enabled',\n  'admission.kv.enabled', 'cluster.preserve_downgrade_option',\n  'server.time_until_store_dead'\n) ORDER BY variable;\n\n-- Enterprise license status (Self-Hosted only)\nSELECT value AS organization FROM [SHOW CLUSTER SETTING cluster.organization];\n```\n\nSee [production-readiness reference](references\u002Fproduction-readiness.md) for the full production readiness checklist.\n\n---\n\n## Advanced Health Check\n\n**Applies when:** Tier = Advanced\n\nAdvanced clusters are dedicated single-tenant clusters managed by Cockroach Labs. You have node-level visibility via both Cloud Console and SQL.\n\n### Cloud Console Checks\n\n1. **Cluster Overview** — verify all nodes are live, check node count\n2. **Metrics** — CPU utilization, QPS, P99 latency, storage utilization\n3. **Alerts** — check for active alerts\n\n### CLI + SQL Checks\n\n```bash\n# Node liveness, version, and replication status\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n```\n\nLook at `is_live`, `build`, and `ranges_underreplicated` per node.\n\n```sql\n-- Recent failed jobs\nWITH j AS (SHOW JOBS)\nSELECT job_type, status, COUNT(*) FROM j\nWHERE status IN ('running', 'failed') AND created > now() - INTERVAL '24 hours'\nGROUP BY job_type, status;\n```\n\n### Cloud API\n\n```bash\ncurl -s -H \"Authorization: Bearer $COCKROACH_API_KEY\" \\\n  \"https:\u002F\u002Fcockroachlabs.cloud\u002Fapi\u002Fv1\u002Fclusters\u002F\u003Ccluster-id>\" | jq '.state, .cockroach_version'\n```\n\n---\n\n## BYOC Health Check\n\n**Applies when:** Tier = BYOC\n\nBYOC clusters are dedicated and run in your cloud account. You have the same CockroachDB visibility as Advanced, plus direct access to the underlying infrastructure.\n\n### CockroachDB Health\n\nRun all [Advanced Health Check](#advanced-health-check) steps.\n\n### Cloud Provider Infrastructure Checks\n\n**If AWS:**\n```bash\naws ec2 describe-instance-status --filters \"Name=tag:cockroach-cluster,Values=\u003Ccluster-name>\"\n```\n\n**If GCP:**\n```bash\ngcloud compute instances list --filter=\"labels.cockroach-cluster=\u003Ccluster-name>\"\n```\n\n**If Azure:**\n```bash\naz vm list --resource-group \u003Crg> --query \"[?tags.cockroachCluster=='\u003Ccluster-name>']\"\n```\n\n### Additional BYOC Checks\n\n- Verify VPC\u002Fnetwork connectivity (PrivateLink, PSC, VPC Peering)\n- Check IAM roles — CRL service account permissions still valid\n- Review cloud provider monitoring for infrastructure-level anomalies\n\n---\n\n## Standard Health Check\n\n**Applies when:** Tier = Standard\n\nStandard is a multi-tenant managed service. There are no individual nodes to monitor — Cockroach Labs manages all infrastructure, replication, and capacity. Health checking focuses on your workload performance and provisioned compute.\n\n### Cloud Console Checks\n\n1. **Cluster Overview** — verify cluster state is `RUNNING`\n2. **SQL Activity** — statement and transaction latency, error rates\n3. **Storage** — current usage\n4. **Compute** — provisioned vCPU utilization\n\n### SQL Checks\n\n```sql\n-- Verify connectivity\nSELECT 1;\n\n-- Current version\nSELECT version();\n\n-- Recent failed jobs\nWITH j AS (SHOW JOBS)\nSELECT job_type, status, description FROM j\nWHERE status = 'failed' AND created > now() - INTERVAL '24 hours';\n```\n\n### What to Monitor\n\n- **P99 SQL latency** — track via Cloud Console Metrics\n- **Error rates** — check for spikes in statement errors\n- **Storage growth** — plan based on usage trends\n- **Compute utilization** — increase provisioned vCPUs if utilization is consistently high\n\n**Note:** Node-level visibility is not available on Standard. Use Cloud Console for all infrastructure health monitoring.\n\n---\n\n## Basic Health Check\n\n**Applies when:** Tier = Basic\n\nBasic is a serverless offering that auto-scales. There are no nodes or provisioned compute to monitor. Cockroach Labs manages all infrastructure. Health checking focuses on connectivity, consumption, and spending.\n\n### Cloud Console Checks\n\n1. **Cluster Overview** — verify state is `RUNNING`\n2. **Request Units** — consumption rate and remaining budget\n3. **Storage** — current usage (10 GiB included free)\n4. **Spending Limits** — verify limits are configured to avoid unexpected charges\n\n### SQL Checks\n\n```sql\n-- Verify connectivity\nSELECT 1;\n\n-- Current version\nSELECT version();\n\n-- Recent failed jobs\nWITH j AS (SHOW JOBS)\nSELECT job_type, status, description FROM j\nWHERE status = 'failed' AND created > now() - INTERVAL '24 hours';\n```\n\n### What to Monitor\n\n- **Request Unit (RU) consumption** — track via Cloud Console to stay within spending limits\n- **Storage usage** — monitor growth relative to the 10 GiB free tier\n- **Query efficiency** — optimize queries that consume excessive RUs\n- **Cold start latency** — Basic clusters may scale to zero during inactivity; first connection after idle may have higher latency\n\n---\n\n## Safety Considerations\n\nAll checks in this skill are read-only. No data is modified.\n\n- **Self-Hosted:** `cockroach node status` requires CLI access (or admin SQL privilege if you need to fall back to internal tables). Most node-level health queries have no production-safe SQL alternative.\n- **Advanced\u002FBYOC:** `cockroach node status` works the same way; certificate inspection is managed by Cockroach Labs.\n- **Standard\u002FBasic:** No node-level visibility by design — use the Cloud Console.\n\n## Troubleshooting\n\n| Issue | Tier | Fix |\n|-------|------|-----|\n| `cockroach node status` errors with permission denied | SH | Use a cert with admin or `VIEWCLUSTERMETADATA` |\n| Node missing from `cockroach node status` output | SH | Check node process; verify `--join` address |\n| Standard\u002FBasic SQL doesn't expose node tables | STD\u002FBAS | Expected — use Cloud Console |\n| Cloud Console shows degraded | ADV\u002FBYOC | Check Cloud status page; contact support |\n| High RU consumption | BAS | Profile queries; set spending limits |\n| Cloud API returns 401 | ADV\u002FBYOC | Regenerate API key |\n| High latency on first connection | BAS | Expected cold start after idle period |\n\n## References\n\n**Skill references:**\n- [Production readiness checklist](references\u002Fproduction-readiness.md)\n\n**Related skills:**\n- [upgrading-cluster-version](..\u002Fupgrading-cluster-version\u002FSKILL.md)\n- [managing-cluster-capacity](..\u002Fmanaging-cluster-capacity\u002FSKILL.md)\n- [performing-cluster-maintenance](..\u002Fperforming-cluster-maintenance\u002FSKILL.md)\n- [monitoring-background-jobs](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fmonitoring-background-jobs\u002FSKILL.md)\n\n**Official CockroachDB Documentation:**\n- [Monitoring and Alerting](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fmonitoring-and-alerting)\n- [cockroach node status](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fcockroach-node)\n- [Production Checklist](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Frecommended-production-settings)\n- [Cloud Console Monitoring](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fcluster-overview-page)\n- [Export Metrics (Advanced)](https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fexport-metrics)\n",{"data":40,"body":44},{"name":4,"description":6,"compatibility":41,"metadata":42},"Self-Hosted requires SQL access with admin or VIEWCLUSTERMETADATA privilege. Advanced\u002FBYOC require Cloud Console and SQL connectivity. Standard requires Cloud Console and SQL. Basic requires Cloud Console.",{"author":8,"version":43},"2.0",{"type":45,"children":46},"root",[47,55,61,68,98,145,149,155,162,237,243,251,359,367,413,421,466,476,482,589,592,597,607,655,661,740,745,831,843,849,854,911,917,922,988,1000,1006,1066,1085,1091,1103,1160,1165,1179,1189,1212,1218,1223,1290,1311,1499,1512,1515,1520,1529,1534,1540,1573,1579,1645,1670,1716,1722,1815,1818,1823,1832,1837,1843,1854,1860,1868,1912,1920,1968,1976,2042,2048,2066,2069,2074,2083,2088,2093,2140,2146,2229,2235,2278,2288,2291,2296,2305,2310,2315,2361,2366,2442,2447,2490,2493,2499,2504,2550,2556,2731,2737,2745,2756,2764,2801,2809,2861],{"type":48,"tag":49,"props":50,"children":51},"element","h1",{"id":4},[52],{"type":53,"value":54},"text","Reviewing Cluster Health",{"type":48,"tag":56,"props":57,"children":58},"p",{},[59],{"type":53,"value":60},"Performs a comprehensive health check of a CockroachDB cluster. Before running diagnostics, this skill gathers deployment context to provide the right queries and tools for the operator's tier.",{"type":48,"tag":62,"props":63,"children":65},"h2",{"id":64},"when-to-use-this-skill",[66],{"type":53,"value":67},"When to Use This Skill",{"type":48,"tag":69,"props":70,"children":71},"ul",{},[72,78,83,88,93],{"type":48,"tag":73,"props":74,"children":75},"li",{},[76],{"type":53,"value":77},"Daily or shift-start operational health checks",{"type":48,"tag":73,"props":79,"children":80},{},[81],{"type":53,"value":82},"Before starting maintenance (Self-Hosted, Advanced, BYOC)",{"type":48,"tag":73,"props":84,"children":85},{},[86],{"type":53,"value":87},"After incidents to confirm recovery",{"type":48,"tag":73,"props":89,"children":90},{},[91],{"type":53,"value":92},"Verifying production readiness",{"type":48,"tag":73,"props":94,"children":95},{},[96],{"type":53,"value":97},"Monitoring capacity and performance",{"type":48,"tag":56,"props":99,"children":100},{},[101,107,109,116,118,123,124,130,131,136,137,143],{"type":48,"tag":102,"props":103,"children":104},"strong",{},[105],{"type":53,"value":106},"For live query issues:",{"type":53,"value":108}," Use ",{"type":48,"tag":110,"props":111,"children":113},"a",{"href":112},"..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Ftriaging-live-sql-activity\u002FSKILL.md",[114],{"type":53,"value":115},"triaging-live-sql-activity",{"type":53,"value":117},".\n",{"type":48,"tag":102,"props":119,"children":120},{},[121],{"type":53,"value":122},"For background jobs:",{"type":53,"value":108},{"type":48,"tag":110,"props":125,"children":127},{"href":126},"..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fmonitoring-background-jobs\u002FSKILL.md",[128],{"type":53,"value":129},"monitoring-background-jobs",{"type":53,"value":117},{"type":48,"tag":102,"props":132,"children":133},{},[134],{"type":53,"value":135},"For range analysis:",{"type":53,"value":108},{"type":48,"tag":110,"props":138,"children":140},{"href":139},"..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fanalyzing-range-distribution\u002FSKILL.md",[141],{"type":53,"value":142},"analyzing-range-distribution",{"type":53,"value":144},".",{"type":48,"tag":146,"props":147,"children":148},"hr",{},[],{"type":48,"tag":62,"props":150,"children":152},{"id":151},"step-1-gather-context",[153],{"type":53,"value":154},"Step 1: Gather Context",{"type":48,"tag":156,"props":157,"children":159},"h3",{"id":158},"required-context",[160],{"type":53,"value":161},"Required Context",{"type":48,"tag":163,"props":164,"children":165},"table",{},[166,190],{"type":48,"tag":167,"props":168,"children":169},"thead",{},[170],{"type":48,"tag":171,"props":172,"children":173},"tr",{},[174,180,185],{"type":48,"tag":175,"props":176,"children":177},"th",{},[178],{"type":53,"value":179},"Question",{"type":48,"tag":175,"props":181,"children":182},{},[183],{"type":53,"value":184},"Options",{"type":48,"tag":175,"props":186,"children":187},{},[188],{"type":53,"value":189},"Why It Matters",{"type":48,"tag":191,"props":192,"children":193},"tbody",{},[194,216],{"type":48,"tag":171,"props":195,"children":196},{},[197,206,211],{"type":48,"tag":198,"props":199,"children":200},"td",{},[201],{"type":48,"tag":102,"props":202,"children":203},{},[204],{"type":53,"value":205},"Deployment tier?",{"type":48,"tag":198,"props":207,"children":208},{},[209],{"type":53,"value":210},"Self-Hosted, Advanced, BYOC, Standard, Basic",{"type":48,"tag":198,"props":212,"children":213},{},[214],{"type":53,"value":215},"Determines available diagnostics and operator responsibilities",{"type":48,"tag":171,"props":217,"children":218},{},[219,227,232],{"type":48,"tag":198,"props":220,"children":221},{},[222],{"type":48,"tag":102,"props":223,"children":224},{},[225],{"type":53,"value":226},"Reason for health check?",{"type":48,"tag":198,"props":228,"children":229},{},[230],{"type":53,"value":231},"Daily check, Pre-maintenance, Post-incident, Pre-upgrade",{"type":48,"tag":198,"props":233,"children":234},{},[235],{"type":53,"value":236},"Prioritizes which dimensions to check first",{"type":48,"tag":156,"props":238,"children":240},{"id":239},"additional-context-by-tier",[241],{"type":53,"value":242},"Additional Context (by tier)",{"type":48,"tag":56,"props":244,"children":245},{},[246],{"type":48,"tag":102,"props":247,"children":248},{},[249],{"type":53,"value":250},"If Self-Hosted:",{"type":48,"tag":163,"props":252,"children":253},{},[254,272],{"type":48,"tag":167,"props":255,"children":256},{},[257],{"type":48,"tag":171,"props":258,"children":259},{},[260,264,268],{"type":48,"tag":175,"props":261,"children":262},{},[263],{"type":53,"value":179},{"type":48,"tag":175,"props":265,"children":266},{},[267],{"type":53,"value":184},{"type":48,"tag":175,"props":269,"children":270},{},[271],{"type":53,"value":189},{"type":48,"tag":191,"props":273,"children":274},{},[275,296,317,338],{"type":48,"tag":171,"props":276,"children":277},{},[278,286,291],{"type":48,"tag":198,"props":279,"children":280},{},[281],{"type":48,"tag":102,"props":282,"children":283},{},[284],{"type":53,"value":285},"Access available?",{"type":48,"tag":198,"props":287,"children":288},{},[289],{"type":53,"value":290},"SQL + CLI, SQL only",{"type":48,"tag":198,"props":292,"children":293},{},[294],{"type":53,"value":295},"Determines which tools can be used",{"type":48,"tag":171,"props":297,"children":298},{},[299,307,312],{"type":48,"tag":198,"props":300,"children":301},{},[302],{"type":48,"tag":102,"props":303,"children":304},{},[305],{"type":53,"value":306},"Cloud provider?",{"type":48,"tag":198,"props":308,"children":309},{},[310],{"type":53,"value":311},"AWS, GCP, Azure, On-Premises",{"type":48,"tag":198,"props":313,"children":314},{},[315],{"type":53,"value":316},"Affects infrastructure-level checks",{"type":48,"tag":171,"props":318,"children":319},{},[320,328,333],{"type":48,"tag":198,"props":321,"children":322},{},[323],{"type":48,"tag":102,"props":324,"children":325},{},[326],{"type":53,"value":327},"Kubernetes deployment?",{"type":48,"tag":198,"props":329,"children":330},{},[331],{"type":53,"value":332},"Yes (Operator, Helm, manual), No",{"type":48,"tag":198,"props":334,"children":335},{},[336],{"type":53,"value":337},"Changes CLI commands and monitoring",{"type":48,"tag":171,"props":339,"children":340},{},[341,349,354],{"type":48,"tag":198,"props":342,"children":343},{},[344],{"type":48,"tag":102,"props":345,"children":346},{},[347],{"type":53,"value":348},"Node count and regions?",{"type":48,"tag":198,"props":350,"children":351},{},[352],{"type":53,"value":353},"e.g., 9 nodes, 3 regions",{"type":48,"tag":198,"props":355,"children":356},{},[357],{"type":53,"value":358},"Sets expectations for query results",{"type":48,"tag":56,"props":360,"children":361},{},[362],{"type":48,"tag":102,"props":363,"children":364},{},[365],{"type":53,"value":366},"If Advanced or BYOC:",{"type":48,"tag":163,"props":368,"children":369},{},[370,388],{"type":48,"tag":167,"props":371,"children":372},{},[373],{"type":48,"tag":171,"props":374,"children":375},{},[376,380,384],{"type":48,"tag":175,"props":377,"children":378},{},[379],{"type":53,"value":179},{"type":48,"tag":175,"props":381,"children":382},{},[383],{"type":53,"value":184},{"type":48,"tag":175,"props":385,"children":386},{},[387],{"type":53,"value":189},{"type":48,"tag":191,"props":389,"children":390},{},[391],{"type":48,"tag":171,"props":392,"children":393},{},[394,403,408],{"type":48,"tag":198,"props":395,"children":396},{},[397,401],{"type":48,"tag":102,"props":398,"children":399},{},[400],{"type":53,"value":306},{"type":53,"value":402}," (BYOC only)",{"type":48,"tag":198,"props":404,"children":405},{},[406],{"type":53,"value":407},"AWS, GCP, Azure",{"type":48,"tag":198,"props":409,"children":410},{},[411],{"type":53,"value":412},"For infrastructure-level monitoring in your cloud account",{"type":48,"tag":56,"props":414,"children":415},{},[416],{"type":48,"tag":102,"props":417,"children":418},{},[419],{"type":53,"value":420},"If Standard:",{"type":48,"tag":163,"props":422,"children":423},{},[424,442],{"type":48,"tag":167,"props":425,"children":426},{},[427],{"type":48,"tag":171,"props":428,"children":429},{},[430,434,438],{"type":48,"tag":175,"props":431,"children":432},{},[433],{"type":53,"value":179},{"type":48,"tag":175,"props":435,"children":436},{},[437],{"type":53,"value":184},{"type":48,"tag":175,"props":439,"children":440},{},[441],{"type":53,"value":189},{"type":48,"tag":191,"props":443,"children":444},{},[445],{"type":48,"tag":171,"props":446,"children":447},{},[448,456,461],{"type":48,"tag":198,"props":449,"children":450},{},[451],{"type":48,"tag":102,"props":452,"children":453},{},[454],{"type":53,"value":455},"Current provisioned vCPUs?",{"type":48,"tag":198,"props":457,"children":458},{},[459],{"type":53,"value":460},"Number",{"type":48,"tag":198,"props":462,"children":463},{},[464],{"type":53,"value":465},"Context for compute utilization assessment",{"type":48,"tag":56,"props":467,"children":468},{},[469,474],{"type":48,"tag":102,"props":470,"children":471},{},[472],{"type":53,"value":473},"If Basic:",{"type":53,"value":475}," No additional context needed.",{"type":48,"tag":156,"props":477,"children":479},{"id":478},"context-driven-routing",[480],{"type":53,"value":481},"Context-Driven Routing",{"type":48,"tag":163,"props":483,"children":484},{},[485,501],{"type":48,"tag":167,"props":486,"children":487},{},[488],{"type":48,"tag":171,"props":489,"children":490},{},[491,496],{"type":48,"tag":175,"props":492,"children":493},{},[494],{"type":53,"value":495},"Tier",{"type":48,"tag":175,"props":497,"children":498},{},[499],{"type":53,"value":500},"Go To",{"type":48,"tag":191,"props":502,"children":503},{},[504,521,538,555,572],{"type":48,"tag":171,"props":505,"children":506},{},[507,512],{"type":48,"tag":198,"props":508,"children":509},{},[510],{"type":53,"value":511},"Self-Hosted",{"type":48,"tag":198,"props":513,"children":514},{},[515],{"type":48,"tag":110,"props":516,"children":518},{"href":517},"#self-hosted-health-check",[519],{"type":53,"value":520},"Self-Hosted Health Check",{"type":48,"tag":171,"props":522,"children":523},{},[524,529],{"type":48,"tag":198,"props":525,"children":526},{},[527],{"type":53,"value":528},"Advanced",{"type":48,"tag":198,"props":530,"children":531},{},[532],{"type":48,"tag":110,"props":533,"children":535},{"href":534},"#advanced-health-check",[536],{"type":53,"value":537},"Advanced Health Check",{"type":48,"tag":171,"props":539,"children":540},{},[541,546],{"type":48,"tag":198,"props":542,"children":543},{},[544],{"type":53,"value":545},"BYOC",{"type":48,"tag":198,"props":547,"children":548},{},[549],{"type":48,"tag":110,"props":550,"children":552},{"href":551},"#byoc-health-check",[553],{"type":53,"value":554},"BYOC Health Check",{"type":48,"tag":171,"props":556,"children":557},{},[558,563],{"type":48,"tag":198,"props":559,"children":560},{},[561],{"type":53,"value":562},"Standard",{"type":48,"tag":198,"props":564,"children":565},{},[566],{"type":48,"tag":110,"props":567,"children":569},{"href":568},"#standard-health-check",[570],{"type":53,"value":571},"Standard Health Check",{"type":48,"tag":171,"props":573,"children":574},{},[575,580],{"type":48,"tag":198,"props":576,"children":577},{},[578],{"type":53,"value":579},"Basic",{"type":48,"tag":198,"props":581,"children":582},{},[583],{"type":48,"tag":110,"props":584,"children":586},{"href":585},"#basic-health-check",[587],{"type":53,"value":588},"Basic Health Check",{"type":48,"tag":146,"props":590,"children":591},{},[],{"type":48,"tag":62,"props":593,"children":595},{"id":594},"self-hosted-health-check",[596],{"type":53,"value":520},{"type":48,"tag":56,"props":598,"children":599},{},[600,605],{"type":48,"tag":102,"props":601,"children":602},{},[603],{"type":53,"value":604},"Applies when:",{"type":53,"value":606}," Tier = Self-Hosted",{"type":48,"tag":56,"props":608,"children":609},{},[610,612,619,621,627,629,635,637,643,645,653],{"type":53,"value":611},"Self-Hosted node-level health is read primarily through ",{"type":48,"tag":613,"props":614,"children":616},"code",{"className":615},[],[617],{"type":53,"value":618},"cockroach node status",{"type":53,"value":620}," (CLI) and the DB Console. Cluster settings and jobs are read through public SQL (",{"type":48,"tag":613,"props":622,"children":624},{"className":623},[],[625],{"type":53,"value":626},"SHOW ALL CLUSTER SETTINGS",{"type":53,"value":628},", ",{"type":48,"tag":613,"props":630,"children":632},{"className":631},[],[633],{"type":53,"value":634},"SHOW JOBS",{"type":53,"value":636},"). The ",{"type":48,"tag":613,"props":638,"children":640},{"className":639},[],[641],{"type":53,"value":642},"crdb_internal",{"type":53,"value":644}," virtual tables for cluster topology, storage, and certificates are not for production use — see the ",{"type":48,"tag":110,"props":646,"children":650},{"href":647,"rel":648},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fcrdb-internal",[649],"nofollow",[651],{"type":53,"value":652},"docs",{"type":53,"value":654}," for the production-safe table list.",{"type":48,"tag":156,"props":656,"children":658},{"id":657},"check-1-node-liveness-version-and-replication",[659],{"type":53,"value":660},"Check 1: Node Liveness, Version, and Replication",{"type":48,"tag":662,"props":663,"children":668},"pre",{"className":664,"code":665,"language":666,"meta":667,"style":667},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n","bash","",[669],{"type":48,"tag":613,"props":670,"children":671},{"__ignoreMap":667},[672],{"type":48,"tag":673,"props":674,"children":677},"span",{"class":675,"line":676},"line",1,[678,684,690,695,700,705,711,716,721,726,730,735],{"type":48,"tag":673,"props":679,"children":681},{"style":680},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[682],{"type":53,"value":683},"cockroach",{"type":48,"tag":673,"props":685,"children":687},{"style":686},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[688],{"type":53,"value":689}," node",{"type":48,"tag":673,"props":691,"children":692},{"style":686},[693],{"type":53,"value":694}," status",{"type":48,"tag":673,"props":696,"children":697},{"style":686},[698],{"type":53,"value":699}," --decommission",{"type":48,"tag":673,"props":701,"children":702},{"style":686},[703],{"type":53,"value":704}," --certs-dir=",{"type":48,"tag":673,"props":706,"children":708},{"style":707},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[709],{"type":53,"value":710},"\u003C",{"type":48,"tag":673,"props":712,"children":713},{"style":686},[714],{"type":53,"value":715},"certs-dir",{"type":48,"tag":673,"props":717,"children":718},{"style":707},[719],{"type":53,"value":720},">",{"type":48,"tag":673,"props":722,"children":723},{"style":686},[724],{"type":53,"value":725}," --host=",{"type":48,"tag":673,"props":727,"children":728},{"style":707},[729],{"type":53,"value":710},{"type":48,"tag":673,"props":731,"children":732},{"style":686},[733],{"type":53,"value":734},"any-live-node",{"type":48,"tag":673,"props":736,"children":737},{"style":707},[738],{"type":53,"value":739},">\n",{"type":48,"tag":56,"props":741,"children":742},{},[743],{"type":53,"value":744},"Key columns:",{"type":48,"tag":69,"props":746,"children":747},{},[748,767,792,803,814],{"type":48,"tag":73,"props":749,"children":750},{},[751,757,759,765],{"type":48,"tag":613,"props":752,"children":754},{"className":753},[],[755],{"type":53,"value":756},"is_live",{"type":53,"value":758}," — ",{"type":48,"tag":613,"props":760,"children":762},{"className":761},[],[763],{"type":53,"value":764},"false",{"type":53,"value":766}," requires immediate investigation",{"type":48,"tag":73,"props":768,"children":769},{},[770,776,777,783,784,790],{"type":48,"tag":613,"props":771,"children":773},{"className":772},[],[774],{"type":53,"value":775},"is_draining",{"type":53,"value":628},{"type":48,"tag":613,"props":778,"children":780},{"className":779},[],[781],{"type":53,"value":782},"is_decommissioning",{"type":53,"value":628},{"type":48,"tag":613,"props":785,"children":787},{"className":786},[],[788],{"type":53,"value":789},"membership",{"type":53,"value":791}," — flag in-progress lifecycle operations",{"type":48,"tag":73,"props":793,"children":794},{},[795,801],{"type":48,"tag":613,"props":796,"children":798},{"className":797},[],[799],{"type":53,"value":800},"started_at",{"type":53,"value":802}," — compare across runs to spot flapping (node restarts)",{"type":48,"tag":73,"props":804,"children":805},{},[806,812],{"type":48,"tag":613,"props":807,"children":809},{"className":808},[],[810],{"type":53,"value":811},"build",{"type":53,"value":813}," — version per node; should be a single value (or two during a rolling upgrade)",{"type":48,"tag":73,"props":815,"children":816},{},[817,823,825],{"type":48,"tag":613,"props":818,"children":820},{"className":819},[],[821],{"type":53,"value":822},"ranges_underreplicated",{"type":53,"value":824}," — non-zero indicates ranges below the zone's ",{"type":48,"tag":613,"props":826,"children":828},{"className":827},[],[829],{"type":53,"value":830},"num_replicas",{"type":48,"tag":56,"props":832,"children":833},{},[834,836,841],{"type":53,"value":835},"For finer-grained range breakdown, use the DB Console ",{"type":48,"tag":102,"props":837,"children":838},{},[839],{"type":53,"value":840},"Replication",{"type":53,"value":842}," page.",{"type":48,"tag":156,"props":844,"children":846},{"id":845},"check-2-storage-capacity",[847],{"type":53,"value":848},"Check 2: Storage Capacity",{"type":48,"tag":56,"props":850,"children":851},{},[852],{"type":53,"value":853},"No production-safe SQL view exposes per-store capacity. Use:",{"type":48,"tag":69,"props":855,"children":856},{},[857,876],{"type":48,"tag":73,"props":858,"children":859},{},[860,862,867,869,874],{"type":53,"value":861},"DB Console ",{"type":48,"tag":102,"props":863,"children":864},{},[865],{"type":53,"value":866},"Overview",{"type":53,"value":868}," → ",{"type":48,"tag":102,"props":870,"children":871},{},[872],{"type":53,"value":873},"Storage",{"type":53,"value":875}," for per-node usage",{"type":48,"tag":73,"props":877,"children":878},{},[879,881,887,889,895,896,902,903,909],{"type":53,"value":880},"The Prometheus metric endpoint on each node: ",{"type":48,"tag":613,"props":882,"children":884},{"className":883},[],[885],{"type":53,"value":886},"curl -ks https:\u002F\u002F\u003Cnode>:8080\u002F_status\u002Fvars | grep '^capacity'",{"type":53,"value":888}," (",{"type":48,"tag":613,"props":890,"children":892},{"className":891},[],[893],{"type":53,"value":894},"capacity",{"type":53,"value":628},{"type":48,"tag":613,"props":897,"children":899},{"className":898},[],[900],{"type":53,"value":901},"capacity_used",{"type":53,"value":628},{"type":48,"tag":613,"props":904,"children":906},{"className":905},[],[907],{"type":53,"value":908},"capacity_available",{"type":53,"value":910},")",{"type":48,"tag":156,"props":912,"children":914},{"id":913},"check-3-certificate-expiration",[915],{"type":53,"value":916},"Check 3: Certificate Expiration",{"type":48,"tag":56,"props":918,"children":919},{},[920],{"type":53,"value":921},"No SQL view exposes node certificate expiration. Use one of:",{"type":48,"tag":69,"props":923,"children":924},{},[925,936,947],{"type":48,"tag":73,"props":926,"children":927},{},[928,934],{"type":48,"tag":613,"props":929,"children":931},{"className":930},[],[932],{"type":53,"value":933},"cockroach cert list --certs-dir=\u003Ccerts-dir>",{"type":53,"value":935}," to inspect certs locally on each node",{"type":48,"tag":73,"props":937,"children":938},{},[939,945],{"type":48,"tag":613,"props":940,"children":942},{"className":941},[],[943],{"type":53,"value":944},"openssl x509 -in \u003Ccert.crt> -noout -enddate",{"type":53,"value":946}," for a single cert file",{"type":48,"tag":73,"props":948,"children":949},{},[950,952,958,960,966,967,973,974,980,981,987],{"type":53,"value":951},"The Prometheus metric endpoint: ",{"type":48,"tag":613,"props":953,"children":955},{"className":954},[],[956],{"type":53,"value":957},"curl -ks https:\u002F\u002F\u003Cnode>:8080\u002F_status\u002Fvars | grep '^security_certificate_expiration_'",{"type":53,"value":959}," (UNIX-timestamp seconds; ",{"type":48,"tag":613,"props":961,"children":963},{"className":962},[],[964],{"type":53,"value":965},"node",{"type":53,"value":628},{"type":48,"tag":613,"props":968,"children":970},{"className":969},[],[971],{"type":53,"value":972},"ca",{"type":53,"value":628},{"type":48,"tag":613,"props":975,"children":977},{"className":976},[],[978],{"type":53,"value":979},"client_ca",{"type":53,"value":628},{"type":48,"tag":613,"props":982,"children":984},{"className":983},[],[985],{"type":53,"value":986},"ui_ca",{"type":53,"value":910},{"type":48,"tag":56,"props":989,"children":990},{},[991,993,999],{"type":53,"value":992},"Treat anything within 90 days as ",{"type":48,"tag":613,"props":994,"children":996},{"className":995},[],[997],{"type":53,"value":998},"EXPIRING_SOON",{"type":53,"value":144},{"type":48,"tag":156,"props":1001,"children":1003},{"id":1002},"check-4-critical-settings",[1004],{"type":53,"value":1005},"Check 4: Critical Settings",{"type":48,"tag":662,"props":1007,"children":1011},{"className":1008,"code":1009,"language":1010,"meta":667,"style":667},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT variable, value FROM [SHOW ALL CLUSTER SETTINGS]\nWHERE variable IN (\n  'kv.rangefeed.enabled', 'sql.stats.automatic_collection.enabled',\n  'server.time_until_store_dead', 'admission.kv.enabled',\n  'cluster.preserve_downgrade_option'\n) ORDER BY variable;\n","sql",[1012],{"type":48,"tag":613,"props":1013,"children":1014},{"__ignoreMap":667},[1015,1023,1031,1039,1048,1057],{"type":48,"tag":673,"props":1016,"children":1017},{"class":675,"line":676},[1018],{"type":48,"tag":673,"props":1019,"children":1020},{},[1021],{"type":53,"value":1022},"SELECT variable, value FROM [SHOW ALL CLUSTER SETTINGS]\n",{"type":48,"tag":673,"props":1024,"children":1025},{"class":675,"line":29},[1026],{"type":48,"tag":673,"props":1027,"children":1028},{},[1029],{"type":53,"value":1030},"WHERE variable IN (\n",{"type":48,"tag":673,"props":1032,"children":1033},{"class":675,"line":25},[1034],{"type":48,"tag":673,"props":1035,"children":1036},{},[1037],{"type":53,"value":1038},"  'kv.rangefeed.enabled', 'sql.stats.automatic_collection.enabled',\n",{"type":48,"tag":673,"props":1040,"children":1042},{"class":675,"line":1041},4,[1043],{"type":48,"tag":673,"props":1044,"children":1045},{},[1046],{"type":53,"value":1047},"  'server.time_until_store_dead', 'admission.kv.enabled',\n",{"type":48,"tag":673,"props":1049,"children":1051},{"class":675,"line":1050},5,[1052],{"type":48,"tag":673,"props":1053,"children":1054},{},[1055],{"type":53,"value":1056},"  'cluster.preserve_downgrade_option'\n",{"type":48,"tag":673,"props":1058,"children":1060},{"class":675,"line":1059},6,[1061],{"type":48,"tag":673,"props":1062,"children":1063},{},[1064],{"type":53,"value":1065},") ORDER BY variable;\n",{"type":48,"tag":56,"props":1067,"children":1068},{},[1069,1075,1077,1083],{"type":48,"tag":613,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":53,"value":1074},"gc.ttlseconds",{"type":53,"value":1076}," is a zone-config parameter, not a cluster setting; check the effective value with ",{"type":48,"tag":613,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":53,"value":1082},"SHOW ZONE CONFIGURATION FOR ...",{"type":53,"value":1084}," against the relevant table\u002Fdatabase\u002Frange.",{"type":48,"tag":156,"props":1086,"children":1088},{"id":1087},"check-5-consolidated-summary",[1089],{"type":53,"value":1090},"Check 5: Consolidated Summary",{"type":48,"tag":56,"props":1092,"children":1093},{},[1094,1096,1101],{"type":53,"value":1095},"The DB Console ",{"type":48,"tag":102,"props":1097,"children":1098},{},[1099],{"type":53,"value":1100},"Cluster Overview",{"type":53,"value":1102}," page consolidates live\u002Fdead node count, version distribution, range counts, and storage. From the CLI:",{"type":48,"tag":662,"props":1104,"children":1105},{"className":664,"code":665,"language":666,"meta":667,"style":667},[1106],{"type":48,"tag":613,"props":1107,"children":1108},{"__ignoreMap":667},[1109],{"type":48,"tag":673,"props":1110,"children":1111},{"class":675,"line":676},[1112,1116,1120,1124,1128,1132,1136,1140,1144,1148,1152,1156],{"type":48,"tag":673,"props":1113,"children":1114},{"style":680},[1115],{"type":53,"value":683},{"type":48,"tag":673,"props":1117,"children":1118},{"style":686},[1119],{"type":53,"value":689},{"type":48,"tag":673,"props":1121,"children":1122},{"style":686},[1123],{"type":53,"value":694},{"type":48,"tag":673,"props":1125,"children":1126},{"style":686},[1127],{"type":53,"value":699},{"type":48,"tag":673,"props":1129,"children":1130},{"style":686},[1131],{"type":53,"value":704},{"type":48,"tag":673,"props":1133,"children":1134},{"style":707},[1135],{"type":53,"value":710},{"type":48,"tag":673,"props":1137,"children":1138},{"style":686},[1139],{"type":53,"value":715},{"type":48,"tag":673,"props":1141,"children":1142},{"style":707},[1143],{"type":53,"value":720},{"type":48,"tag":673,"props":1145,"children":1146},{"style":686},[1147],{"type":53,"value":725},{"type":48,"tag":673,"props":1149,"children":1150},{"style":707},[1151],{"type":53,"value":710},{"type":48,"tag":673,"props":1153,"children":1154},{"style":686},[1155],{"type":53,"value":734},{"type":48,"tag":673,"props":1157,"children":1158},{"style":707},[1159],{"type":53,"value":739},{"type":48,"tag":56,"props":1161,"children":1162},{},[1163],{"type":53,"value":1164},"then aggregate the columns of interest in your shell. The cluster's logical version comes from SQL:",{"type":48,"tag":662,"props":1166,"children":1168},{"className":1008,"code":1167,"language":1010,"meta":667,"style":667},"SELECT value AS cluster_version FROM [SHOW CLUSTER SETTING version];\n",[1169],{"type":48,"tag":613,"props":1170,"children":1171},{"__ignoreMap":667},[1172],{"type":48,"tag":673,"props":1173,"children":1174},{"class":675,"line":676},[1175],{"type":48,"tag":673,"props":1176,"children":1177},{},[1178],{"type":53,"value":1167},{"type":48,"tag":56,"props":1180,"children":1181},{},[1182,1187],{"type":48,"tag":102,"props":1183,"children":1184},{},[1185],{"type":53,"value":1186},"If reason = Pre-maintenance",{"type":53,"value":1188},", also check for running jobs:",{"type":48,"tag":662,"props":1190,"children":1192},{"className":1008,"code":1191,"language":1010,"meta":667,"style":667},"WITH j AS (SHOW JOBS)\nSELECT job_type, COUNT(*) FROM j WHERE status = 'running' GROUP BY job_type;\n",[1193],{"type":48,"tag":613,"props":1194,"children":1195},{"__ignoreMap":667},[1196,1204],{"type":48,"tag":673,"props":1197,"children":1198},{"class":675,"line":676},[1199],{"type":48,"tag":673,"props":1200,"children":1201},{},[1202],{"type":53,"value":1203},"WITH j AS (SHOW JOBS)\n",{"type":48,"tag":673,"props":1205,"children":1206},{"class":675,"line":29},[1207],{"type":48,"tag":673,"props":1208,"children":1209},{},[1210],{"type":53,"value":1211},"SELECT job_type, COUNT(*) FROM j WHERE status = 'running' GROUP BY job_type;\n",{"type":48,"tag":156,"props":1213,"children":1215},{"id":1214},"check-6-production-readiness-assessment",[1216],{"type":53,"value":1217},"Check 6: Production Readiness Assessment",{"type":48,"tag":56,"props":1219,"children":1220},{},[1221],{"type":53,"value":1222},"Use when verifying a cluster is ready for production workloads or during periodic operational reviews.",{"type":48,"tag":662,"props":1224,"children":1226},{"className":664,"code":1225,"language":666,"meta":667,"style":667},"# Node count, liveness, and locality diversity\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n",[1227],{"type":48,"tag":613,"props":1228,"children":1229},{"__ignoreMap":667},[1230,1239],{"type":48,"tag":673,"props":1231,"children":1232},{"class":675,"line":676},[1233],{"type":48,"tag":673,"props":1234,"children":1236},{"style":1235},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1237],{"type":53,"value":1238},"# Node count, liveness, and locality diversity\n",{"type":48,"tag":673,"props":1240,"children":1241},{"class":675,"line":29},[1242,1246,1250,1254,1258,1262,1266,1270,1274,1278,1282,1286],{"type":48,"tag":673,"props":1243,"children":1244},{"style":680},[1245],{"type":53,"value":683},{"type":48,"tag":673,"props":1247,"children":1248},{"style":686},[1249],{"type":53,"value":689},{"type":48,"tag":673,"props":1251,"children":1252},{"style":686},[1253],{"type":53,"value":694},{"type":48,"tag":673,"props":1255,"children":1256},{"style":686},[1257],{"type":53,"value":699},{"type":48,"tag":673,"props":1259,"children":1260},{"style":686},[1261],{"type":53,"value":704},{"type":48,"tag":673,"props":1263,"children":1264},{"style":707},[1265],{"type":53,"value":710},{"type":48,"tag":673,"props":1267,"children":1268},{"style":686},[1269],{"type":53,"value":715},{"type":48,"tag":673,"props":1271,"children":1272},{"style":707},[1273],{"type":53,"value":720},{"type":48,"tag":673,"props":1275,"children":1276},{"style":686},[1277],{"type":53,"value":725},{"type":48,"tag":673,"props":1279,"children":1280},{"style":707},[1281],{"type":53,"value":710},{"type":48,"tag":673,"props":1283,"children":1284},{"style":686},[1285],{"type":53,"value":734},{"type":48,"tag":673,"props":1287,"children":1288},{"style":707},[1289],{"type":53,"value":739},{"type":48,"tag":56,"props":1291,"children":1292},{},[1293,1295,1301,1303,1309],{"type":53,"value":1294},"In the output, count rows with ",{"type":48,"tag":613,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":53,"value":1300},"is_live = true",{"type":53,"value":1302}," (production wants ≥ 3) and check that ",{"type":48,"tag":613,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":53,"value":1308},"locality",{"type":53,"value":1310}," shows multiple regions\u002Fzones.",{"type":48,"tag":662,"props":1312,"children":1314},{"className":1008,"code":1313,"language":1010,"meta":667,"style":667},"-- Critical production settings check\nSELECT variable, value,\n  CASE\n    WHEN variable = 'kv.rangefeed.enabled' AND value = 'true' THEN 'OK'\n    WHEN variable = 'kv.rangefeed.enabled' AND value = 'false' THEN 'WARN: should be true for CDC'\n    WHEN variable = 'sql.stats.automatic_collection.enabled' AND value = 'true' THEN 'OK'\n    WHEN variable = 'sql.stats.automatic_collection.enabled' AND value = 'false' THEN 'WARN: should be true'\n    WHEN variable = 'admission.kv.enabled' AND value = 'true' THEN 'OK'\n    WHEN variable = 'admission.kv.enabled' AND value = 'false' THEN 'WARN: recommended for production'\n    WHEN variable = 'cluster.preserve_downgrade_option' AND value != '' THEN 'INFO: finalization pending'\n    ELSE 'OK'\n  END AS assessment\nFROM [SHOW ALL CLUSTER SETTINGS]\nWHERE variable IN (\n  'kv.rangefeed.enabled', 'sql.stats.automatic_collection.enabled',\n  'admission.kv.enabled', 'cluster.preserve_downgrade_option',\n  'server.time_until_store_dead'\n) ORDER BY variable;\n\n-- Enterprise license status (Self-Hosted only)\nSELECT value AS organization FROM [SHOW CLUSTER SETTING cluster.organization];\n",[1315],{"type":48,"tag":613,"props":1316,"children":1317},{"__ignoreMap":667},[1318,1326,1334,1342,1350,1358,1366,1375,1384,1393,1402,1411,1420,1429,1437,1445,1454,1463,1471,1481,1490],{"type":48,"tag":673,"props":1319,"children":1320},{"class":675,"line":676},[1321],{"type":48,"tag":673,"props":1322,"children":1323},{},[1324],{"type":53,"value":1325},"-- Critical production settings check\n",{"type":48,"tag":673,"props":1327,"children":1328},{"class":675,"line":29},[1329],{"type":48,"tag":673,"props":1330,"children":1331},{},[1332],{"type":53,"value":1333},"SELECT variable, value,\n",{"type":48,"tag":673,"props":1335,"children":1336},{"class":675,"line":25},[1337],{"type":48,"tag":673,"props":1338,"children":1339},{},[1340],{"type":53,"value":1341},"  CASE\n",{"type":48,"tag":673,"props":1343,"children":1344},{"class":675,"line":1041},[1345],{"type":48,"tag":673,"props":1346,"children":1347},{},[1348],{"type":53,"value":1349},"    WHEN variable = 'kv.rangefeed.enabled' AND value = 'true' THEN 'OK'\n",{"type":48,"tag":673,"props":1351,"children":1352},{"class":675,"line":1050},[1353],{"type":48,"tag":673,"props":1354,"children":1355},{},[1356],{"type":53,"value":1357},"    WHEN variable = 'kv.rangefeed.enabled' AND value = 'false' THEN 'WARN: should be true for CDC'\n",{"type":48,"tag":673,"props":1359,"children":1360},{"class":675,"line":1059},[1361],{"type":48,"tag":673,"props":1362,"children":1363},{},[1364],{"type":53,"value":1365},"    WHEN variable = 'sql.stats.automatic_collection.enabled' AND value = 'true' THEN 'OK'\n",{"type":48,"tag":673,"props":1367,"children":1369},{"class":675,"line":1368},7,[1370],{"type":48,"tag":673,"props":1371,"children":1372},{},[1373],{"type":53,"value":1374},"    WHEN variable = 'sql.stats.automatic_collection.enabled' AND value = 'false' THEN 'WARN: should be true'\n",{"type":48,"tag":673,"props":1376,"children":1378},{"class":675,"line":1377},8,[1379],{"type":48,"tag":673,"props":1380,"children":1381},{},[1382],{"type":53,"value":1383},"    WHEN variable = 'admission.kv.enabled' AND value = 'true' THEN 'OK'\n",{"type":48,"tag":673,"props":1385,"children":1387},{"class":675,"line":1386},9,[1388],{"type":48,"tag":673,"props":1389,"children":1390},{},[1391],{"type":53,"value":1392},"    WHEN variable = 'admission.kv.enabled' AND value = 'false' THEN 'WARN: recommended for production'\n",{"type":48,"tag":673,"props":1394,"children":1396},{"class":675,"line":1395},10,[1397],{"type":48,"tag":673,"props":1398,"children":1399},{},[1400],{"type":53,"value":1401},"    WHEN variable = 'cluster.preserve_downgrade_option' AND value != '' THEN 'INFO: finalization pending'\n",{"type":48,"tag":673,"props":1403,"children":1405},{"class":675,"line":1404},11,[1406],{"type":48,"tag":673,"props":1407,"children":1408},{},[1409],{"type":53,"value":1410},"    ELSE 'OK'\n",{"type":48,"tag":673,"props":1412,"children":1414},{"class":675,"line":1413},12,[1415],{"type":48,"tag":673,"props":1416,"children":1417},{},[1418],{"type":53,"value":1419},"  END AS assessment\n",{"type":48,"tag":673,"props":1421,"children":1423},{"class":675,"line":1422},13,[1424],{"type":48,"tag":673,"props":1425,"children":1426},{},[1427],{"type":53,"value":1428},"FROM [SHOW ALL CLUSTER SETTINGS]\n",{"type":48,"tag":673,"props":1430,"children":1432},{"class":675,"line":1431},14,[1433],{"type":48,"tag":673,"props":1434,"children":1435},{},[1436],{"type":53,"value":1030},{"type":48,"tag":673,"props":1438,"children":1440},{"class":675,"line":1439},15,[1441],{"type":48,"tag":673,"props":1442,"children":1443},{},[1444],{"type":53,"value":1038},{"type":48,"tag":673,"props":1446,"children":1448},{"class":675,"line":1447},16,[1449],{"type":48,"tag":673,"props":1450,"children":1451},{},[1452],{"type":53,"value":1453},"  'admission.kv.enabled', 'cluster.preserve_downgrade_option',\n",{"type":48,"tag":673,"props":1455,"children":1457},{"class":675,"line":1456},17,[1458],{"type":48,"tag":673,"props":1459,"children":1460},{},[1461],{"type":53,"value":1462},"  'server.time_until_store_dead'\n",{"type":48,"tag":673,"props":1464,"children":1466},{"class":675,"line":1465},18,[1467],{"type":48,"tag":673,"props":1468,"children":1469},{},[1470],{"type":53,"value":1065},{"type":48,"tag":673,"props":1472,"children":1474},{"class":675,"line":1473},19,[1475],{"type":48,"tag":673,"props":1476,"children":1478},{"emptyLinePlaceholder":1477},true,[1479],{"type":53,"value":1480},"\n",{"type":48,"tag":673,"props":1482,"children":1484},{"class":675,"line":1483},20,[1485],{"type":48,"tag":673,"props":1486,"children":1487},{},[1488],{"type":53,"value":1489},"-- Enterprise license status (Self-Hosted only)\n",{"type":48,"tag":673,"props":1491,"children":1493},{"class":675,"line":1492},21,[1494],{"type":48,"tag":673,"props":1495,"children":1496},{},[1497],{"type":53,"value":1498},"SELECT value AS organization FROM [SHOW CLUSTER SETTING cluster.organization];\n",{"type":48,"tag":56,"props":1500,"children":1501},{},[1502,1504,1510],{"type":53,"value":1503},"See ",{"type":48,"tag":110,"props":1505,"children":1507},{"href":1506},"references\u002Fproduction-readiness.md",[1508],{"type":53,"value":1509},"production-readiness reference",{"type":53,"value":1511}," for the full production readiness checklist.",{"type":48,"tag":146,"props":1513,"children":1514},{},[],{"type":48,"tag":62,"props":1516,"children":1518},{"id":1517},"advanced-health-check",[1519],{"type":53,"value":537},{"type":48,"tag":56,"props":1521,"children":1522},{},[1523,1527],{"type":48,"tag":102,"props":1524,"children":1525},{},[1526],{"type":53,"value":604},{"type":53,"value":1528}," Tier = Advanced",{"type":48,"tag":56,"props":1530,"children":1531},{},[1532],{"type":53,"value":1533},"Advanced clusters are dedicated single-tenant clusters managed by Cockroach Labs. You have node-level visibility via both Cloud Console and SQL.",{"type":48,"tag":156,"props":1535,"children":1537},{"id":1536},"cloud-console-checks",[1538],{"type":53,"value":1539},"Cloud Console Checks",{"type":48,"tag":1541,"props":1542,"children":1543},"ol",{},[1544,1553,1563],{"type":48,"tag":73,"props":1545,"children":1546},{},[1547,1551],{"type":48,"tag":102,"props":1548,"children":1549},{},[1550],{"type":53,"value":1100},{"type":53,"value":1552}," — verify all nodes are live, check node count",{"type":48,"tag":73,"props":1554,"children":1555},{},[1556,1561],{"type":48,"tag":102,"props":1557,"children":1558},{},[1559],{"type":53,"value":1560},"Metrics",{"type":53,"value":1562}," — CPU utilization, QPS, P99 latency, storage utilization",{"type":48,"tag":73,"props":1564,"children":1565},{},[1566,1571],{"type":48,"tag":102,"props":1567,"children":1568},{},[1569],{"type":53,"value":1570},"Alerts",{"type":53,"value":1572}," — check for active alerts",{"type":48,"tag":156,"props":1574,"children":1576},{"id":1575},"cli-sql-checks",[1577],{"type":53,"value":1578},"CLI + SQL Checks",{"type":48,"tag":662,"props":1580,"children":1582},{"className":664,"code":1581,"language":666,"meta":667,"style":667},"# Node liveness, version, and replication status\ncockroach node status --decommission --certs-dir=\u003Ccerts-dir> --host=\u003Cany-live-node>\n",[1583],{"type":48,"tag":613,"props":1584,"children":1585},{"__ignoreMap":667},[1586,1594],{"type":48,"tag":673,"props":1587,"children":1588},{"class":675,"line":676},[1589],{"type":48,"tag":673,"props":1590,"children":1591},{"style":1235},[1592],{"type":53,"value":1593},"# Node liveness, version, and replication status\n",{"type":48,"tag":673,"props":1595,"children":1596},{"class":675,"line":29},[1597,1601,1605,1609,1613,1617,1621,1625,1629,1633,1637,1641],{"type":48,"tag":673,"props":1598,"children":1599},{"style":680},[1600],{"type":53,"value":683},{"type":48,"tag":673,"props":1602,"children":1603},{"style":686},[1604],{"type":53,"value":689},{"type":48,"tag":673,"props":1606,"children":1607},{"style":686},[1608],{"type":53,"value":694},{"type":48,"tag":673,"props":1610,"children":1611},{"style":686},[1612],{"type":53,"value":699},{"type":48,"tag":673,"props":1614,"children":1615},{"style":686},[1616],{"type":53,"value":704},{"type":48,"tag":673,"props":1618,"children":1619},{"style":707},[1620],{"type":53,"value":710},{"type":48,"tag":673,"props":1622,"children":1623},{"style":686},[1624],{"type":53,"value":715},{"type":48,"tag":673,"props":1626,"children":1627},{"style":707},[1628],{"type":53,"value":720},{"type":48,"tag":673,"props":1630,"children":1631},{"style":686},[1632],{"type":53,"value":725},{"type":48,"tag":673,"props":1634,"children":1635},{"style":707},[1636],{"type":53,"value":710},{"type":48,"tag":673,"props":1638,"children":1639},{"style":686},[1640],{"type":53,"value":734},{"type":48,"tag":673,"props":1642,"children":1643},{"style":707},[1644],{"type":53,"value":739},{"type":48,"tag":56,"props":1646,"children":1647},{},[1648,1650,1655,1656,1661,1663,1668],{"type":53,"value":1649},"Look at ",{"type":48,"tag":613,"props":1651,"children":1653},{"className":1652},[],[1654],{"type":53,"value":756},{"type":53,"value":628},{"type":48,"tag":613,"props":1657,"children":1659},{"className":1658},[],[1660],{"type":53,"value":811},{"type":53,"value":1662},", and ",{"type":48,"tag":613,"props":1664,"children":1666},{"className":1665},[],[1667],{"type":53,"value":822},{"type":53,"value":1669}," per node.",{"type":48,"tag":662,"props":1671,"children":1673},{"className":1008,"code":1672,"language":1010,"meta":667,"style":667},"-- Recent failed jobs\nWITH j AS (SHOW JOBS)\nSELECT job_type, status, COUNT(*) FROM j\nWHERE status IN ('running', 'failed') AND created > now() - INTERVAL '24 hours'\nGROUP BY job_type, status;\n",[1674],{"type":48,"tag":613,"props":1675,"children":1676},{"__ignoreMap":667},[1677,1685,1692,1700,1708],{"type":48,"tag":673,"props":1678,"children":1679},{"class":675,"line":676},[1680],{"type":48,"tag":673,"props":1681,"children":1682},{},[1683],{"type":53,"value":1684},"-- Recent failed jobs\n",{"type":48,"tag":673,"props":1686,"children":1687},{"class":675,"line":29},[1688],{"type":48,"tag":673,"props":1689,"children":1690},{},[1691],{"type":53,"value":1203},{"type":48,"tag":673,"props":1693,"children":1694},{"class":675,"line":25},[1695],{"type":48,"tag":673,"props":1696,"children":1697},{},[1698],{"type":53,"value":1699},"SELECT job_type, status, COUNT(*) FROM j\n",{"type":48,"tag":673,"props":1701,"children":1702},{"class":675,"line":1041},[1703],{"type":48,"tag":673,"props":1704,"children":1705},{},[1706],{"type":53,"value":1707},"WHERE status IN ('running', 'failed') AND created > now() - INTERVAL '24 hours'\n",{"type":48,"tag":673,"props":1709,"children":1710},{"class":675,"line":1050},[1711],{"type":48,"tag":673,"props":1712,"children":1713},{},[1714],{"type":53,"value":1715},"GROUP BY job_type, status;\n",{"type":48,"tag":156,"props":1717,"children":1719},{"id":1718},"cloud-api",[1720],{"type":53,"value":1721},"Cloud API",{"type":48,"tag":662,"props":1723,"children":1725},{"className":664,"code":1724,"language":666,"meta":667,"style":667},"curl -s -H \"Authorization: Bearer $COCKROACH_API_KEY\" \\\n  \"https:\u002F\u002Fcockroachlabs.cloud\u002Fapi\u002Fv1\u002Fclusters\u002F\u003Ccluster-id>\" | jq '.state, .cockroach_version'\n",[1726],{"type":48,"tag":613,"props":1727,"children":1728},{"__ignoreMap":667},[1729,1773],{"type":48,"tag":673,"props":1730,"children":1731},{"class":675,"line":676},[1732,1737,1742,1747,1752,1757,1763,1768],{"type":48,"tag":673,"props":1733,"children":1734},{"style":680},[1735],{"type":53,"value":1736},"curl",{"type":48,"tag":673,"props":1738,"children":1739},{"style":686},[1740],{"type":53,"value":1741}," -s",{"type":48,"tag":673,"props":1743,"children":1744},{"style":686},[1745],{"type":53,"value":1746}," -H",{"type":48,"tag":673,"props":1748,"children":1749},{"style":707},[1750],{"type":53,"value":1751}," \"",{"type":48,"tag":673,"props":1753,"children":1754},{"style":686},[1755],{"type":53,"value":1756},"Authorization: Bearer ",{"type":48,"tag":673,"props":1758,"children":1760},{"style":1759},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1761],{"type":53,"value":1762},"$COCKROACH_API_KEY",{"type":48,"tag":673,"props":1764,"children":1765},{"style":707},[1766],{"type":53,"value":1767},"\"",{"type":48,"tag":673,"props":1769,"children":1770},{"style":1759},[1771],{"type":53,"value":1772}," \\\n",{"type":48,"tag":673,"props":1774,"children":1775},{"class":675,"line":29},[1776,1781,1786,1790,1795,1800,1805,1810],{"type":48,"tag":673,"props":1777,"children":1778},{"style":707},[1779],{"type":53,"value":1780},"  \"",{"type":48,"tag":673,"props":1782,"children":1783},{"style":686},[1784],{"type":53,"value":1785},"https:\u002F\u002Fcockroachlabs.cloud\u002Fapi\u002Fv1\u002Fclusters\u002F\u003Ccluster-id>",{"type":48,"tag":673,"props":1787,"children":1788},{"style":707},[1789],{"type":53,"value":1767},{"type":48,"tag":673,"props":1791,"children":1792},{"style":707},[1793],{"type":53,"value":1794}," |",{"type":48,"tag":673,"props":1796,"children":1797},{"style":680},[1798],{"type":53,"value":1799}," jq",{"type":48,"tag":673,"props":1801,"children":1802},{"style":707},[1803],{"type":53,"value":1804}," '",{"type":48,"tag":673,"props":1806,"children":1807},{"style":686},[1808],{"type":53,"value":1809},".state, .cockroach_version",{"type":48,"tag":673,"props":1811,"children":1812},{"style":707},[1813],{"type":53,"value":1814},"'\n",{"type":48,"tag":146,"props":1816,"children":1817},{},[],{"type":48,"tag":62,"props":1819,"children":1821},{"id":1820},"byoc-health-check",[1822],{"type":53,"value":554},{"type":48,"tag":56,"props":1824,"children":1825},{},[1826,1830],{"type":48,"tag":102,"props":1827,"children":1828},{},[1829],{"type":53,"value":604},{"type":53,"value":1831}," Tier = BYOC",{"type":48,"tag":56,"props":1833,"children":1834},{},[1835],{"type":53,"value":1836},"BYOC clusters are dedicated and run in your cloud account. You have the same CockroachDB visibility as Advanced, plus direct access to the underlying infrastructure.",{"type":48,"tag":156,"props":1838,"children":1840},{"id":1839},"cockroachdb-health",[1841],{"type":53,"value":1842},"CockroachDB Health",{"type":48,"tag":56,"props":1844,"children":1845},{},[1846,1848,1852],{"type":53,"value":1847},"Run all ",{"type":48,"tag":110,"props":1849,"children":1850},{"href":534},[1851],{"type":53,"value":537},{"type":53,"value":1853}," steps.",{"type":48,"tag":156,"props":1855,"children":1857},{"id":1856},"cloud-provider-infrastructure-checks",[1858],{"type":53,"value":1859},"Cloud Provider Infrastructure Checks",{"type":48,"tag":56,"props":1861,"children":1862},{},[1863],{"type":48,"tag":102,"props":1864,"children":1865},{},[1866],{"type":53,"value":1867},"If AWS:",{"type":48,"tag":662,"props":1869,"children":1871},{"className":664,"code":1870,"language":666,"meta":667,"style":667},"aws ec2 describe-instance-status --filters \"Name=tag:cockroach-cluster,Values=\u003Ccluster-name>\"\n",[1872],{"type":48,"tag":613,"props":1873,"children":1874},{"__ignoreMap":667},[1875],{"type":48,"tag":673,"props":1876,"children":1877},{"class":675,"line":676},[1878,1883,1888,1893,1898,1902,1907],{"type":48,"tag":673,"props":1879,"children":1880},{"style":680},[1881],{"type":53,"value":1882},"aws",{"type":48,"tag":673,"props":1884,"children":1885},{"style":686},[1886],{"type":53,"value":1887}," ec2",{"type":48,"tag":673,"props":1889,"children":1890},{"style":686},[1891],{"type":53,"value":1892}," describe-instance-status",{"type":48,"tag":673,"props":1894,"children":1895},{"style":686},[1896],{"type":53,"value":1897}," --filters",{"type":48,"tag":673,"props":1899,"children":1900},{"style":707},[1901],{"type":53,"value":1751},{"type":48,"tag":673,"props":1903,"children":1904},{"style":686},[1905],{"type":53,"value":1906},"Name=tag:cockroach-cluster,Values=\u003Ccluster-name>",{"type":48,"tag":673,"props":1908,"children":1909},{"style":707},[1910],{"type":53,"value":1911},"\"\n",{"type":48,"tag":56,"props":1913,"children":1914},{},[1915],{"type":48,"tag":102,"props":1916,"children":1917},{},[1918],{"type":53,"value":1919},"If GCP:",{"type":48,"tag":662,"props":1921,"children":1923},{"className":664,"code":1922,"language":666,"meta":667,"style":667},"gcloud compute instances list --filter=\"labels.cockroach-cluster=\u003Ccluster-name>\"\n",[1924],{"type":48,"tag":613,"props":1925,"children":1926},{"__ignoreMap":667},[1927],{"type":48,"tag":673,"props":1928,"children":1929},{"class":675,"line":676},[1930,1935,1940,1945,1950,1955,1959,1964],{"type":48,"tag":673,"props":1931,"children":1932},{"style":680},[1933],{"type":53,"value":1934},"gcloud",{"type":48,"tag":673,"props":1936,"children":1937},{"style":686},[1938],{"type":53,"value":1939}," compute",{"type":48,"tag":673,"props":1941,"children":1942},{"style":686},[1943],{"type":53,"value":1944}," instances",{"type":48,"tag":673,"props":1946,"children":1947},{"style":686},[1948],{"type":53,"value":1949}," list",{"type":48,"tag":673,"props":1951,"children":1952},{"style":686},[1953],{"type":53,"value":1954}," --filter=",{"type":48,"tag":673,"props":1956,"children":1957},{"style":707},[1958],{"type":53,"value":1767},{"type":48,"tag":673,"props":1960,"children":1961},{"style":686},[1962],{"type":53,"value":1963},"labels.cockroach-cluster=\u003Ccluster-name>",{"type":48,"tag":673,"props":1965,"children":1966},{"style":707},[1967],{"type":53,"value":1911},{"type":48,"tag":56,"props":1969,"children":1970},{},[1971],{"type":48,"tag":102,"props":1972,"children":1973},{},[1974],{"type":53,"value":1975},"If Azure:",{"type":48,"tag":662,"props":1977,"children":1979},{"className":664,"code":1978,"language":666,"meta":667,"style":667},"az vm list --resource-group \u003Crg> --query \"[?tags.cockroachCluster=='\u003Ccluster-name>']\"\n",[1980],{"type":48,"tag":613,"props":1981,"children":1982},{"__ignoreMap":667},[1983],{"type":48,"tag":673,"props":1984,"children":1985},{"class":675,"line":676},[1986,1991,1996,2000,2005,2010,2015,2020,2024,2029,2033,2038],{"type":48,"tag":673,"props":1987,"children":1988},{"style":680},[1989],{"type":53,"value":1990},"az",{"type":48,"tag":673,"props":1992,"children":1993},{"style":686},[1994],{"type":53,"value":1995}," vm",{"type":48,"tag":673,"props":1997,"children":1998},{"style":686},[1999],{"type":53,"value":1949},{"type":48,"tag":673,"props":2001,"children":2002},{"style":686},[2003],{"type":53,"value":2004}," --resource-group",{"type":48,"tag":673,"props":2006,"children":2007},{"style":707},[2008],{"type":53,"value":2009}," \u003C",{"type":48,"tag":673,"props":2011,"children":2012},{"style":686},[2013],{"type":53,"value":2014},"r",{"type":48,"tag":673,"props":2016,"children":2017},{"style":1759},[2018],{"type":53,"value":2019},"g",{"type":48,"tag":673,"props":2021,"children":2022},{"style":707},[2023],{"type":53,"value":720},{"type":48,"tag":673,"props":2025,"children":2026},{"style":686},[2027],{"type":53,"value":2028}," --query",{"type":48,"tag":673,"props":2030,"children":2031},{"style":707},[2032],{"type":53,"value":1751},{"type":48,"tag":673,"props":2034,"children":2035},{"style":686},[2036],{"type":53,"value":2037},"[?tags.cockroachCluster=='\u003Ccluster-name>']",{"type":48,"tag":673,"props":2039,"children":2040},{"style":707},[2041],{"type":53,"value":1911},{"type":48,"tag":156,"props":2043,"children":2045},{"id":2044},"additional-byoc-checks",[2046],{"type":53,"value":2047},"Additional BYOC Checks",{"type":48,"tag":69,"props":2049,"children":2050},{},[2051,2056,2061],{"type":48,"tag":73,"props":2052,"children":2053},{},[2054],{"type":53,"value":2055},"Verify VPC\u002Fnetwork connectivity (PrivateLink, PSC, VPC Peering)",{"type":48,"tag":73,"props":2057,"children":2058},{},[2059],{"type":53,"value":2060},"Check IAM roles — CRL service account permissions still valid",{"type":48,"tag":73,"props":2062,"children":2063},{},[2064],{"type":53,"value":2065},"Review cloud provider monitoring for infrastructure-level anomalies",{"type":48,"tag":146,"props":2067,"children":2068},{},[],{"type":48,"tag":62,"props":2070,"children":2072},{"id":2071},"standard-health-check",[2073],{"type":53,"value":571},{"type":48,"tag":56,"props":2075,"children":2076},{},[2077,2081],{"type":48,"tag":102,"props":2078,"children":2079},{},[2080],{"type":53,"value":604},{"type":53,"value":2082}," Tier = Standard",{"type":48,"tag":56,"props":2084,"children":2085},{},[2086],{"type":53,"value":2087},"Standard is a multi-tenant managed service. There are no individual nodes to monitor — Cockroach Labs manages all infrastructure, replication, and capacity. Health checking focuses on your workload performance and provisioned compute.",{"type":48,"tag":156,"props":2089,"children":2091},{"id":2090},"cloud-console-checks-1",[2092],{"type":53,"value":1539},{"type":48,"tag":1541,"props":2094,"children":2095},{},[2096,2111,2121,2130],{"type":48,"tag":73,"props":2097,"children":2098},{},[2099,2103,2105],{"type":48,"tag":102,"props":2100,"children":2101},{},[2102],{"type":53,"value":1100},{"type":53,"value":2104}," — verify cluster state is ",{"type":48,"tag":613,"props":2106,"children":2108},{"className":2107},[],[2109],{"type":53,"value":2110},"RUNNING",{"type":48,"tag":73,"props":2112,"children":2113},{},[2114,2119],{"type":48,"tag":102,"props":2115,"children":2116},{},[2117],{"type":53,"value":2118},"SQL Activity",{"type":53,"value":2120}," — statement and transaction latency, error rates",{"type":48,"tag":73,"props":2122,"children":2123},{},[2124,2128],{"type":48,"tag":102,"props":2125,"children":2126},{},[2127],{"type":53,"value":873},{"type":53,"value":2129}," — current usage",{"type":48,"tag":73,"props":2131,"children":2132},{},[2133,2138],{"type":48,"tag":102,"props":2134,"children":2135},{},[2136],{"type":53,"value":2137},"Compute",{"type":53,"value":2139}," — provisioned vCPU utilization",{"type":48,"tag":156,"props":2141,"children":2143},{"id":2142},"sql-checks",[2144],{"type":53,"value":2145},"SQL Checks",{"type":48,"tag":662,"props":2147,"children":2149},{"className":1008,"code":2148,"language":1010,"meta":667,"style":667},"-- Verify connectivity\nSELECT 1;\n\n-- Current version\nSELECT version();\n\n-- Recent failed jobs\nWITH j AS (SHOW JOBS)\nSELECT job_type, status, description FROM j\nWHERE status = 'failed' AND created > now() - INTERVAL '24 hours';\n",[2150],{"type":48,"tag":613,"props":2151,"children":2152},{"__ignoreMap":667},[2153,2161,2169,2176,2184,2192,2199,2206,2213,2221],{"type":48,"tag":673,"props":2154,"children":2155},{"class":675,"line":676},[2156],{"type":48,"tag":673,"props":2157,"children":2158},{},[2159],{"type":53,"value":2160},"-- Verify connectivity\n",{"type":48,"tag":673,"props":2162,"children":2163},{"class":675,"line":29},[2164],{"type":48,"tag":673,"props":2165,"children":2166},{},[2167],{"type":53,"value":2168},"SELECT 1;\n",{"type":48,"tag":673,"props":2170,"children":2171},{"class":675,"line":25},[2172],{"type":48,"tag":673,"props":2173,"children":2174},{"emptyLinePlaceholder":1477},[2175],{"type":53,"value":1480},{"type":48,"tag":673,"props":2177,"children":2178},{"class":675,"line":1041},[2179],{"type":48,"tag":673,"props":2180,"children":2181},{},[2182],{"type":53,"value":2183},"-- Current version\n",{"type":48,"tag":673,"props":2185,"children":2186},{"class":675,"line":1050},[2187],{"type":48,"tag":673,"props":2188,"children":2189},{},[2190],{"type":53,"value":2191},"SELECT version();\n",{"type":48,"tag":673,"props":2193,"children":2194},{"class":675,"line":1059},[2195],{"type":48,"tag":673,"props":2196,"children":2197},{"emptyLinePlaceholder":1477},[2198],{"type":53,"value":1480},{"type":48,"tag":673,"props":2200,"children":2201},{"class":675,"line":1368},[2202],{"type":48,"tag":673,"props":2203,"children":2204},{},[2205],{"type":53,"value":1684},{"type":48,"tag":673,"props":2207,"children":2208},{"class":675,"line":1377},[2209],{"type":48,"tag":673,"props":2210,"children":2211},{},[2212],{"type":53,"value":1203},{"type":48,"tag":673,"props":2214,"children":2215},{"class":675,"line":1386},[2216],{"type":48,"tag":673,"props":2217,"children":2218},{},[2219],{"type":53,"value":2220},"SELECT job_type, status, description FROM j\n",{"type":48,"tag":673,"props":2222,"children":2223},{"class":675,"line":1395},[2224],{"type":48,"tag":673,"props":2225,"children":2226},{},[2227],{"type":53,"value":2228},"WHERE status = 'failed' AND created > now() - INTERVAL '24 hours';\n",{"type":48,"tag":156,"props":2230,"children":2232},{"id":2231},"what-to-monitor",[2233],{"type":53,"value":2234},"What to Monitor",{"type":48,"tag":69,"props":2236,"children":2237},{},[2238,2248,2258,2268],{"type":48,"tag":73,"props":2239,"children":2240},{},[2241,2246],{"type":48,"tag":102,"props":2242,"children":2243},{},[2244],{"type":53,"value":2245},"P99 SQL latency",{"type":53,"value":2247}," — track via Cloud Console Metrics",{"type":48,"tag":73,"props":2249,"children":2250},{},[2251,2256],{"type":48,"tag":102,"props":2252,"children":2253},{},[2254],{"type":53,"value":2255},"Error rates",{"type":53,"value":2257}," — check for spikes in statement errors",{"type":48,"tag":73,"props":2259,"children":2260},{},[2261,2266],{"type":48,"tag":102,"props":2262,"children":2263},{},[2264],{"type":53,"value":2265},"Storage growth",{"type":53,"value":2267}," — plan based on usage trends",{"type":48,"tag":73,"props":2269,"children":2270},{},[2271,2276],{"type":48,"tag":102,"props":2272,"children":2273},{},[2274],{"type":53,"value":2275},"Compute utilization",{"type":53,"value":2277}," — increase provisioned vCPUs if utilization is consistently high",{"type":48,"tag":56,"props":2279,"children":2280},{},[2281,2286],{"type":48,"tag":102,"props":2282,"children":2283},{},[2284],{"type":53,"value":2285},"Note:",{"type":53,"value":2287}," Node-level visibility is not available on Standard. Use Cloud Console for all infrastructure health monitoring.",{"type":48,"tag":146,"props":2289,"children":2290},{},[],{"type":48,"tag":62,"props":2292,"children":2294},{"id":2293},"basic-health-check",[2295],{"type":53,"value":588},{"type":48,"tag":56,"props":2297,"children":2298},{},[2299,2303],{"type":48,"tag":102,"props":2300,"children":2301},{},[2302],{"type":53,"value":604},{"type":53,"value":2304}," Tier = Basic",{"type":48,"tag":56,"props":2306,"children":2307},{},[2308],{"type":53,"value":2309},"Basic is a serverless offering that auto-scales. There are no nodes or provisioned compute to monitor. Cockroach Labs manages all infrastructure. Health checking focuses on connectivity, consumption, and spending.",{"type":48,"tag":156,"props":2311,"children":2313},{"id":2312},"cloud-console-checks-2",[2314],{"type":53,"value":1539},{"type":48,"tag":1541,"props":2316,"children":2317},{},[2318,2332,2342,2351],{"type":48,"tag":73,"props":2319,"children":2320},{},[2321,2325,2327],{"type":48,"tag":102,"props":2322,"children":2323},{},[2324],{"type":53,"value":1100},{"type":53,"value":2326}," — verify state is ",{"type":48,"tag":613,"props":2328,"children":2330},{"className":2329},[],[2331],{"type":53,"value":2110},{"type":48,"tag":73,"props":2333,"children":2334},{},[2335,2340],{"type":48,"tag":102,"props":2336,"children":2337},{},[2338],{"type":53,"value":2339},"Request Units",{"type":53,"value":2341}," — consumption rate and remaining budget",{"type":48,"tag":73,"props":2343,"children":2344},{},[2345,2349],{"type":48,"tag":102,"props":2346,"children":2347},{},[2348],{"type":53,"value":873},{"type":53,"value":2350}," — current usage (10 GiB included free)",{"type":48,"tag":73,"props":2352,"children":2353},{},[2354,2359],{"type":48,"tag":102,"props":2355,"children":2356},{},[2357],{"type":53,"value":2358},"Spending Limits",{"type":53,"value":2360}," — verify limits are configured to avoid unexpected charges",{"type":48,"tag":156,"props":2362,"children":2364},{"id":2363},"sql-checks-1",[2365],{"type":53,"value":2145},{"type":48,"tag":662,"props":2367,"children":2368},{"className":1008,"code":2148,"language":1010,"meta":667,"style":667},[2369],{"type":48,"tag":613,"props":2370,"children":2371},{"__ignoreMap":667},[2372,2379,2386,2393,2400,2407,2414,2421,2428,2435],{"type":48,"tag":673,"props":2373,"children":2374},{"class":675,"line":676},[2375],{"type":48,"tag":673,"props":2376,"children":2377},{},[2378],{"type":53,"value":2160},{"type":48,"tag":673,"props":2380,"children":2381},{"class":675,"line":29},[2382],{"type":48,"tag":673,"props":2383,"children":2384},{},[2385],{"type":53,"value":2168},{"type":48,"tag":673,"props":2387,"children":2388},{"class":675,"line":25},[2389],{"type":48,"tag":673,"props":2390,"children":2391},{"emptyLinePlaceholder":1477},[2392],{"type":53,"value":1480},{"type":48,"tag":673,"props":2394,"children":2395},{"class":675,"line":1041},[2396],{"type":48,"tag":673,"props":2397,"children":2398},{},[2399],{"type":53,"value":2183},{"type":48,"tag":673,"props":2401,"children":2402},{"class":675,"line":1050},[2403],{"type":48,"tag":673,"props":2404,"children":2405},{},[2406],{"type":53,"value":2191},{"type":48,"tag":673,"props":2408,"children":2409},{"class":675,"line":1059},[2410],{"type":48,"tag":673,"props":2411,"children":2412},{"emptyLinePlaceholder":1477},[2413],{"type":53,"value":1480},{"type":48,"tag":673,"props":2415,"children":2416},{"class":675,"line":1368},[2417],{"type":48,"tag":673,"props":2418,"children":2419},{},[2420],{"type":53,"value":1684},{"type":48,"tag":673,"props":2422,"children":2423},{"class":675,"line":1377},[2424],{"type":48,"tag":673,"props":2425,"children":2426},{},[2427],{"type":53,"value":1203},{"type":48,"tag":673,"props":2429,"children":2430},{"class":675,"line":1386},[2431],{"type":48,"tag":673,"props":2432,"children":2433},{},[2434],{"type":53,"value":2220},{"type":48,"tag":673,"props":2436,"children":2437},{"class":675,"line":1395},[2438],{"type":48,"tag":673,"props":2439,"children":2440},{},[2441],{"type":53,"value":2228},{"type":48,"tag":156,"props":2443,"children":2445},{"id":2444},"what-to-monitor-1",[2446],{"type":53,"value":2234},{"type":48,"tag":69,"props":2448,"children":2449},{},[2450,2460,2470,2480],{"type":48,"tag":73,"props":2451,"children":2452},{},[2453,2458],{"type":48,"tag":102,"props":2454,"children":2455},{},[2456],{"type":53,"value":2457},"Request Unit (RU) consumption",{"type":53,"value":2459}," — track via Cloud Console to stay within spending limits",{"type":48,"tag":73,"props":2461,"children":2462},{},[2463,2468],{"type":48,"tag":102,"props":2464,"children":2465},{},[2466],{"type":53,"value":2467},"Storage usage",{"type":53,"value":2469}," — monitor growth relative to the 10 GiB free tier",{"type":48,"tag":73,"props":2471,"children":2472},{},[2473,2478],{"type":48,"tag":102,"props":2474,"children":2475},{},[2476],{"type":53,"value":2477},"Query efficiency",{"type":53,"value":2479}," — optimize queries that consume excessive RUs",{"type":48,"tag":73,"props":2481,"children":2482},{},[2483,2488],{"type":48,"tag":102,"props":2484,"children":2485},{},[2486],{"type":53,"value":2487},"Cold start latency",{"type":53,"value":2489}," — Basic clusters may scale to zero during inactivity; first connection after idle may have higher latency",{"type":48,"tag":146,"props":2491,"children":2492},{},[],{"type":48,"tag":62,"props":2494,"children":2496},{"id":2495},"safety-considerations",[2497],{"type":53,"value":2498},"Safety Considerations",{"type":48,"tag":56,"props":2500,"children":2501},{},[2502],{"type":53,"value":2503},"All checks in this skill are read-only. No data is modified.",{"type":48,"tag":69,"props":2505,"children":2506},{},[2507,2524,2540],{"type":48,"tag":73,"props":2508,"children":2509},{},[2510,2515,2517,2522],{"type":48,"tag":102,"props":2511,"children":2512},{},[2513],{"type":53,"value":2514},"Self-Hosted:",{"type":53,"value":2516}," ",{"type":48,"tag":613,"props":2518,"children":2520},{"className":2519},[],[2521],{"type":53,"value":618},{"type":53,"value":2523}," requires CLI access (or admin SQL privilege if you need to fall back to internal tables). Most node-level health queries have no production-safe SQL alternative.",{"type":48,"tag":73,"props":2525,"children":2526},{},[2527,2532,2533,2538],{"type":48,"tag":102,"props":2528,"children":2529},{},[2530],{"type":53,"value":2531},"Advanced\u002FBYOC:",{"type":53,"value":2516},{"type":48,"tag":613,"props":2534,"children":2536},{"className":2535},[],[2537],{"type":53,"value":618},{"type":53,"value":2539}," works the same way; certificate inspection is managed by Cockroach Labs.",{"type":48,"tag":73,"props":2541,"children":2542},{},[2543,2548],{"type":48,"tag":102,"props":2544,"children":2545},{},[2546],{"type":53,"value":2547},"Standard\u002FBasic:",{"type":53,"value":2549}," No node-level visibility by design — use the Cloud Console.",{"type":48,"tag":62,"props":2551,"children":2553},{"id":2552},"troubleshooting",[2554],{"type":53,"value":2555},"Troubleshooting",{"type":48,"tag":163,"props":2557,"children":2558},{},[2559,2579],{"type":48,"tag":167,"props":2560,"children":2561},{},[2562],{"type":48,"tag":171,"props":2563,"children":2564},{},[2565,2570,2574],{"type":48,"tag":175,"props":2566,"children":2567},{},[2568],{"type":53,"value":2569},"Issue",{"type":48,"tag":175,"props":2571,"children":2572},{},[2573],{"type":53,"value":495},{"type":48,"tag":175,"props":2575,"children":2576},{},[2577],{"type":53,"value":2578},"Fix",{"type":48,"tag":191,"props":2580,"children":2581},{},[2582,2611,2643,2661,2679,2697,2714],{"type":48,"tag":171,"props":2583,"children":2584},{},[2585,2595,2600],{"type":48,"tag":198,"props":2586,"children":2587},{},[2588,2593],{"type":48,"tag":613,"props":2589,"children":2591},{"className":2590},[],[2592],{"type":53,"value":618},{"type":53,"value":2594}," errors with permission denied",{"type":48,"tag":198,"props":2596,"children":2597},{},[2598],{"type":53,"value":2599},"SH",{"type":48,"tag":198,"props":2601,"children":2602},{},[2603,2605],{"type":53,"value":2604},"Use a cert with admin or ",{"type":48,"tag":613,"props":2606,"children":2608},{"className":2607},[],[2609],{"type":53,"value":2610},"VIEWCLUSTERMETADATA",{"type":48,"tag":171,"props":2612,"children":2613},{},[2614,2626,2630],{"type":48,"tag":198,"props":2615,"children":2616},{},[2617,2619,2624],{"type":53,"value":2618},"Node missing from ",{"type":48,"tag":613,"props":2620,"children":2622},{"className":2621},[],[2623],{"type":53,"value":618},{"type":53,"value":2625}," output",{"type":48,"tag":198,"props":2627,"children":2628},{},[2629],{"type":53,"value":2599},{"type":48,"tag":198,"props":2631,"children":2632},{},[2633,2635,2641],{"type":53,"value":2634},"Check node process; verify ",{"type":48,"tag":613,"props":2636,"children":2638},{"className":2637},[],[2639],{"type":53,"value":2640},"--join",{"type":53,"value":2642}," address",{"type":48,"tag":171,"props":2644,"children":2645},{},[2646,2651,2656],{"type":48,"tag":198,"props":2647,"children":2648},{},[2649],{"type":53,"value":2650},"Standard\u002FBasic SQL doesn't expose node tables",{"type":48,"tag":198,"props":2652,"children":2653},{},[2654],{"type":53,"value":2655},"STD\u002FBAS",{"type":48,"tag":198,"props":2657,"children":2658},{},[2659],{"type":53,"value":2660},"Expected — use Cloud Console",{"type":48,"tag":171,"props":2662,"children":2663},{},[2664,2669,2674],{"type":48,"tag":198,"props":2665,"children":2666},{},[2667],{"type":53,"value":2668},"Cloud Console shows degraded",{"type":48,"tag":198,"props":2670,"children":2671},{},[2672],{"type":53,"value":2673},"ADV\u002FBYOC",{"type":48,"tag":198,"props":2675,"children":2676},{},[2677],{"type":53,"value":2678},"Check Cloud status page; contact support",{"type":48,"tag":171,"props":2680,"children":2681},{},[2682,2687,2692],{"type":48,"tag":198,"props":2683,"children":2684},{},[2685],{"type":53,"value":2686},"High RU consumption",{"type":48,"tag":198,"props":2688,"children":2689},{},[2690],{"type":53,"value":2691},"BAS",{"type":48,"tag":198,"props":2693,"children":2694},{},[2695],{"type":53,"value":2696},"Profile queries; set spending limits",{"type":48,"tag":171,"props":2698,"children":2699},{},[2700,2705,2709],{"type":48,"tag":198,"props":2701,"children":2702},{},[2703],{"type":53,"value":2704},"Cloud API returns 401",{"type":48,"tag":198,"props":2706,"children":2707},{},[2708],{"type":53,"value":2673},{"type":48,"tag":198,"props":2710,"children":2711},{},[2712],{"type":53,"value":2713},"Regenerate API key",{"type":48,"tag":171,"props":2715,"children":2716},{},[2717,2722,2726],{"type":48,"tag":198,"props":2718,"children":2719},{},[2720],{"type":53,"value":2721},"High latency on first connection",{"type":48,"tag":198,"props":2723,"children":2724},{},[2725],{"type":53,"value":2691},{"type":48,"tag":198,"props":2727,"children":2728},{},[2729],{"type":53,"value":2730},"Expected cold start after idle period",{"type":48,"tag":62,"props":2732,"children":2734},{"id":2733},"references",[2735],{"type":53,"value":2736},"References",{"type":48,"tag":56,"props":2738,"children":2739},{},[2740],{"type":48,"tag":102,"props":2741,"children":2742},{},[2743],{"type":53,"value":2744},"Skill references:",{"type":48,"tag":69,"props":2746,"children":2747},{},[2748],{"type":48,"tag":73,"props":2749,"children":2750},{},[2751],{"type":48,"tag":110,"props":2752,"children":2753},{"href":1506},[2754],{"type":53,"value":2755},"Production readiness checklist",{"type":48,"tag":56,"props":2757,"children":2758},{},[2759],{"type":48,"tag":102,"props":2760,"children":2761},{},[2762],{"type":53,"value":2763},"Related skills:",{"type":48,"tag":69,"props":2765,"children":2766},{},[2767,2776,2785,2794],{"type":48,"tag":73,"props":2768,"children":2769},{},[2770],{"type":48,"tag":110,"props":2771,"children":2773},{"href":2772},"..\u002Fupgrading-cluster-version\u002FSKILL.md",[2774],{"type":53,"value":2775},"upgrading-cluster-version",{"type":48,"tag":73,"props":2777,"children":2778},{},[2779],{"type":48,"tag":110,"props":2780,"children":2782},{"href":2781},"..\u002Fmanaging-cluster-capacity\u002FSKILL.md",[2783],{"type":53,"value":2784},"managing-cluster-capacity",{"type":48,"tag":73,"props":2786,"children":2787},{},[2788],{"type":48,"tag":110,"props":2789,"children":2791},{"href":2790},"..\u002Fperforming-cluster-maintenance\u002FSKILL.md",[2792],{"type":53,"value":2793},"performing-cluster-maintenance",{"type":48,"tag":73,"props":2795,"children":2796},{},[2797],{"type":48,"tag":110,"props":2798,"children":2799},{"href":126},[2800],{"type":53,"value":129},{"type":48,"tag":56,"props":2802,"children":2803},{},[2804],{"type":48,"tag":102,"props":2805,"children":2806},{},[2807],{"type":53,"value":2808},"Official CockroachDB Documentation:",{"type":48,"tag":69,"props":2810,"children":2811},{},[2812,2822,2831,2841,2851],{"type":48,"tag":73,"props":2813,"children":2814},{},[2815],{"type":48,"tag":110,"props":2816,"children":2819},{"href":2817,"rel":2818},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fmonitoring-and-alerting",[649],[2820],{"type":53,"value":2821},"Monitoring and Alerting",{"type":48,"tag":73,"props":2823,"children":2824},{},[2825],{"type":48,"tag":110,"props":2826,"children":2829},{"href":2827,"rel":2828},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Fcockroach-node",[649],[2830],{"type":53,"value":618},{"type":48,"tag":73,"props":2832,"children":2833},{},[2834],{"type":48,"tag":110,"props":2835,"children":2838},{"href":2836,"rel":2837},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fstable\u002Frecommended-production-settings",[649],[2839],{"type":53,"value":2840},"Production Checklist",{"type":48,"tag":73,"props":2842,"children":2843},{},[2844],{"type":48,"tag":110,"props":2845,"children":2848},{"href":2846,"rel":2847},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fcluster-overview-page",[649],[2849],{"type":53,"value":2850},"Cloud Console Monitoring",{"type":48,"tag":73,"props":2852,"children":2853},{},[2854],{"type":48,"tag":110,"props":2855,"children":2858},{"href":2856,"rel":2857},"https:\u002F\u002Fwww.cockroachlabs.com\u002Fdocs\u002Fcockroachcloud\u002Fexport-metrics",[649],[2859],{"type":53,"value":2860},"Export Metrics (Advanced)",{"type":48,"tag":2862,"props":2863,"children":2864},"style",{},[2865],{"type":53,"value":2866},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2868,"total":3024},[2869,2886,2902,2915,2926,2936,2949,2958,2972,2987,2998,3011],{"slug":2870,"name":2870,"fn":2871,"description":2872,"org":2873,"tags":2874,"stars":2883,"repoUrl":2884,"updatedAt":2885},"collecting-cockroachdb-operator-escalation-packet","collect CockroachDB operator escalation packets","Collects a complete CockroachDB Operator escalation packet for TSC\u002FTSE or operator-team handoff, including Helm state, Kubernetes resources, logs, operation-specific evidence, pprof goroutine dumps, metrics, and a customer action timeline. Use when general diagnosis cannot resolve an operator-managed CockroachDB Helm issue or before restarting a stuck operator.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2875,2876,2879,2882],{"name":20,"slug":21,"type":15},{"name":2877,"slug":2878,"type":15},"Incident Response","incident-response",{"name":2880,"slug":2881,"type":15},"Kubernetes","kubernetes",{"name":17,"slug":18,"type":15},105,"https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fhelm-charts","2026-07-12T07:57:25.288146",{"slug":2887,"name":2887,"fn":2888,"description":2889,"org":2890,"tags":2891,"stars":2883,"repoUrl":2884,"updatedAt":2901},"configuring-cockroachdb-helm-tls","configure TLS for CockroachDB Helm charts","Selects and validates TLS settings for CockroachDB Helm chart deployments, including self-signer, cert-manager, and external certificate modes. Use when a customer needs secure CockroachDB Helm values, certificate secret mapping, cert-manager integration, or TLS install troubleshooting before deploying the chart.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2892,2895,2898],{"name":2893,"slug":2894,"type":15},"Deployment","deployment",{"name":2896,"slug":2897,"type":15},"Encryption","encryption",{"name":2899,"slug":2900,"type":15},"Security","security","2026-07-12T07:56:37.675396",{"slug":2903,"name":2903,"fn":2904,"description":2905,"org":2906,"tags":2907,"stars":2883,"repoUrl":2884,"updatedAt":2914},"debugging-cockroachdb-operator-migrations","debug CockroachDB Operator migration scenarios","Debugs CockroachDB Operator migration scenarios, including Helm StatefulSet to v1beta1 CrdbNode migration and public operator v1alpha1 to v1beta1 migration. Use when migration labels, migration phases, source StatefulSet ownership, converted CRDs, PVC ownership, or post-migration reconciliation are unclear or stuck.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2908,2909,2910,2911],{"name":20,"slug":21,"type":15},{"name":23,"slug":24,"type":15},{"name":2880,"slug":2881,"type":15},{"name":2912,"slug":2913,"type":15},"Migration","migration","2026-07-12T07:56:48.360871",{"slug":2916,"name":2916,"fn":2917,"description":2918,"org":2919,"tags":2920,"stars":2883,"repoUrl":2884,"updatedAt":2925},"diagnosing-cockroachdb-helm-deployments","diagnose CockroachDB Helm chart deployments","Diagnoses failed or unhealthy CockroachDB Helm chart deployments by checking Helm release state, operator health, CrdbCluster and CrdbNode status, pod readiness, RBAC, webhooks, TLS, upgrades, scaling, PVCs, DNS, and multi-region assumptions. Use when Helm install or upgrade fails, pods are not Ready, or the operator is not reconciling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2921,2922,2923,2924],{"name":20,"slug":21,"type":15},{"name":23,"slug":24,"type":15},{"name":2893,"slug":2894,"type":15},{"name":2880,"slug":2881,"type":15},"2026-07-12T07:57:24.018818",{"slug":2927,"name":2927,"fn":2928,"description":2929,"org":2930,"tags":2931,"stars":2883,"repoUrl":2884,"updatedAt":2935},"installing-cockroachdb-with-helm","install CockroachDB using Helm","Guides customer-facing installation of CockroachDB on Kubernetes using the CockroachDB split Helm charts and operator-managed v1beta1 resources. Use when installing CockroachDB with Helm, choosing between published and local split charts, verifying a new install, or helping an agent complete first-time Kubernetes onboarding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2932,2933,2934],{"name":20,"slug":21,"type":15},{"name":2893,"slug":2894,"type":15},{"name":2880,"slug":2881,"type":15},"2026-07-12T07:56:45.777567",{"slug":2937,"name":2937,"fn":2938,"description":2939,"org":2940,"tags":2941,"stars":2883,"repoUrl":2884,"updatedAt":2948},"validating-cockroachdb-helm-multiregion","validate CockroachDB multi-region Helm deployments","Validates CockroachDB Helm chart values and Kubernetes prerequisites for operator-managed multi-region deployments. Use before adding a region, deploying CockroachDB across multiple Kubernetes clusters, checking region DNS domains, or confirming that all regions share certificate and networking assumptions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2942,2943,2944,2945],{"name":20,"slug":21,"type":15},{"name":2893,"slug":2894,"type":15},{"name":2880,"slug":2881,"type":15},{"name":2946,"slug":2947,"type":15},"Operations","operations","2026-07-12T07:56:47.082609",{"slug":142,"name":142,"fn":2950,"description":2951,"org":2952,"tags":2953,"stars":25,"repoUrl":26,"updatedAt":2957},"analyze CockroachDB range distribution and health","Analyzes CockroachDB range distribution across tables and indexes using SHOW RANGES to identify range count, size patterns, leaseholder placement, and replication health. Use when investigating hotspots, uneven data distribution, range fragmentation, or validating zone configuration effects without DB Console access.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2954,2955,2956],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},"2026-07-12T07:57:18.753533",{"slug":2959,"name":2959,"fn":2960,"description":2961,"org":2962,"tags":2963,"stars":25,"repoUrl":26,"updatedAt":2971},"analyzing-schema-change-storage-risk","analyze schema change storage requirements","Estimates storage requirements for CockroachDB online schema change backfills using SHOW RANGES WITH DETAILS, KEYS, INDEXES. Use before CREATE INDEX, ADD COLUMN with INDEX\u002FUNIQUE, ALTER PRIMARY KEY, CREATE MATERIALIZED VIEW, CREATE TABLE AS, REFRESH, or SET LOCALITY on tables with large per-index footprints, to avoid mid-backfill disk exhaustion.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2964,2967,2968,2969],{"name":2965,"slug":2966,"type":15},"Data Modeling","data-modeling",{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":2970,"slug":1010,"type":15},"SQL","2026-07-12T07:57:22.763788",{"slug":2973,"name":2973,"fn":2974,"description":2975,"org":2976,"tags":2977,"stars":25,"repoUrl":26,"updatedAt":2986},"auditing-cis-benchmark","audit CockroachDB clusters against CIS benchmarks","Audits a self-hosted CockroachDB cluster against the CIS CockroachDB Benchmark v1.0.0 Level 1 controls. Supports two audit depths — quick automated scans and full CIS audit procedures. Produces a structured PASS\u002FFAIL\u002FMANUAL report covering installation, system hardening, logging, user access, data protection, and CockroachDB settings. Use when preparing for CIS compliance assessments, hardening self-hosted deployments, or validating security posture against industry benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2978,2981,2984,2985],{"name":2979,"slug":2980,"type":15},"Audit","audit",{"name":2982,"slug":2983,"type":15},"Compliance","compliance",{"name":20,"slug":21,"type":15},{"name":2899,"slug":2900,"type":15},"2026-07-18T05:48:00.862384",{"slug":2988,"name":2988,"fn":2989,"description":2990,"org":2991,"tags":2992,"stars":25,"repoUrl":26,"updatedAt":2997},"auditing-cloud-cluster-security","audit CockroachDB cluster security posture","Audits the security posture of a CockroachDB cluster (Cloud or self-hosted) across network, authentication, authorization, encryption, audit logging, and backup dimensions. Use when assessing cluster security readiness, preparing for compliance reviews, or investigating security configuration gaps.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2993,2994,2995,2996],{"name":2979,"slug":2980,"type":15},{"name":20,"slug":21,"type":15},{"name":2946,"slug":2947,"type":15},{"name":2899,"slug":2900,"type":15},"2026-07-12T07:57:01.506735",{"slug":2999,"name":2999,"fn":3000,"description":3001,"org":3002,"tags":3003,"stars":25,"repoUrl":26,"updatedAt":3010},"auditing-table-statistics","audit optimizer table statistics","Audits optimizer table statistics for staleness, missing coverage, and data quality issues using SHOW STATISTICS. Use when diagnosing poor query performance, unexpected plan changes, or after bulk data changes to identify stale statistics requiring refresh via CREATE STATISTICS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3004,3005,3008,3009],{"name":2979,"slug":2980,"type":15},{"name":3006,"slug":3007,"type":15},"Data Analysis","data-analysis",{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},"2026-07-12T07:57:16.190081",{"slug":3012,"name":3012,"fn":3013,"description":3014,"org":3015,"tags":3016,"stars":25,"repoUrl":26,"updatedAt":3023},"benchmarking-transaction-patterns","benchmark CockroachDB transaction patterns","Guides benchmarking and comparing explicit multi-statement transactions versus single-statement CTE transactions in CockroachDB, with fair test methodology, contention analysis, and performance interpretation. Use when comparing transaction formulations, benchmarking CockroachDB workloads under contention, investigating retry pressure, or deciding whether to rewrite multi-step application flows into single SQL statements.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3017,3018,3021,3022],{"name":20,"slug":21,"type":15},{"name":3019,"slug":3020,"type":15},"Engineering","engineering",{"name":13,"slug":14,"type":15},{"name":2970,"slug":1010,"type":15},"2026-07-12T07:57:26.543278",40,{"items":3026,"total":3078},[3027,3033,3040,3047,3054,3061,3068],{"slug":142,"name":142,"fn":2950,"description":2951,"org":3028,"tags":3029,"stars":25,"repoUrl":26,"updatedAt":2957},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3030,3031,3032],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":2959,"name":2959,"fn":2960,"description":2961,"org":3034,"tags":3035,"stars":25,"repoUrl":26,"updatedAt":2971},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3036,3037,3038,3039],{"name":2965,"slug":2966,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":2970,"slug":1010,"type":15},{"slug":2973,"name":2973,"fn":2974,"description":2975,"org":3041,"tags":3042,"stars":25,"repoUrl":26,"updatedAt":2986},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3043,3044,3045,3046],{"name":2979,"slug":2980,"type":15},{"name":2982,"slug":2983,"type":15},{"name":20,"slug":21,"type":15},{"name":2899,"slug":2900,"type":15},{"slug":2988,"name":2988,"fn":2989,"description":2990,"org":3048,"tags":3049,"stars":25,"repoUrl":26,"updatedAt":2997},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3050,3051,3052,3053],{"name":2979,"slug":2980,"type":15},{"name":20,"slug":21,"type":15},{"name":2946,"slug":2947,"type":15},{"name":2899,"slug":2900,"type":15},{"slug":2999,"name":2999,"fn":3000,"description":3001,"org":3055,"tags":3056,"stars":25,"repoUrl":26,"updatedAt":3010},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3057,3058,3059,3060],{"name":2979,"slug":2980,"type":15},{"name":3006,"slug":3007,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"slug":3012,"name":3012,"fn":3013,"description":3014,"org":3062,"tags":3063,"stars":25,"repoUrl":26,"updatedAt":3023},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3064,3065,3066,3067],{"name":20,"slug":21,"type":15},{"name":3019,"slug":3020,"type":15},{"name":13,"slug":14,"type":15},{"name":2970,"slug":1010,"type":15},{"slug":3069,"name":3069,"fn":3070,"description":3071,"org":3072,"tags":3073,"stars":25,"repoUrl":26,"updatedAt":3077},"cockroachdb-sql","write and optimize CockroachDB SQL","Use when writing, generating, or optimizing SQL for CockroachDB, designing CockroachDB schemas, or when the user asks about CockroachDB-specific SQL patterns, type mappings, and distributed database best practices. Also use when encountering CockroachDB anti-patterns like missing primary keys, sequential ID hotspots, or incorrect type usage.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3074,3075,3076],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":2970,"slug":1010,"type":15},"2026-07-25T05:31:22.562808",34]