{"id":13509544,"url":"https://github.com/abahmed/kwatch","last_synced_at":"2025-10-18T18:34:03.627Z","repository":{"id":36961614,"uuid":"430134607","full_name":"abahmed/kwatch","owner":"abahmed","description":":eyes: monitor \u0026 detect crashes in your Kubernetes(K8s) cluster instantly","archived":false,"fork":false,"pushed_at":"2025-04-25T22:11:21.000Z","size":3392,"stargazers_count":972,"open_issues_count":19,"forks_count":75,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-25T23:19:37.471Z","etag":null,"topics":["crash-reporting","discord","event-notifier","go","golang","k8s","kubernetes","kwatch","monitoring","slack"],"latest_commit_sha":null,"homepage":"https://kwatch.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abahmed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-20T15:09:48.000Z","updated_at":"2025-04-25T22:10:19.000Z","dependencies_parsed_at":"2024-02-07T02:31:41.380Z","dependency_job_id":"fc1c6ff0-66ef-4cbe-b472-805e3a0244c6","html_url":"https://github.com/abahmed/kwatch","commit_stats":{"total_commits":170,"total_committers":21,"mean_commits":8.095238095238095,"dds":0.5823529411764705,"last_synced_commit":"abe81a9d559834173a9cffc7d99f444af05f1aef"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abahmed%2Fkwatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abahmed%2Fkwatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abahmed%2Fkwatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abahmed%2Fkwatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abahmed","download_url":"https://codeload.github.com/abahmed/kwatch/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254235695,"owners_count":22036963,"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","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":["crash-reporting","discord","event-notifier","go","golang","k8s","kubernetes","kwatch","monitoring","slack"],"created_at":"2024-08-01T02:01:09.306Z","updated_at":"2025-10-18T18:34:03.608Z","avatar_url":"https://github.com/abahmed.png","language":"Go","funding_links":[],"categories":["Software Packages","Go","软件包","Go Tools","DevOps Tools","monitoring"],"sub_categories":["DevOps Tools","DevOps 工具"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://kwatch.dev\"\u003e\n    \u003cimg src=\"./assets/logo.png\" width=\"30%\"/\u003e\n  \u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://kwatch.dev\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/%F0%9F%92%A1%20kwatch-website-00ACD7.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://godoc.org/github.com/abahmed/kwatch\"\u003e\n    \u003cimg src=\"https://godoc.org/github.com/abahmed/kwatch?status.png\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/abahmed/kwatch/actions/workflows/check.yaml\"\u003e\n    \u003cimg src=\"https://github.com/abahmed/kwatch/workflows/Check/badge.svg?branch=main\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/abahmed/kwatch\"\u003e\n    \u003cimg src=\"https://goreportcard.com/badge/github.com/abahmed/kwatch\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/abahmed/kwatch\"\u003e\n    \u003cimg src=\"https://codecov.io/gh/abahmed/kwatch/branch/main/graph/badge.svg?token=ZMCU75JJO7\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/abahmed/kwatch/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/abahmed/kwatch?label=kwatch\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://discord.gg/kzJszdKmJ7\"\u003e\n    \u003cimg src=\"https://img.shields.io/discord/911647396918870036?label=Discord\u0026logo=discord\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n**kwatch** helps you monitor all changes in your Kubernetes(K8s) cluster, detects crashes in your running apps in realtime, and publishes notifications to your channels (Slack, Discord, etc.) instantly\n\n## ⚡️ Getting Started\n\n### Install\n\n#### Using Helm\n\n```shell\nhelm repo add kwatch https://kwatch.dev/charts\nhelm install [RELEASE_NAME] kwatch/kwatch --namespace kwatch --create-namespace --version 0.10.3\n```\n\nTo get more details, please check [chart's configuration](https://github.com/abahmed/kwatch/blob/main/deploy/chart/README.md)\n\n#### Using kubectl\n\nYou need to get config template to add your configs\n\n```shell\ncurl  -L https://raw.githubusercontent.com/abahmed/kwatch/v0.10.3/deploy/config.yaml -o config.yaml\n```\n\nThen edit `config.yaml` file and apply your configuration\n\n```shell\nkubectl apply -f config.yaml\n```\n\nTo deploy **kwatch**, execute following command:\n\n```shell\nkubectl apply -f https://raw.githubusercontent.com/abahmed/kwatch/v0.10.3/deploy/deploy.yaml\n```\n\n## High Level Architecture\n\n\u003cp\u003e\n \u003cimg src=\"./assets/highlevelarchitecture.png\" width=\"70%\"/\u003e\n\u003c/p\u003e\n\n| Point                            | URL                                                                               |\n|:---------------------------------|:--------------------------------------------------------------------------------- |\n| `4.1`                            | \u003chttps://github.com/abahmed/kwatch/blob/main/main.go#L18\u003e                           |\n| `5.1.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/main.go#L21\u003e / 24                      |\n| `6.1.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/main.go#L36\u003e                           |\n| `7.0.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/main.go#L40\u003e                           |\n| `7.1.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/upgrader/upgrader.go#L16\u003e              |\n| `8.1.\u00268.2`                       | \u003chttps://github.com/abahmed/kwatch/blob/main/main.go#L46\u003e / 52                      |\n| `8.3.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/main.go#L53\u003e                           |\n| `9.0.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/main.go#L58\u003e                           |\n| `9.1.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/controller/start.go#L20\u003e               |\n| `9.2.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/controller/controller.go#L37\u003e          |\n| `9.3.`                           | \u003chttps://github.com/abahmed/kwatch/blob/main/controller/controller.go\u003e              |\n| `9.4.`                           | \u003chttps://github.com/abahmed/kwatch/tree/main/provider\u003e                              |\n\n## Configuration\n\n### General\n\n| Parameter                      | Description   |\n|:-------------------------------|:-----------------------|\n| `maxRecentLogLines`            | Optional Max tail log lines in messages, if it's not provided it will get all log lines |\n| `namespaces`                   | Optional list of namespaces that you want to watch or forbid, if it's not provided it will watch all namespaces. If you want to forbid a namespace, configure it with `!\u003cnamespace name\u003e`. You can either set forbidden namespaces or allowed, not both. |\n| `reasons`                      | Optional list of reasons that you want to watch or forbid, if it's not provided it will watch all reasons. If you want to forbid a reason, configure it with `!\u003creason\u003e`. You can either set forbidden reasons or allowed, not both.                     |\n| `ignoreFailedGracefulShutdown` | If set to true, containers which are forcefully killed during shutdown (as their graceful shutdown failed) are not reported as error     |\n| `ignoreContainerNames`         | Optional list of container names to ignore    |\n| `ignorePodNames`               | Optional list of pod name regexp patterns to ignore    |\n| `IgnoreLogPatterns`            | Optional list of regexp patterns of logs to ignore     |\n\n\n### App\n\n| Parameter                     | Description                                 |\n|:------------------------------|:------------------------------------------- |\n| `app.proxyURL` | used in outgoing http(s) requests except Kubernetes requests to cluster optionally |\n| `app.clusterName` | used in notifications to indicate which cluster has issue |\n| `app.disableStartupMessage` | If set to true, welcome message will not be sent to notification channels |\n| `app.logFormatter` | used for setting custom formatter when app prints logs: text, json (default: text) |\n\n\n### Upgrader\n\n| Parameter                     | Description                                 |\n|:------------------------------|:------------------------------------------- |\n| `upgrader.disableUpdateCheck` | If set to true, does not check for and notify about kwatch updates |\n\n### PVC Monitor\n\n| Parameter                    | Description                                 |\n|:-----------------------------|:------------------------------------------- |\n| `pvcMonitor.enabled`         | to enable or disable this module (default: true) |\n| `pvcMonitor.interval`        | the frequency (in minutes) to check pvc usage in the cluster  (default: 15) |\n| `pvcMonitor.threshold`       | the percentage of accepted pvc usage. if current usage exceeds this value, it will send a notification (default: 80) |\n\n\n### Node Monitor\n\n| Parameter                    | Description                                 |\n|:-----------------------------|:------------------------------------------- |\n| `nodeMonitor.enabled`        | to enable or disable node monitoring (default: true) |\n\n\n\n### Alerts\n\n#### Slack\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/slack.png\" width=\"30%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Slack, provide the webhook with optional text and title\n\n| Parameter                        | Description                                 |\n|:---------------------------------|:------------------------------------------- |\n| `alert.slack.webhook`            | Slack webhook URL                           |\n| `alert.slack.channel`            | Used by legacy webhooks to send messages to specific channel instead of default one |\n| `alert.slack.title`              | Customized title in slack message           |\n| `alert.slack.text`               | Customized text in slack message            |\n\n#### Discord\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/discord.png\" width=\"30%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Discord, provide the webhook with optional text and title\n\n| Parameter                        | Description                                 |\n|:---------------------------------|:------------------------------------------- |\n| `alert.discord.webhook`          | Discord webhook URL                         |\n| `alert.discord.title`            | Customized title in discord message         |\n| `alert.discord.text`             | Customized text in discord message          |\n\n#### Email\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/email.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Email, provide the from and to emails with host and the port\n\n| Parameter                        | Description                                 |\n|:---------------------------------|:------------------------------------------- |\n| `alert.email.from`               | From email                                  |\n| `alert.email.password`           | From email Password                         |\n| `alert.email.host`               | provide the host                            |\n| `alert.email.port`               | provide the port                            |\n| `alert.email.to`                 | the receiver email                          |\n\n#### PagerDuty\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/pagerduty.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable PagerDuty, provide the integration key\n\n| Parameter                        | Description                                 |\n|:---------------------------------|:------------------------------------------- |\n| `alert.pagerduty.integrationKey` | PagerDuty integration key [more info](https://support.pagerduty.com/docs/services-and-integrations) |\n\n#### Telegram\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/telegram.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Telegram, provide a valid token and the chat Id.\n\n| Parameter                        | Description                                     |\n|:---------------------------------|:------------------------------------------------|\n| `alert.telegram.token`           | Telegram token                                  |\n| `alert.telegram.chatId`          | Telegram chat id                                |\n\n#### Microsoft Teams\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/teams.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Microsoft Teams, provide the channel webhook.\n\n| Parameter                        | Description                                     |\n|:---------------------------------|:------------------------------------------------|\n| `alert.teams.webhook`            |  webhook Microsoft team                         |\n| `alert.teams.title`              | Customized title in Microsoft teams message     |\n| `alert.teams.text`               | Customized title in Microsoft teams message     |\n\n#### Rocket Chat\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/rocketchat.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Rocket Chat, provide the webhook with optional text\n\n| Parameter                  | Description                            |\n|:---------------------------|:---------------------------------------|\n| `alert.rocketchat.webhook` | Rocket Chat webhook URL                |\n| `alert.rocketchat.text`    | Customized text in rocket chat message |\n\n#### Mattermost\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/mattermost.png\" width=\"45%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Mattermost, provide the webhook with optional text and title\n\n| Parameter                             | Description                               |\n|:--------------------------------------|:----------------------------------------- |\n| `alert.mattermost.webhook`            | Mattermost webhook URL                    |\n| `alert.mattermost.title`              | Customized title in Mattermost message    |\n| `alert.mattermost.text`               | Customized text in Mattermost message     |\n\n#### Opsgenie\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/opsgenie.png\" width=\"45%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Opsgenie, provide the API key with optional text and title\n\n| Parameter                             | Description                             |\n|:--------------------------------------|:--------------------------------------- |\n| `alert.opsgenie.apiKey`               | Opsgenie API Key                        |\n| `alert.opsgenie.title`                | Customized title in Opsgenie message    |\n| `alert.opsgenie.text`                 | Customized text in Opsgenie message     |\n\n#### Matrix\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/matrix.png\" width=\"45%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Matrix, provide homeServer, accessToken and internalRoomID\nwith optional text and title\n\n| Parameter                           | Description                            |\n|:------------------------------------|:-------------------------------------- |\n| `alert.matrix.homeServer`           | HomeServer URL                         |\n| `alert.matrix.accessToken`          | Account access token                   |\n| `alert.matrix.internalRoomID`       | Internal room ID                       |\n| `alert.matrix.title`                | Customized title in message            |\n| `alert.matrix.text`                 | Customized text in message             |\n\n#### DingTalk\n\nIf you want to enable DingTalk, provide accessToken with optional secret and\ntitle\n\n| Parameter                           | Description                            |\n|:------------------------------------|:-------------------------------------- |\n| `alert.dingtalk.accessToken`        | Chat access token                      |\n| `alert.dingtalk.secret`             | Optional secret used to sign requests  |\n| `alert.dingtalk.title`              | Customized title in message            |\n\n#### FeiShu\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/feishu.png\" width=\"45%\"/\u003e\n\u003c/p\u003e\nIf you want to enable FeiShu, provide accessToken with optional secret and\ntitle\n\n| Parameter                | Description                 |\n|:-------------------------|:----------------------------|\n| `alert.feishu.webhook`   | FeiShu bot webhook URL      |\n| `alert.feishu.title`     | Customized title in message |\n\n#### Zenduty\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/zenduty.png\" width=\"45%\"/\u003e\n\u003c/p\u003e\nIf you want to enable Zenduty, provide IntegrationKey with optional alert type\n\n| Parameter                      | Description                 |\n|:-------------------------------|:----------------------------|\n| `alert.zenduty.integrationKey` | Zenduty integration Key     |\n| `alert.zenduty.alertType`      | Optional alert type of incident: critical, acknowledged, resolved, error, warning, info (default: critical) |\n\n#### Google Chat\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/googlechat.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\nIf you want to enable Rocket Chat, provide the webhook with optional text\n\n| Parameter                  | Description                            |\n|:---------------------------|:---------------------------------------|\n| `alert.googlechat.webhook` | Google Chat webhook URL                |\n| `alert.rocketchat.text`    | Customized text in Google Chat message |\n\n#### Custom webhook\n\nIf you want to enable custom webhook, provide url with optional headers and\nbasic auth\n\n| Parameter                 | Description                     |\n|:--------------------------|:--------------------------------|\n| `alert.webhook.url`       | Webhook URL                     |\n| `alert.webhook.headers`   | optional list of name and value |\n| `alert.webhook.basicAuth` | optional username and password  |\n\n### Cleanup\n\n```shell\nkubectl delete -f https://raw.githubusercontent.com/abahmed/kwatch/v0.10.3/deploy/config.yaml\nkubectl delete -f https://raw.githubusercontent.com/abahmed/kwatch/v0.10.3/deploy/deploy.yaml\n```\n\n## 👍 Contribute \u0026 Support\n\n+ Add a [GitHub Star](https://github.com/abahmed/kwatch/stargazers)\n+ [Suggest new features, ideas and optimizations](https://github.com/abahmed/kwatch/issues)\n+ [Report issues](https://github.com/abahmed/kwatch/issues)\n\n## 🚀 Who uses kwatch?\n\n**kwatch** is being used by multiple entities including, but not limited to\n\n[\u003cimg src=\"./assets/users/trella.png\"/\u003e](https://www.trella.app)\n[\u003cimg src=\"./assets/users/ibec-systems.svg\" width=\"50%\"/\u003e](https://ibecsystems.com/en#/)\n[\u003cimg src=\"./assets/users/justwatch.png\" width=\"50%\"/\u003e](https://www.justwatch.com/us/talent)\n\nIf you want to add your entity, [open issue](https://github.com/abahmed/kwatch/issues) to add it\n\n## 💻 Contributors\n\n\u003ca href=\"https://github.com/abahmed/kwatch/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contributors-img.firebaseapp.com/image?repo=abahmed/kwatch\" /\u003e\n\u003c/a\u003e\n\n## ⭐️ Stargazers\n\n\u003cimg src=\"https://api.star-history.com/svg?repos=abahmed/kwatch\u0026type=Date\" alt=\"Stargazers over time\" style=\"max-width: 100%\"\u003e\n\n## 👋 Get in touch\n\nFeel free to chat with us on [Discord](https://discord.gg/kzJszdKmJ7) if you have questions, or suggestions\n\n## ⚠️ License\n\nkwatch is licensed under [MIT License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabahmed%2Fkwatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabahmed%2Fkwatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabahmed%2Fkwatch/lists"}