[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-prometheus-review-prometheus-rules":3,"mdc-mi4imr-key":35,"related-org-prometheus-review-prometheus-rules":172,"related-repo-prometheus-review-prometheus-rules":258},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"review-prometheus-rules","audit and improve Prometheus alerting rules","Audit and improve recording and alerting rules. Use when reviewing alert coverage or rule health, drafting new alerts or recording rules, investigating flapping or noisy alerts, or speeding up slow dashboards with pre-computed expressions; produces complete rule-group YAML.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"prometheus","Prometheus (CNCF)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fprometheus.png",[12,16,19,21],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":17,"slug":18,"type":15},"Alerting","alerting",{"name":20,"slug":8,"type":15},"Prometheus",{"name":22,"slug":23,"type":15},"Monitoring","monitoring",65,"https:\u002F\u002Fgithub.com\u002Fprometheus\u002Fprometheus-mcp","2026-07-23T06:05:55.853937","Apache-2.0",18,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"MCP server for LLMs to interact with Prometheus","https:\u002F\u002Fgithub.com\u002Fprometheus\u002Fprometheus-mcp\u002Ftree\u002FHEAD\u002Fpkg\u002Fmcp\u002Fassets\u002Fskills\u002Freview-prometheus-rules","---\nname: review-prometheus-rules\ndescription: Audit and improve recording and alerting rules. Use when reviewing alert coverage or rule health, drafting new alerts or recording rules, investigating flapping or noisy alerts, or speeding up slow dashboards with pre-computed expressions; produces complete rule-group YAML.\nlicense: Apache-2.0\ncompatibility: Requires the tools of a connected Prometheus MCP server\n---\n\n# Reviewing and Improving Prometheus Rules\n\nRecording rules pre-compute expensive or repeated expressions into new series; alerting rules turn expressions into notifications. They live together in rule groups and are best designed together -- good alerts are often built on top of good recording rules. This runbook covers auditing the rules that exist, finding gaps, and drafting improvements.\n\n## Getting oriented\n\n- list_rules returns every rule group -- recording and alerting -- with expressions, labels, and per-rule evaluation health.\n- list_alerts shows what is firing right now; useful for separating \"badly tuned\" from \"correctly noisy\".\n- tsdb_stats reveals series counts and cardinality, which tells you whether a pre-aggregation would actually pay off.\n- list_targets can surface scraped services that no rule covers at all.\n- Prometheus's own metrics expose rule health at runtime: the ALERTS{} series records pending and firing alerts (range_query it to reconstruct an alert's history and spot flapping), rate(prometheus_rule_evaluation_failures_total[5m]) catches rules that fail to evaluate, and prometheus_rule_group_last_duration_seconds approaching the group's interval means evaluation is running out of budget.\n\n## Topics worth exploring\n\nTreat these as starting points and follow what the data shows, not as a fixed checklist:\n\n- Rule health: list_rules reports evaluation health and last error per rule; broken or always-empty rules are quick wins. Test a suspect expression directly by querying.\n- Recording rule candidates: expressions repeated across alerts or dashboards, especially rate\u002Fsum\u002Fhistogram_quantile combinations. Verify a candidate returns what you expect before proposing it, e.g. with range_query:\n  sum by (job) (rate(http_requests_total{code=~\"5..\"}[5m])) \u002F sum by (job) (rate(http_requests_total[5m]))\n- Alert quality: alert on symptoms rather than causes, keep severity labels meaningful, balance `for` durations against detection speed, and fill in annotations (summary, description, runbook link).\n- Coverage gaps: SLOs without multi-window multi-burn-rate alerts, critical metrics without absent() protection, resource exhaustion without capacity alerting.\n- Naming conventions: recording rules follow level:metric:operations (e.g. job:http_requests:rate5m); docs_search has the full convention and the rule config schema.\n\n## Suggesting changes\n\nPropose complete rule-group YAML, and sanity-check every expression against live data with query or range_query first. Explain what each rule is for, and recommend validating with promtool and watching rule evaluation health after deployment.\n",{"data":36,"body":38},{"name":4,"description":6,"license":27,"compatibility":37},"Requires the tools of a connected Prometheus MCP server",{"type":39,"children":40},"root",[41,50,56,63,101,107,112,161,167],{"type":42,"tag":43,"props":44,"children":46},"element","h1",{"id":45},"reviewing-and-improving-prometheus-rules",[47],{"type":48,"value":49},"text","Reviewing and Improving Prometheus Rules",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54],{"type":48,"value":55},"Recording rules pre-compute expensive or repeated expressions into new series; alerting rules turn expressions into notifications. They live together in rule groups and are best designed together -- good alerts are often built on top of good recording rules. This runbook covers auditing the rules that exist, finding gaps, and drafting improvements.",{"type":42,"tag":57,"props":58,"children":60},"h2",{"id":59},"getting-oriented",[61],{"type":48,"value":62},"Getting oriented",{"type":42,"tag":64,"props":65,"children":66},"ul",{},[67,73,78,83,88],{"type":42,"tag":68,"props":69,"children":70},"li",{},[71],{"type":48,"value":72},"list_rules returns every rule group -- recording and alerting -- with expressions, labels, and per-rule evaluation health.",{"type":42,"tag":68,"props":74,"children":75},{},[76],{"type":48,"value":77},"list_alerts shows what is firing right now; useful for separating \"badly tuned\" from \"correctly noisy\".",{"type":42,"tag":68,"props":79,"children":80},{},[81],{"type":48,"value":82},"tsdb_stats reveals series counts and cardinality, which tells you whether a pre-aggregation would actually pay off.",{"type":42,"tag":68,"props":84,"children":85},{},[86],{"type":48,"value":87},"list_targets can surface scraped services that no rule covers at all.",{"type":42,"tag":68,"props":89,"children":90},{},[91,93,99],{"type":48,"value":92},"Prometheus's own metrics expose rule health at runtime: the ALERTS{} series records pending and firing alerts (range_query it to reconstruct an alert's history and spot flapping), rate(prometheus_rule_evaluation_failures_total",{"type":42,"tag":94,"props":95,"children":96},"span",{},[97],{"type":48,"value":98},"5m",{"type":48,"value":100},") catches rules that fail to evaluate, and prometheus_rule_group_last_duration_seconds approaching the group's interval means evaluation is running out of budget.",{"type":42,"tag":57,"props":102,"children":104},{"id":103},"topics-worth-exploring",[105],{"type":48,"value":106},"Topics worth exploring",{"type":42,"tag":51,"props":108,"children":109},{},[110],{"type":48,"value":111},"Treat these as starting points and follow what the data shows, not as a fixed checklist:",{"type":42,"tag":64,"props":113,"children":114},{},[115,120,137,151,156],{"type":42,"tag":68,"props":116,"children":117},{},[118],{"type":48,"value":119},"Rule health: list_rules reports evaluation health and last error per rule; broken or always-empty rules are quick wins. Test a suspect expression directly by querying.",{"type":42,"tag":68,"props":121,"children":122},{},[123,125,129,131,135],{"type":48,"value":124},"Recording rule candidates: expressions repeated across alerts or dashboards, especially rate\u002Fsum\u002Fhistogram_quantile combinations. Verify a candidate returns what you expect before proposing it, e.g. with range_query:\nsum by (job) (rate(http_requests_total{code=~\"5..\"}",{"type":42,"tag":94,"props":126,"children":127},{},[128],{"type":48,"value":98},{"type":48,"value":130},")) \u002F sum by (job) (rate(http_requests_total",{"type":42,"tag":94,"props":132,"children":133},{},[134],{"type":48,"value":98},{"type":48,"value":136},"))",{"type":42,"tag":68,"props":138,"children":139},{},[140,142,149],{"type":48,"value":141},"Alert quality: alert on symptoms rather than causes, keep severity labels meaningful, balance ",{"type":42,"tag":143,"props":144,"children":146},"code",{"className":145},[],[147],{"type":48,"value":148},"for",{"type":48,"value":150}," durations against detection speed, and fill in annotations (summary, description, runbook link).",{"type":42,"tag":68,"props":152,"children":153},{},[154],{"type":48,"value":155},"Coverage gaps: SLOs without multi-window multi-burn-rate alerts, critical metrics without absent() protection, resource exhaustion without capacity alerting.",{"type":42,"tag":68,"props":157,"children":158},{},[159],{"type":48,"value":160},"Naming conventions: recording rules follow level:metric:operations (e.g. job:http_requests:rate5m); docs_search has the full convention and the rule config schema.",{"type":42,"tag":57,"props":162,"children":164},{"id":163},"suggesting-changes",[165],{"type":48,"value":166},"Suggesting changes",{"type":42,"tag":51,"props":168,"children":169},{},[170],{"type":48,"value":171},"Propose complete rule-group YAML, and sanity-check every expression against live data with query or range_query first. Explain what each rule is for, and recommend validating with promtool and watching rule evaluation health after deployment.",{"items":173,"total":257},[174,187,200,213,226,233,244],{"slug":175,"name":175,"fn":176,"description":177,"org":178,"tags":179,"stars":24,"repoUrl":25,"updatedAt":186},"check-system-health","health-check Prometheus server and targets","Health-check the Prometheus server and its targets. Use for status, uptime, or is-monitoring-OK questions; reviews readiness, active alerts, target health, TSDB stats, and runtime info.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[180,181,182,185],{"name":22,"slug":23,"type":15},{"name":13,"slug":14,"type":15},{"name":183,"slug":184,"type":15},"Operations","operations",{"name":20,"slug":8,"type":15},"2026-07-23T06:05:55.322773",{"slug":188,"name":188,"fn":189,"description":190,"org":191,"tags":192,"stars":24,"repoUrl":25,"updatedAt":199},"find-top-resource-consumers","identify top resource consumers in Prometheus","Find the top CPU, memory, or disk consumers. Use for capacity reviews, noisy-neighbor hunts, and top-N questions about which jobs, pods, or instances use the most resources or drive TSDB growth; builds topk() queries over discovered metrics.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[193,194,195,198],{"name":22,"slug":23,"type":15},{"name":13,"slug":14,"type":15},{"name":196,"slug":197,"type":15},"Performance","performance",{"name":20,"slug":8,"type":15},"2026-07-23T06:05:56.351716",{"slug":201,"name":201,"fn":202,"description":203,"org":204,"tags":205,"stars":24,"repoUrl":25,"updatedAt":212},"investigate-error-rates","investigate elevated Prometheus error rates","Investigate elevated error rates and failing requests. Use when errors or 5xx\u002FgRPC failures spike, SLOs burn, or an error alert fires; quantifies error ratios with rate(), compares to baseline, and isolates affected jobs and instances.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[206,207,210,211],{"name":17,"slug":18,"type":15},{"name":208,"slug":209,"type":15},"Debugging","debugging",{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},"2026-07-23T06:05:51.762762",{"slug":214,"name":214,"fn":215,"description":216,"org":217,"tags":218,"stars":24,"repoUrl":25,"updatedAt":225},"optimize-high-cardinality","reduce high-cardinality Prometheus metrics","Find and reduce high-cardinality metrics and labels. Use when series counts or memory grow, queries slow down, or tsdb_stats shows label explosions; pinpoints offending labels and proposes relabeling, dropping, and aggregation fixes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[219,222,223,224],{"name":220,"slug":221,"type":15},"Metrics","metrics",{"name":22,"slug":23,"type":15},{"name":196,"slug":197,"type":15},{"name":20,"slug":8,"type":15},"2026-07-23T06:05:51.227756",{"slug":4,"name":4,"fn":5,"description":6,"org":227,"tags":228,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[229,230,231,232],{"name":17,"slug":18,"type":15},{"name":22,"slug":23,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":8,"type":15},{"slug":234,"name":234,"fn":235,"description":236,"org":237,"tags":238,"stars":24,"repoUrl":25,"updatedAt":243},"troubleshoot-missing-data","diagnose missing Prometheus metrics and gaps","Diagnose missing metrics, absent series, or scrape gaps. Use when queries unexpectedly return empty, a metric stopped reporting, a target is down or unscraped, or dashboards show no data; walks target health, metadata, and config checks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[239,240,241,242],{"name":208,"slug":209,"type":15},{"name":220,"slug":221,"type":15},{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},"2026-07-23T06:05:52.251401",{"slug":245,"name":245,"fn":246,"description":247,"org":248,"tags":249,"stars":24,"repoUrl":25,"updatedAt":256},"tune-prometheus-config","tune Prometheus configuration and performance","Review and tune Prometheus configuration and performance. Use for scrape interval, retention, storage, relabeling, flag, and capacity questions, or when Prometheus itself is slow or resource-hungry; recommends concrete config changes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[250,253,254,255],{"name":251,"slug":252,"type":15},"Configuration","configuration",{"name":22,"slug":23,"type":15},{"name":196,"slug":197,"type":15},{"name":20,"slug":8,"type":15},"2026-07-23T06:05:50.729808",7,{"items":259,"total":257},[260,267,274,281,288,295,302],{"slug":175,"name":175,"fn":176,"description":177,"org":261,"tags":262,"stars":24,"repoUrl":25,"updatedAt":186},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[263,264,265,266],{"name":22,"slug":23,"type":15},{"name":13,"slug":14,"type":15},{"name":183,"slug":184,"type":15},{"name":20,"slug":8,"type":15},{"slug":188,"name":188,"fn":189,"description":190,"org":268,"tags":269,"stars":24,"repoUrl":25,"updatedAt":199},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[270,271,272,273],{"name":22,"slug":23,"type":15},{"name":13,"slug":14,"type":15},{"name":196,"slug":197,"type":15},{"name":20,"slug":8,"type":15},{"slug":201,"name":201,"fn":202,"description":203,"org":275,"tags":276,"stars":24,"repoUrl":25,"updatedAt":212},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[277,278,279,280],{"name":17,"slug":18,"type":15},{"name":208,"slug":209,"type":15},{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"slug":214,"name":214,"fn":215,"description":216,"org":282,"tags":283,"stars":24,"repoUrl":25,"updatedAt":225},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[284,285,286,287],{"name":220,"slug":221,"type":15},{"name":22,"slug":23,"type":15},{"name":196,"slug":197,"type":15},{"name":20,"slug":8,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":289,"tags":290,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[291,292,293,294],{"name":17,"slug":18,"type":15},{"name":22,"slug":23,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":8,"type":15},{"slug":234,"name":234,"fn":235,"description":236,"org":296,"tags":297,"stars":24,"repoUrl":25,"updatedAt":243},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[298,299,300,301],{"name":208,"slug":209,"type":15},{"name":220,"slug":221,"type":15},{"name":22,"slug":23,"type":15},{"name":20,"slug":8,"type":15},{"slug":245,"name":245,"fn":246,"description":247,"org":303,"tags":304,"stars":24,"repoUrl":25,"updatedAt":256},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[305,306,307,308],{"name":251,"slug":252,"type":15},{"name":22,"slug":23,"type":15},{"name":196,"slug":197,"type":15},{"name":20,"slug":8,"type":15}]