{"id":13774807,"url":"https://github.com/flanksource/canary-checker","last_synced_at":"2026-05-04T08:04:25.159Z","repository":{"id":37587448,"uuid":"227435368","full_name":"flanksource/canary-checker","owner":"flanksource","description":"Kubernetes Native Health Check Platform","archived":false,"fork":false,"pushed_at":"2026-04-15T05:59:11.000Z","size":13960,"stargazers_count":324,"open_issues_count":174,"forks_count":45,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-04-15T07:33:27.775Z","etag":null,"topics":["canary","continuous-testing","gitops","kubernetes","kubernetes-operator","monitoring","prometheus","prometheus-exporter","synthethic-testing"],"latest_commit_sha":null,"homepage":"https://canarychecker.io","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/flanksource.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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}},"created_at":"2019-12-11T18:40:30.000Z","updated_at":"2026-04-14T19:21:47.000Z","dependencies_parsed_at":"2023-10-16T17:10:15.604Z","dependency_job_id":"a107ca6c-649c-4ddb-b056-2f3b8f3a48aa","html_url":"https://github.com/flanksource/canary-checker","commit_stats":{"total_commits":1973,"total_committers":37,"mean_commits":53.32432432432432,"dds":0.7252914343639127,"last_synced_commit":"b8d3d3075a5957a416df2ede5735f74691e6e4d5"},"previous_names":[],"tags_count":1430,"template":false,"template_full_name":null,"purl":"pkg:github/flanksource/canary-checker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flanksource%2Fcanary-checker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flanksource%2Fcanary-checker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flanksource%2Fcanary-checker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flanksource%2Fcanary-checker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flanksource","download_url":"https://codeload.github.com/flanksource/canary-checker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flanksource%2Fcanary-checker/sbom","scorecard":{"id":402539,"data":{"date":"2025-08-18T09:14:12Z","repo":{"name":"github.com/flanksource/canary-checker","commit":"eb73ef6518c38f2d2e7a7fb1be532a97ace41995"},"scorecard":{"version":"v5.0.0","commit":"ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4"},"score":6.2,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disable on branch 'master'","Warn: 'stale review dismissal' is disable on branch 'master'","Warn: branch 'master' does not require approvers","Warn: codeowners review is not required on branch 'master'","Warn: 'last push approval' is disable on branch 'master'","Info: status check found to merge onto on branch 'master'","Info: PRs are required in order to make changes on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"29 out of 29 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: Passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"Found 2/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#code-review"}},{"name":"Contributors","score":10,"reason":"project has 8 contributing companies or organizations","details":["Info: flanksource contributor org/company found, osdc contributor org/company found, NeptuneFramework contributor org/company found, kiegroup contributor org/company found, jboss-container-images contributor org/company found, www.flanksource.com contributor org/company found, bitcastza contributor org/company found, activesphere contributor org/company found, "],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#maintained"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/helm-test.yml:14"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":5,"reason":"dependency not pinned by hash detected -- score normalized to 5","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/aws-exec.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/aws-exec.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/e2e-operator.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/e2e-operator.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/e2e-operator.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/e2e-operator.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gotest.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/gotest.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/helm-test.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/helm-test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/helm-test.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/helm-test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:127: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:135: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:140: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:179: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:188: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:196: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:201: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:240: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:249: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:257: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:262: update your workflow using https://app.stepsecurity.io/secureworkflow/flanksource/canary-checker/release.yml/master?enable=pin","Warn: containerImage not pinned by hash: build/full/Dockerfile:18: pin your Docker image by updating flanksource/base-image-canary-checker:0.5.18 to flanksource/base-image-canary-checker:0.5.18@sha256:034e86687f230c4c8056aa6e1924ba3eac698de0968edebbebc56844a18cf61c","Warn: containerImage not pinned by hash: build/minimal/Dockerfile:18: pin your Docker image by updating flanksource/base-image:0.5.18 to flanksource/base-image:0.5.18@sha256:df7881a6a3b944dca86e0b0485c355b2103ea62e1d218a2476bbdf1240ea8908","Warn: downloadThenRun not pinned by hash: build/slim/Dockerfile:43-46","Warn: downloadThenRun not pinned by hash: .github/workflows/release.yml:296","Warn: downloadThenRun not pinned by hash: .github/workflows/release.yml:298","Warn: downloadThenRun not pinned by hash: .github/workflows/release.yml:300","Warn: goCommand not pinned by hash: .github/workflows/test.yml:61","Info:  32 out of  36 GitHub-owned GitHubAction dependencies pinned","Info:  17 out of  33 third-party GitHubAction dependencies pinned","Info:   0 out of   4 downloadThenRun dependencies pinned","Info:   0 out of   1 goCommand dependencies pinned","Info:   5 out of   7 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.1.2-beta.114 not signed: https://api.github.com/repos/flanksource/canary-checker/releases/240164811","Warn: release artifact v1.1.2-beta.113 not signed: https://api.github.com/repos/flanksource/canary-checker/releases/238902036","Warn: release artifact v1.1.2-beta.112 not signed: https://api.github.com/repos/flanksource/canary-checker/releases/238508399","Warn: release artifact v1.1.2-beta.111 not signed: https://api.github.com/repos/flanksource/canary-checker/releases/237859888","Warn: release artifact v1.1.2-beta.114 does not have provenance: https://api.github.com/repos/flanksource/canary-checker/releases/240164811","Warn: release artifact v1.1.2-beta.113 does not have provenance: https://api.github.com/repos/flanksource/canary-checker/releases/238902036","Warn: release artifact v1.1.2-beta.112 does not have provenance: https://api.github.com/repos/flanksource/canary-checker/releases/238508399","Warn: release artifact v1.1.2-beta.111 does not have provenance: https://api.github.com/repos/flanksource/canary-checker/releases/237859888"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:32","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:33","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/lint.yml:14","Info: jobLevel 'contents' permission set to 'read': .github/workflows/lint.yml:13","Info: topLevel 'contents' permission set to 'read': .github/workflows/aws-exec.yml:8","Info: topLevel permissions set to 'read-all': .github/workflows/build.yml:4","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:24","Info: topLevel 'contents' permission set to 'read': .github/workflows/e2e-operator.yml:22","Info: topLevel 'contents' permission set to 'read': .github/workflows/gotest.yml:4","Warn: topLevel 'checks' permission set to 'write': .github/workflows/gotest.yml:5","Info: topLevel 'contents' permission set to 'read': .github/workflows/helm-test.yml:11","Info: topLevel permissions set to 'read-all': .github/workflows/lint.yml:9","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/test.yml:11","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646","Warn: Project is vulnerable to: GHSA-2x5j-vhc8-9cwm / GO-2025-3754","Warn: Project is vulnerable to: GHSA-mh63-6h87-95cp / GO-2025-3553"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T20:24:06.141Z","repository_id":37587448,"created_at":"2025-08-18T20:24:06.141Z","updated_at":"2025-08-18T20:24:06.141Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32166661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T02:19:40.750Z","status":"ssl_error","status_checked_at":"2026-04-23T02:17:55.737Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["canary","continuous-testing","gitops","kubernetes","kubernetes-operator","monitoring","prometheus","prometheus-exporter","synthethic-testing"],"created_at":"2024-08-03T17:01:30.562Z","updated_at":"2026-04-23T05:02:22.273Z","avatar_url":"https://github.com/flanksource.png","language":"Go","funding_links":[],"categories":["Tools and Libraries","Go"],"sub_categories":["Monitoring, Alerts, and Visualization"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource srcset=\"https://canarychecker.io/img/canary-checker-white.svg\" media=\"(prefers-color-scheme: dark)\"\u003e\n    \u003cimg src=\"https://canarychecker.io/img/canary-checker.svg\"\u003e\n  \u003c/picture\u003e\n\n  \u003cp\u003eKubernetes Native Health Check Platform\u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/flanksource/canary-checker/actions\"\u003e\u003cimg src=\"https://github.com/flanksource/canary-checker/workflows/Test/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/github.com/flanksource/canary-checker\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/flanksource/canary-checker\"\u003e\u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/flanksource/canary-checker.svg?style=flat-square\"/\u003e\n    \u003ca href=\"https://canarychecker.io\"\u003e \u003cimg src=\"https://img.shields.io/badge/☰-Docs-lightgrey.svg\"/\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\nCanary checker is a kubernetes-native platform for monitoring health across application and infrastructure using both passive and active (synthetic) mechanisms.\n\n## Features\n\n* **Batteries Included** - 35+ built-in check types\n* **Kubernetes Native** - Health checks (or canaries) are CRD's that reflect health via the `status` field, making them compatible with GitOps, [Flux Health Checks](https://fluxcd.io/flux/components/kustomize/kustomization/#health-checks), Argo, Helm, etc..\n* **Secret Management** - Leverage K8S secrets and configmaps for authentication and connection details\n* **Prometheus** - Prometheus compatible metrics are exposed at `/metrics`.  A Grafana Dashboard is also available.\n* **Dependency Free** - Runs an embedded postgres instance by default,  can also be configured to use an external database.\n* **JUnit Export (CI/CD)**  - Export health check results to JUnit format for integration into CI/CD pipelines\n* **JUnit Import (k6/newman/puppeter/etc)** - Use any container that creates JUnit test results\n* **Scriptable** - Go templates, Javascript and [CEL](https://canarychecker.io/scripting/cel) can be used to:\n  * Evaluate whether a check is passing and severity to use when failing\n  * Extract a user friendly error message\n  * Transform and filter check responses into individual check results\n  * Extract custom metrics\n* **Multi-Modal** - While designed as a Kubernetes Operator, canary checker can also run as a CLI and a server without K8s\n\n## Getting Started\n\n1. Install canary checker with Helm\n\n```shell\nhelm repo add flanksource https://flanksource.github.io/charts\nhelm repo update\n\nhelm install \\\n  canary-checker \\\n  flanksource/canary-checker \\\n -n canary-checker \\\n --create-namespace\n --wait\n  ```\n\n2. Create a new check\n\n```yaml title=\"canary.yaml\"\napiVersion: canaries.flanksource.com/v1\nkind: Canary\nmetadata:\n  name: http-check\nspec:\n  interval: 30\n  http:\n    - name: basic-check\n      url: https://httpbin.flanksource.com/status/200\n    - name: failing-check\n      url: https://httpbin.flanksource.com/status/500\n```\n\n2a. Run the check locally (Optional)\n\n```shell\nwget  https://github.com/flanksource/canary-checker/releases/latest/download/canary-checker_linux_amd64 \\\n-O canary-checker \u0026\u0026  chmod +x canary-checker\n./canary-checker run canary.yaml\n```\n\n[![asciicast](https://asciinema.org/a/cYS6hlmX516JQeECHH7za3IDG.svg)](https://asciinema.org/a/cYS6hlmX516JQeECHH7za3IDG)\n\n3. Apply the check\n\n```shell\nkubectl apply -f canary.yaml\n```\n\n4. Check the health status\n\n```shell\nkubectl get canary\n```\n\n``` title=\"sample output\"\nNAME               INTERVAL   STATUS   LAST CHECK   UPTIME 1H        LATENCY 1H   LAST TRANSITIONED\nhttp-check.        30         Passed   13s          18/18 (100.0%)   480ms        13s\n```\n\nSee [fixtures](https://github.com/flanksource/canary-checker/tree/master/fixtures) for more examples and [docs](https://canarychecker.io/getting-started) for more comprehensive documentation.\n\n## Use Cases\n\n### Synthetic Testing\n\nRun simple HTTP/DNS/ICMP probes or more advanced full test suites using JMeter, K6, Playright, Postman.\n\n```yaml\n# Run a container that executes a playwright test, and then collect the\n# JUnit formatted test results from the /tmp folder\napiVersion: canaries.flanksource.com/v1\nkind: Canary\nmetadata:\n  name: playwright-junit\nspec:\n  interval: 120\n  junit:\n    - testResults: \"/tmp/\"\n      name: playwright-junit\n      spec:\n        containers:\n          - name: playwright\n            image: ghcr.io/flanksource/canary-playwright:latest\n```\n\n### Infrastructure Testing\n\nVerify that infrastructure is fully operational by [deploying new pods](https://canarychecker.io/reference/pod), spinning up new EC2 instances and pushing/pulling from docker and helm repositories.\n\n```yaml\n# Schedule a new pod with an ingress and then time how long it takes to schedule, be ready, respond to an http request and finally be cleaned up.\napiVersion: canaries.flanksource.com/v1\nkind: Canary\nmetadata:\n  name: pod-check\nspec:\n  interval: 30\n  pod:\n    - name: golang\n      spec: |\n        apiVersion: v1\n        kind: Pod\n        metadata:\n          name: hello-world-golang\n          namespace: default\n          labels:\n            app: hello-world-golang\n        spec:\n          containers:\n            - name: hello\n              image: quay.io/toni0/hello-webserver-golang:latest\n      port: 8080\n      path: /foo/bar\n      scheduleTimeout: 20000\n      readyTimeout: 10000\n      httpTimeout: 7000\n      deleteTimeout: 12000\n      ingressTimeout: 10000\n      deadline: 60000\n      httpRetryInterval: 200\n      expectedContent: bar\n      expectedHttpStatuses: [200, 201, 202]\n```\n\n### Backup Checks / Batch File Monitoring\n\nCheck that batch file processes are functioning correctly by checking the age and size of files in local file systems, SFTP, SMB, S3 and GCS.\n\n```yaml\n# Checks that a recent DB backup has been uploaded\napiVersion: canaries.flanksource.com/v1\nkind: Canary\nmetadata:\n  name: folder-check\nspec:\n  schedule: 0 22 * * *\n  folder:\n    - path: s3://database-backups/prod\n      name: prod-backup\n      maxAge: 1d\n      minSize: 10gb\n```\n\n### Alert Aggregation\n\nAggregate alerts and recommendations from Prometheus, AWS Cloudwatch, Dynatrace, etc.\n\n```yaml\napiVersion: canaries.flanksource.com/v1\nkind: Canary\nmetadata:\n  name: alertmanager-check\nspec:\n  schedule: \"*/5 * * * *\"\n  alertmanager:\n    - url: alertmanager.monitoring.svc\n      alerts:\n        - .*\n      ignore:\n        - KubeScheduler.*\n        - Watchdog\n      transform:\n        # for each alert, transform it into a new check\n        javascript: |\n          var out = _.map(results, function(r) {\n            return {\n              name: r.name,\n              labels: r.labels,\n              icon: 'alert',\n              message: r.message,\n              description: r.message,\n            }\n          })\n          JSON.stringify(out);\n```\n\n### Prometheus Exporter Replacement\n\nExport [custom metrics](https://canarychecker.io/concepts/metrics-exporter) from the result of any check, making it possible to replace various other promethus exporters that collect metrics via HTTP, SQL, etc..\n\n```yaml\napiVersion: canaries.flanksource.com/v1\nkind: Canary\nmetadata:\n  name: exchange-rates\nspec:\n  schedule: \"every 1 @hour\"\n  http:\n    - name: exchange-rates\n      url: https://api.frankfurter.app/latest?from=USD\u0026to=GBP,EUR,ILS\n      metrics:\n        - name: exchange_rate\n          type: gauge\n          value: result.json.rates.GBP\n          labels:\n            - name: \"from\"\n              value: \"USD\"\n            - name: to\n              value: GBP\n```\n\n## Platform Ready\n\nCanary checker is ideal for building platforms, developers can include health checks for their applications in whatever tooling they prefer, with secret management that uses native Kubernetes constructs.\n\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name:  basic-auth\nstringData:\n   user: john\n   pass: doe\n---\napiVersion: canaries.flanksource.com/v1\nkind: Canary\nmetadata:\n  name: http-basic-auth-configmap\nspec:\n  http:\n    - url: https://httpbin.flanksource.com/basic-auth/john/doe\n      username:\n        valueFrom:\n          secretKeyRef:\n            name: basic-auth\n            key: user\n      password:\n        valueFrom:\n          secretKeyRef:\n            name: basic-auth\n            key: pass\n```\n\n## Dashboard\n\nCanary checker comes with a built-in dashboard by default\n\n![](https://canarychecker.io/img/canary-ui.png)\n\nThere is also a [grafana](https://canarychecker.io/concepts/grafana) dashboard, or build your own using the metrics exposed.\n\n## Getting Help\n\nIf you have any questions about canary checker:\n\n* Read the [docs](https://canarychecker.io)\n* Invite yourself to the [CNCF community slack](https://slack.cncf.io/) and join the [#canary-checker](https://cloud-native.slack.com/messages/canary-checker/) channel.\n* Check out the [Youtube Playlist](https://www.youtube.com/playlist?list=PLz4F_KggvA58D6krlw433TNr8qMbu1aIU).\n* File an [issue](https://github.com/flanksource/canary-checker/issues/new) - (We do provide user support via Github Issues, so don't worry if your issue is a bug or not)\n\nYour feedback is always welcome!\n\n## Check Types\n\n| Protocol                                                     | Status     | Checks                                                       |\n| ------------------------------------------------------------ | ---------- | ------------------------------------------------------------ |\n| [HTTP(s)](https://canarychecker.io/reference/http)                                 | GA         | Response body, headers and duration                          |\n| [DNS](https://canarychecker.io/reference/dns)                                      | GA         | Response and duration                                        |\n| [Ping/ICMP](https://canarychecker.io/reference/icmp)                               | GA         | Duration and packet loss                                     |\n| [TCP](https://canarychecker.io/reference/tcp)                                      | GA         | Port is open and connectable                                 |\n| **Data Sources**                                             |            |                                                              |\n| [SQL](https://canarychecker.io/reference/sql) (MySQL, Postgres, SQL Server) | GA         | Ability to login, results, duration, health exposed via stored procedures |\n| [LDAP](https://canarychecker.io/reference/ldap)                                    | GA         | Ability to login, response time                              |\n| [ElasticSearch / Opensearch](https://canarychecker.io/reference/elasticsearch)     | GA         | Ability to login, response time, size of search results      |\n| [Mongo](https://canarychecker.io/reference/mongo)                                  | Beta       | Ability to login, results, duration,                         |\n| [Redis](https://canarychecker.io/reference/redis)                                  | GA         | Ability to login, results, duration,                         |\n| [Prometheus](https://canarychecker.io/reference/prometheus)                        | GA         | Ability to login, results, duration,                         |\n| **Alerts**                                                   |            | Prometheus                                                   |\n| [Prometheus Alert Manager](https://canarychecker.io/reference/alert-manager)       | GA         | Pending and firing alerts                                    |\n| [AWS Cloudwatch Alarms](https://canarychecker.io/reference/aws-cloudwatch)             | GA         | Pending and firing alarms                                    |\n| [Dynatrace Problems](./fixtures/external/dynatrace.yaml)               | Beta       | Problems deteced                                             |\n| **DevOps**                                                   |            |                                                              |\n| [Git](https://canarychecker.io/reference/git)                                      | GA         | Query Git and Github repositories via SQL                    |\n| [Azure Devops](https://canarychecker.io/reference/azure-devops)                                 | Beta |                                                              |\n| **Integration Testing**                                      |            |                                                              |\n| [JMeter](https://canarychecker.io/reference/jmeter)                                | Beta       | Runs and checks the result of a JMeter test                  |\n| [JUnit / BYO](https://canarychecker.io/reference/junit)                            | Beta       | Run a pod that saves Junit test results                      |\n| [K6](https://canarychecker.io/examples/k6) | Beta | Runs K6 tests that export JUnit via a container |\n| [Newman](https://canarychecker.io/examples/newman) | Beta |  Runs Newman / Postman tests that export JUnit via a container  |\n| [Playwright](https://canarychecker.io/examples/Playwright) | Beta |  Runs Playwright tests that export JUnit via a container  |\n| **File Systems / Batch**                                     |            |                                                              |\n| [Local Disk / NFS](https://canarychecker.io/reference/folder)                      | GA         | Check folders for files that are:  too few/many, too old/new, too small/large |\n| [S3](https://canarychecker.io/reference/folder#s3)                                 | GA         | Check contents of AWS S3 Buckets                             |\n| [GCS](https://canarychecker.io/reference/folder#gcs)                               | GA         | Check contents of Google Cloud Storage Buckets               |\n| [SFTP](https://canarychecker.io/reference/folder#sftp)                                    | GA         | Check contents of folders over SFTP                          |\n| [SMB / CIFS](https://canarychecker.io/reference/folder#smb)                                         | GA         | Check contents of folders over SMB/CIFS                      |\n| **Config**                                                   |            |                                                              |\n| [AWS Config](https://canarychecker.io/reference/aws-config)                        | GA         | Query AWS config using SQL                                   |\n| [AWS Config Rule](https://canarychecker.io/reference/aws-config-rule)              | GA         | AWS Config Rules that are firing, Custom AWS Config queries  |\n| [Config DB](https://canarychecker.io/reference/catalog)                           | GA         | Custom config queries for Mission Control Config D           |\n| [Kubernetes Resources](https://canarychecker.io/reference/kubernetes)              | GA         | Kubernetes resources that are missing or are in a non-ready state |\n| **Backups**                                                  |            |                                                              |\n| [GCP Databases](https://canarychecker.io/reference/gcs-database-backup#gcpdatabase)                                    | GA         | Backup freshness                                             |\n| [Restic](https://canarychecker.io/reference/restic)                                | Beta       | Backup freshness and integrity                               |\n| **Infrastructure**                                           |            |                                                              |\n| [EC2](https://canarychecker.io/reference/ec2)                                      | GA         | Ability to launch new EC2 instances                          |\n| [Kubernetes Ingress](https://canarychecker.io/reference/pod)                       | GA         | Ability to schedule and then route traffic via an ingress to a pod |\n| [Docker/Containerd](https://canarychecker.io/reference/containerd)                 | Deprecated | Ability to push and pull containers via docker/containerd    |\n| [Helm](https://canarychecker.io/reference/helm)                                    | Deprecated | Ability to push and pull helm charts                         |\n| [S3 Protocol](https://canarychecker.io/reference/s3-protocol)                      | GA         | Ability to read/write/list objects on an S3 compatible object store |\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md)\n\nThank you to all our contributors !\n\n\u003ca href=\"https://github.com/flanksource/canary-checker/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=flanksource/canary-checker\" /\u003e\n\u003c/a\u003e\n\n## License\n\nCanary Checker core (the code in this repository) is licensed under [Apache 2.0](https://raw.githubusercontent.com/flanksource/canary-checker/main/LICENSE) and accepts contributions via GitHub pull requests after signing a CLA.\n\nThe UI (Dashboard) is free to use with canary checker under a license exception of [Flanksource UI](https://github.com/flanksource/flanksource-ui/blob/main/LICENSE#L7)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflanksource%2Fcanary-checker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflanksource%2Fcanary-checker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflanksource%2Fcanary-checker/lists"}