{"id":13820039,"url":"https://github.com/cbrgm/promcheck","last_synced_at":"2025-10-12T10:47:40.395Z","repository":{"id":38297554,"uuid":"469509749","full_name":"cbrgm/promcheck","owner":"cbrgm","description":"A tool and exporter to identify faulty Prometheus rules","archived":false,"fork":false,"pushed_at":"2025-10-07T05:07:21.000Z","size":1005,"stargazers_count":93,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T07:09:00.890Z","etag":null,"topics":["alert","alerting","exporter","ilovetags","metrics","monitoring","prometheus","recording","rules"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cbrgm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"chrisbargmann"}},"created_at":"2022-03-13T22:22:11.000Z","updated_at":"2025-10-07T05:07:24.000Z","dependencies_parsed_at":"2023-11-08T13:39:55.432Z","dependency_job_id":"e622bd6c-2f0d-4494-a1ce-78deaa6b681e","html_url":"https://github.com/cbrgm/promcheck","commit_stats":{"total_commits":177,"total_committers":5,"mean_commits":35.4,"dds":0.6440677966101696,"last_synced_commit":"25ff255df5a5b72a751e88c9cf60a85b3f59c014"},"previous_names":[],"tags_count":53,"template":false,"template_full_name":null,"purl":"pkg:github/cbrgm/promcheck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbrgm%2Fpromcheck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbrgm%2Fpromcheck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbrgm%2Fpromcheck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbrgm%2Fpromcheck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cbrgm","download_url":"https://codeload.github.com/cbrgm/promcheck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbrgm%2Fpromcheck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279011062,"owners_count":26084865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alert","alerting","exporter","ilovetags","metrics","monitoring","prometheus","recording","rules"],"created_at":"2024-08-04T08:00:57.464Z","updated_at":"2025-10-12T10:47:40.366Z","avatar_url":"https://github.com/cbrgm.png","language":"Go","funding_links":["https://ko-fi.com/chrisbargmann"],"categories":["monitoring","Go"],"sub_categories":[],"readme":"# promcheck ✔️\n\n\u003cimg\n  src=\".img/logo.png\"\n  width=\"150px\"\n  align=\"right\"\n/\u003e\n\n**A tool to identify faulty [Prometheus](https://prometheus.io/) rules**\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/cbrgm/promcheck)](https://goreportcard.com/report/github.com/cbrgm/promcheck)\n[![release](https://img.shields.io/github/release-pre/cbrgm/promcheck.svg)](https://github.com/cbrgm/promcheck/releases)\n[![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/cbrgm/promcheck/blob/master/LICENSE)\n![GitHub stars](https://img.shields.io/github/stars/cbrgm/promcheck.svg?label=github%20stars)\n\n## About\n\n**`promcheck` enables you to identify recording or alerting rules using missing metrics or wrong label matchers** (e.g.\nbecause of exporter changes or human-errors).\n\n`promcheck` validates Prometheus [vector selectors](https://prometheus.io/docs/prometheus/latest/querying/basics/) and checks\nif they return a result value or not. As a basis for validation, `promcheck` uses Prometheus rule files, but it can also\nquery rules directly from a running Prometheus instance. It scans the PromQL expression of\neach [recording](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/)\nand [alerting](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/) rule, takes the individual\nreferenced selectors out of it and probes them against a remote Prometheus instance.\n\n\n\u003cdiv align=\"center\"\u003e\n\u003cbr\u003e\n\u003cimg src=\"https://github.com/cbrgm/promcheck/blob/main/.img/demo.gif\" width=\"85%\"\u003e\n\u003cbr\u003e\n\u003c/div\u003e\n\n## Overview\n* [About](#about)\n* [Installation](#installation)\n* [Basic Usage](#basic-usage)\n    + [Use-Cases](#use-cases)\n    + [Validate rules from a running Prometheus instance](#validate-rules-from-a-running-prometheus-instance)\n    + [Validate rules from existing rule files](#validate-rules-from-existing-rule-files)\n    + [Validate rules from inline PromQL queries](#validate-rules-from-inline-promql-queries)\n    + [Prometheus Exporter](#prometheus-exporter)\n* [Configuration](#configuration)\n    + [Usage Information](#usage-information)\n    + [CI/CD Usage](#cicd-usage)\n    + [Output Formats](#output-formats)\n* [Container Usage](#container-usage)\n* [Kubernetes Deployment](#kubernetes-deployment)\n* [Metrics](#metrics)\n* [Examples](#examples)\n    - [Validating multiple rule groups](#basic-example-validating-multiple-rule-groups)\n* [Contributing \u0026 License](#contributing---license)\n\n## Installation\n\n`promcheck` is available on Linux, OSX and Windows platforms. Binaries for Linux, Windows and Mac are available as\ntarballs in the [release](https://github.com/cbrgm/promcheck/releases) page.\n\nYou may also build `promcheck` from source (using Go 1.17+). In order to build `promcheck` from source you must:\n\n* Clone this repository\n* Run `make build`\n\n## Basic Usage\n\n`promcheck` can be used in three different modes:\n\n* Validate rules passed to `promcheck` as parameters (`--check.query`)\n* Validate rules from existing rule files (`--check.files`)\n* Validate rules from a running Prometheus instance (and export results in various formats)\n\n`promcheck` can also be executed as a Prometheus exporter to check a set of rules on a regular basis and export results as scrapeable Prometheus metrics via http.\n\n### Use-Cases\n\nWhat can you do with this? Possible **use-cases** might be:\n\n* 🛠 Run `promcheck` manually as a cli tool to check rules.\n* 🤖 Add `promcheck` to your CI/CD automation pipeline to run integration tests on your rules.\n* 📃 Run `promcheck` as an exporter, scrape its metrics and alert in case selectors do not return results anymore.\n\n### Validate rules from a running Prometheus instance\n\n```bash\npromcheck --prometheus.url=\"http://0.0.0.0:9090\"\n```\n\nArgument Reference:\n\n* `--prometheus.url` - The Prometheus instance to probe selectors against\n\n### Validate rules from existing rule files\n\n```bash\npromcheck --prometheus.url=\"http://0.0.0.0:9090\" --check.file=rules.yaml\n```\n\nArgument Reference:\n\n* `--prometheus.url` - The Prometheus instance to probe selectors against\n* `--check.file` - The Prometheus rule file(s) to validate\n\n\u003cdetails\u003e\n  \u003csummary\u003eRule group files can be passed in various ways. Click to expand!\u003c/summary\u003e\n\n```bash\n# validate a rules file `rules.yaml`\npromcheck --prometheus.url=\"http://0.0.0.0:9090\" \\\n          --check.file=rules.yaml\n\n# validate all *.yaml files in directory ./config\npromcheck --prometheus.url=\"http://0.0.0.0:9090\" \\\n          --check.file='./config/*.yaml'\n```\n\n\u003c/details\u003e\n\n### Validate rules from inline PromQL queries\n\n```bash\npromcheck --prometheus.url=\"http://0.0.0.0:9090\" --check.query='up{job=\"alertmanager-main\",namespace=\"monitoring\"}'\n```\n\nArgument Reference:\n\n* `--prometheus.url` - The Prometheus instance to probe selectors against\n* `--check.query` - Inline PromQL expression (can be passed multiple times)\n\n### Prometheus Exporter\n\n```bash\n# example: run promcheck as a prometheus exporter.\n# promcheck will validate all rules from the remote instance.\npromcheck --prometheus.url=\"http://0.0.0.0:9090\" \\\n          --exporter.enabled=true\n\n# example: bind on port 9093, run promcheck every 5 min (300 sec.)\npromcheck --prometheus.url=\"http://0.0.0.0:9090\" \\\n          --exporter.enabled=true \\\n          --exporter.interval=300 \\\n          --exporter.addr=0.0.0.0:9093\n\n# example: run promcheck as a prometheus exporter.\n# promcheck will validate all rules from the rules.yaml file\npromcheck --prometheus.url=\"http://0.0.0.0:9090\" \\\n          --exporter.enabled=true \\\n          --exporter.interval=300 \\\n          --exporter.addr=0.0.0.0:9093 \\\n          --check.file=rules.yaml\n```\n\nArgument Reference:\n\n* `--prometheus.url` - The Prometheus instance to probe selectors against\n* `--check.file` - The Prometheus rule file(s) to validate.\n* `--exporter.enabled` - Run `promcheck` as a Prometheus exporter\n* `--exporter.addr` - The exporter's http address\n* `--exporter.interval` - The interval in minutes to run `promcheck` and update metrics\n\n## Configuration\n\nFor a full list of flags, please also use `promcheck --help`.\n\n```bash\nFlags:\n  -h, --help                                               Show context-sensitive help.\n      --prometheus.url=\"http://0.0.0.0:9090\"               The Prometheus base url\n      --prometheus.basic-auth-user=\"\"                      Basic auth username\n      --prometheus.basic-auth-pass=\"\"                      Basic auth password\n      --check.ignore-selector=CHECK.IGNORE-SELECTOR,...    Regexp of selectors to ignore\n      --check.ignore-group=CHECK.IGNORE-GROUP,...          Regexp of rule groups to ignore\n      --check.delay=0.1                                    Delay in seconds between probe requests\n      --check.file=STRING                                  The rule files to check.\n      --check.query=CHECK.QUERY,...                        Inline PromQL expression to check\n      --output.format=\"graph\"                              The output format to use\n      --output.no-color                                    Toggle colored output\n      --exporter.enabled                                   Run promcheck as a prometheus exporter\n      --exporter.addr=\"0.0.0.0:9093\"                       The address the http server is running at\n      --exporter.interval=300                              Delay in seconds between promcheck runs\n      --metrics.profile                                    Enable pprof profiling\n      --metrics.runtime                                    Enable runtime metrics\n      --metrics.prefix=\"\"                                  Set metrics prefix path\n      --log.json                                           Tell promcheck to log json and not key value pairs\n      --log.level=\"info\"                                   The log level to use for filtering logs\n      --strict                                             Tell promcheck to exit with an error code on expressions without results\n```\n\n`promcheck` uses 256 colors terminal mode. On 'nix OS system make sure the `TERM` environment variable is set.\n\n```bash\nexport TERM=xterm-256color\n```\n\n### Usage Information\n\nKeep in mind that `promcheck` may also contain **false positives**, since there may be vector selectors in rules that\nintentionally do not return a result value.\n\n`promcheck` does a single HTTP request per vector selector to be probed against the remote Prometheus instance. With many rules to validate, execution time can take longer and lead to many HTTP requests. The interval between probes can be changed with the `--check.delay` flag, which results in fewer requests but increases the runtime of the tool.\n\n### CI/CD Usage\n\n`promcheck` has a flag `--strict`, which causes `promcheck` to terminate with error code `1` after a successful run if expressions without a result value were found.\n\nTherefore, `--strict` should be used, depending on the use case whether `promcheck` should fail the report step during a CI/CD workflow in case of expressions without a result, or whether the step should run successfully regardless of whether expressions have results or not.\n\n### Output formats\n\nRight now, the following output formats are supported:\n\n* `--output.format=graph` - Text format, colored or non-colored (`--output.no-color`) (Default)\n* `--output.format=json` - JSON format\n* `--output.format=yaml` - YAML format\n\nThere might be more formats in near future. Feel free to contribute!\n\n## Container Usage\n\n`promcheck` can also be executed from within a container. The latest container image of `promcheck` is hosted\non [ghcr.io](https://github.com/cbrgm/promcheck).\n\nTo run `promcheck` from within a container (assuming that there is a rule file named `rules.yaml` in the current directory), run:\n\n```bash\ndocker run -v $(pwd):/tmp --rm ghcr.io/cbrgm/promcheck:latest --prometheus.url='http://0.0.0.0:9090' --check.file=\"/tmp/rules.yaml\"\n```\n\nTo run `promcheck` from within a container as a Prometheus exporter, run:\n\n```bash\ndocker run --rm -p 9093:9093 ghcr.io/cbrgm/promcheck:latest --prometheus.url='http://0.0.0.0:9090' --exporter.enabled\n```\n\n## Kubernetes Deployment\n\n`promcheck` can be executed as a Prometheus exporter to validate a set of rules on a regular basis. Please refer to the [kubernetes.yaml](https://github.com/cbrgm/promcheck/blob/main/kubernetes.yaml) file for a basic deployment example.\n\n## Metrics\n\n* `promcheck_validation_rule_groups_total` - (Gauge) Total number of evaluated rule groups.\n* `promcheck_validation_rules_total` - (Gauge) Total number of evaluated rules.\n* `promcheck_validation_selectors_total` - (Gauge) Total number of evaluated selectors. Label selectors:\n  * `file` - The rules file\n  * `group` - The rule group name\n  * `rule` - The rule name\n  * `status` - The status `failed` or `success`\n\n**Here are some basic examples**:\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eExample: PromQL queries\u003c/b\u003e Click to expand!\u003c/summary\u003e\n\nTotal amount of selectors without result:\n```\nsum(promcheck_validation_selectors_total{status=\"failed\"})\n```\n\nTotal amount of selectors without result of rule `KubePodCrashLooping`:\n\n```\npromcheck_validation_selectors_total{rule=\"KubePodCrashLooping\", status=\"failed\"}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eExample: Alert on selectors without a result\u003c/b\u003e Click to expand!\u003c/summary\u003e\n\n```yaml\ngroups:\n  - name: example\n    rules:\n      # alert definition\n      - alert: HighRequestLatency\n        expr: job:request_latency_seconds:mean5m{job=\"myjob\"} \u003e 0.5\n        for: 10m\n        labels:\n          severity: page\n        annotations:\n          summary: High request latency\n      # alert in case HighRequestLatency selectors are not returning results\n      - alert: HighRequestLatencyMissingMetrics\n          expr: promcheck_validation_selectors_total{rule=\"HighRequestLatency\", status=\"failed\"} \u003e 0\n          for: 1m\n          labels:\n            severity: warning\n          annotations:\n            summary: HighRequestLatency uses selectors without result values.\n```\n\n\u003c/details\u003e\n\n## Examples\n\nPlease refer below for some basic usage examples demonstrating what `promcheck` can do for you!\n\n#### Basic Example validating multiple rule groups\n\n**Input:**\n\u003cdetails\u003e\n  \u003csummary\u003erules.yaml (Click to expand!)\u003c/summary\u003e\n\n```yaml\n\"groups\":\n  - \"name\": \"kubernetes-apps-demo-group\"\n    \"rules\":\n      - \"alert\": \"KubePodCrashLooping\"\n        \"annotations\":\n          \"description\": \"Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container }}) is in waiting state (reason: \\\"CrashLoopBackOff\\\").\"\n          \"runbook_url\": \"https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping\"\n          \"summary\": \"Pod is crash looping.\"\n        \"expr\": |\n          max_over_time(kube_pod_container_status_waiting_reason{reason=\"CrashLoopBackOff\", job=\"kube-state-metrics\"}[5m]) \u003e= 1\n        \"for\": \"15m\"\n        \"labels\":\n          \"severity\": \"warning\"\n      - \"alert\": \"KubePodNotReady\"\n        \"annotations\":\n          \"description\": \"Pod {{ $labels.namespace }}/{{ $labels.pod }} has been in a non-ready state for longer than 15 minutes.\"\n          \"runbook_url\": \"https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodnotready\"\n          \"summary\": \"Pod has been in a non-ready state for more than 15 minutes.\"\n        \"expr\": |\n          sum by (namespace, pod) (\n            max by(namespace, pod) (\n              kube_pod_status_phase{job=\"kube-state-metrics\", phase=~\"Pending|Unknown\"}\n            ) * on(namespace, pod) group_left(owner_kind) topk by(namespace, pod) (\n              1, max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!=\"Job\"})\n            )\n          ) \u003e 0\n        \"for\": \"15m\"\n        \"labels\":\n          \"severity\": \"warning\"\n  - \"name\": \"kubernetes-system-scheduler-demo-group\"\n    \"rules\":\n      - \"alert\": \"KubeSchedulerDown\"\n        \"annotations\":\n          \"description\": \"KubeScheduler has disappeared from Prometheus target discovery.\"\n          \"runbook_url\": \"https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeschedulerdown\"\n          \"summary\": \"Target disappeared from Prometheus target discovery.\"\n        \"expr\": |\n          absent(up{job=\"kube-scheduler\"} == 1)\n        \"for\": \"15m\"\n        \"labels\":\n          \"severity\": \"critical\"\n  - \"name\": \"kubernetes-system-controller-manager-demo-group\"\n    \"rules\":\n      - \"alert\": \"KubeControllerManagerDown\"\n        \"annotations\":\n          \"description\": \"KubeControllerManager has disappeared from Prometheus target discovery.\"\n          \"runbook_url\": \"https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecontrollermanagerdown\"\n          \"summary\": \"Target disappeared from Prometheus target discovery.\"\n        \"expr\": |\n          absent(up{job=\"kube-controller-manager\"} == 1)\n        \"for\": \"15m\"\n        \"labels\":\n          \"severity\": \"critical\"\n\n```\n\n\u003c/details\u003e\n\n**Command**:\n\n```bash\n➜ ./promcheck --check.file 'rules.yaml' --prometheus.url http://0.0.0.0:9090\n```\n\n* Prometheus instance running locally on `http://0.0.0.0:9090`\n\n**Output**:\n\n```\n.\n└── [file] examples/rules_multiple_groups.yaml\n    ├── [group] kubernetes-apps-demo-group\n    │   ├── [0/1] KubePodCrashLooping\n    │   │   └── [✖] kube_pod_container_status_waiting_reason{job=\"kube-state-metrics\",reason=\"CrashLoopBackOff\"}\n    │   └── [2/2] KubePodNotReady\n    │       ├── [✔] kube_pod_status_phase{job=\"kube-state-metrics\",phase=~\"Pending|Unknown\"}\n    │       └── [✔] kube_pod_owner{owner_kind!=\"Job\"}\n    ├── [group] kubernetes-system-scheduler-demo-group\n    │   └── [1/1] KubeSchedulerDown\n    │       └── [✔] up{job=\"kube-scheduler\"}\n    └── [group] kubernetes-system-controller-manager-demo-group\n        └── [1/1] KubeControllerManagerDown\n            └── [✔] up{job=\"kube-controller-manager\"}\n\nRules validated total: 4\nSelectors total: 5, Results found: 4, No Results found 1 (Failed/Total: 20.00%)\n```\n\n**Command**:\n\nIgnore rule group `kubernetes-system-controller-manager-demo-group`\n\n```bash\n➜ ./promcheck --check.file 'rules.yaml' \\\n              --check.ignore-group 'kubernetes-system-controller-manager-demo-group' \\\n              --prometheus.url http://0.0.0.0:9090\n```\n\n* Prometheus instance running locally on `http://0.0.0.0:9090`\n\n**Output**:\n\n```\n.\n└── [file] examples/rules_multiple_groups.yaml\n    ├── [group] kubernetes-apps-demo-group\n    │   ├── [2/2] KubePodNotReady\n    │   │   ├── [✔] kube_pod_status_phase{job=\"kube-state-metrics\",phase=~\"Pending|Unknown\"}\n    │   │   └── [✔] kube_pod_owner{owner_kind!=\"Job\"}\n    │   └── [0/1] KubePodCrashLooping\n    │       └── [✖] kube_pod_container_status_waiting_reason{job=\"kube-state-metrics\",reason=\"CrashLoopBackOff\"}\n    └── [group] kubernetes-system-scheduler-demo-group\n        └── [1/1] KubeSchedulerDown\n            └── [✔] up{job=\"kube-scheduler\"}\n\nRules validated total: 4\nSelectors total: 4, Results found: 3, No Results found 1 (Failed/Total: 25.00%)\n```\n\n**Command**:\n\nOutput json:\n\n```bash\n➜ ./promcheck --check.file 'rules.yaml' \\\n              --check.ignore-group 'kubernetes-system-controller-manager-demo-group' \\\n              --prometheus.url http://0.0.0.0:9090\n              --output.format json\n```\n\n**Output**:\n\n```json\n{\n  \"promcheck\": {\n    \"results\": [\n      {\n        \"file\": \"examples/rules_multiple_groups.yaml\",\n        \"group\": \"kubernetes-apps-demo-group\",\n        \"name\": \"KubePodCrashLooping\",\n        \"expression\": \"max_over_time(kube_pod_container_status_waiting_reason{reason=\\\"CrashLoopBackOff\\\", job=\\\"kube-state-metrics\\\"}[5m]) \\u003e= 1\\n\",\n        \"no_results\": [\n          \"kube_pod_container_status_waiting_reason{job=\\\"kube-state-metrics\\\",reason=\\\"CrashLoopBackOff\\\"}\"\n        ],\n        \"results\": []\n      },\n      {\n        \"file\": \"examples/rules_multiple_groups.yaml\",\n        \"group\": \"kubernetes-apps-demo-group\",\n        \"name\": \"KubePodNotReady\",\n        \"expression\": \"sum by (namespace, pod) (\\n  max by(namespace, pod) (\\n    kube_pod_status_phase{job=\\\"kube-state-metrics\\\", phase=~\\\"Pending|Unknown\\\"}\\n  ) * on(namespace, pod) group_left(owner_kind) topk by(namespace, pod) (\\n    1, max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!=\\\"Job\\\"})\\n  )\\n) \\u003e 0\\n\",\n        \"no_results\": [],\n        \"results\": [\n          \"kube_pod_status_phase{job=\\\"kube-state-metrics\\\",phase=~\\\"Pending|Unknown\\\"}\",\n          \"kube_pod_owner{owner_kind!=\\\"Job\\\"}\"\n        ]\n      },\n      {\n        \"file\": \"examples/rules_multiple_groups.yaml\",\n        \"group\": \"kubernetes-system-scheduler-demo-group\",\n        \"name\": \"KubeSchedulerDown\",\n        \"expression\": \"absent(up{job=\\\"kube-scheduler\\\"} == 1)\\n\",\n        \"no_results\": [],\n        \"results\": [\n          \"up{job=\\\"kube-scheduler\\\"}\"\n        ]\n      }\n    ],\n    \"groups_total\": 2,\n    \"rules_warnings\": 3,\n    \"rules_total\": 4,\n    \"selectors_success_total\": 3,\n    \"selectors_failed_total\": 1,\n    \"ratio_failed_total\": 25.00\n  }\n}\n```\n\n## Contributing \u0026 License\n\nWe welcome and value your contributions to this project! 👍 If you're interested in making improvements or adding features, please refer to our [Contributing Guide](https://github.com/cbrgm/promcheck/blob/main/CONTRIBUTING.md). This guide provides comprehensive instructions on how to submit changes, set up your development environment, and more.\n\nPlease note that this project is developed in my spare time and is available for free 🕒💻. As an open-source initiative, it is governed by the [Apache 2.0 License](https://github.com/cbrgm/promcheck/blob/main/LICENSE). This license outlines your rights and obligations when using, modifying, and distributing this software.\n\nYour involvement, whether it's through code contributions, suggestions, or feedback, is crucial for the ongoing improvement and success of this project. Together, we can ensure it remains a useful and well-maintained resource for everyone 🌍.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcbrgm%2Fpromcheck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcbrgm%2Fpromcheck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcbrgm%2Fpromcheck/lists"}