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
⚡️ Getting Started
Install
Using Helm
helm repo add kwatch https://kwatch.dev/charts
helm install [RELEASE_NAME] kwatch/kwatch --namespace kwatch --create-namespace --version 0.9.3
To get more details, please check chart's configuration
Using kubectl
You need to get config template to add your configs
curl -L https://raw.githubusercontent.com/abahmed/kwatch/v0.9.3/deploy/config.yaml -o config.yaml
Then edit config.yaml
file and apply your configuration
kubectl apply -f config.yaml
To deploy kwatch, execute following command:
kubectl apply -f https://raw.githubusercontent.com/abahmed/kwatch/v0.9.3/deploy/deploy.yaml
High Level Architecture
Configuration
General
Parameter |
Description |
maxRecentLogLines |
Optional Max tail log lines in messages, if it's not provided it will get all log lines |
namespaces |
Optional comma separated 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 !<namespace name> . You can either set forbidden namespaces or allowed, not both. |
reasons |
Optional comma separated 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 !<reason> . You can either set forbidden reasons or allowed, not both. |
ignoreFailedGracefulShutdown |
If set to true, containers which are forcefully killed during shutdown (as their graceful shutdown failed) are not reported as error |
ignoreContainerNames |
Optional comma separated list of container names to ignore |
ignorePodNames |
Optional list of pod name regexp patterns to ignore |
App
Parameter |
Description |
app.proxyURL |
used in outgoing http(s) requests except Kubernetes requests to cluster optionally |
app.clusterName |
used in notifications to indicate which cluster has issue |
app.disableStartupMessage |
If set to true, welcome message will not be sent to notification channels |
app.logFormatter |
used for setting custom formatter when app prints logs: text, json (default: text) |
Upgrader
Parameter |
Description |
upgrader.disableUpdateCheck |
If set to true, does not check for and notify about kwatch updates |
PVC Monitor
Parameter |
Description |
pvcMonitor.enabled |
to enable or disable this module (default: true) |
pvcMonitor.interval |
the frequency (in minutes) to check pvc usage in the cluster (default: 15) |
pvcMonitor.threshold |
the percentage of accepted pvc usage. if current usage exceeds this value, it will send a notification (default: 80) |
Alerts
Slack
If you want to enable Slack, provide the webhook with optional text and title
Parameter |
Description |
alert.slack.webhook |
Slack webhook URL |
alert.slack.channel |
Used by legacy webhooks to send messages to specific channel instead of default one |
alert.slack.title |
Customized title in slack message |
alert.slack.text |
Customized text in slack message |
Discord
If you want to enable Discord, provide the webhook with optional text and title
Parameter |
Description |
alert.discord.webhook |
Discord webhook URL |
alert.discord.title |
Customized title in discord message |
alert.discord.text |
Customized text in discord message |
Email
If you want to enable Email, provide the from and to emails with host and the port
Parameter |
Description |
alert.email.from |
From email |
alert.email.password |
From email Password |
alert.email.host |
provide the host |
alert.email.port |
provide the port |
alert.email.to |
the receiver email |
If you want to enable PagerDuty, provide the integration key
Parameter |
Description |
alert.pagerduty.integrationKey |
PagerDuty integration key more info |
Telegram
If you want to enable Telegram, provide a valid token and the chat Id.
Parameter |
Description |
alert.telegram.token |
Telegram token |
alert.telegram.chatId |
Telegram chat id |
Microsoft Teams
If you want to enable Microsoft Teams, provide the channel webhook.
Parameter |
Description |
alert.teams.webhook |
webhook Microsoft team |
alert.teams.title |
Customized title in Microsoft teams message |
alert.teams.text |
Customized title in Microsoft teams message |
Rocket Chat
If you want to enable Rocket Chat, provide the webhook with optional text
Parameter |
Description |
alert.rocketchat.webhook |
Rocket Chat webhook URL |
alert.rocketchat.text |
Customized text in rocket chat message |
Mattermost
If you want to enable Mattermost, provide the webhook with optional text and title
Parameter |
Description |
alert.mattermost.webhook |
Mattermost webhook URL |
alert.mattermost.title |
Customized title in Mattermost message |
alert.mattermost.text |
Customized text in Mattermost message |
Opsgenie
If you want to enable Opsgenie, provide the API key with optional text and title
Parameter |
Description |
alert.opsgenie.apiKey |
Opsgenie API Key |
alert.opsgenie.title |
Customized title in Opsgenie message |
alert.opsgenie.text |
Customized text in Opsgenie message |
Matrix
If you want to enable Matrix, provide homeServer, accessToken and internalRoomID
with optional text and title
Parameter |
Description |
alert.matrix.homeServer |
HomeServer URL |
alert.matrix.accessToken |
Account access token |
alert.matrix.internalRoomID |
Internal room ID |
alert.matrix.title |
Customized title in message |
alert.matrix.text |
Customized text in message |
DingTalk
If you want to enable DingTalk, provide accessToken with optional secret and
title
Parameter |
Description |
alert.dingtalk.accessToken |
Chat access token |
alert.dingtalk.secret |
Optional secret used to sign requests |
alert.dingtalk.title |
Customized title in message |
FeiShu
If you want to enable FeiShu, provide accessToken with optional secret and
title
Parameter |
Description |
alert.feishu.webhook |
FeiShu bot webhook URL |
alert.feishu.title |
Customized title in message |
Zenduty
If you want to enable Zenduty, provide IntegrationKey with optional alert type
Parameter |
Description |
alert.zenduty.integrationKey |
Zenduty integration Key |
alert.zenduty.alertType |
Optional alert type of incident: critical, acknowledged, resolved, error, warning, info (default: critical) |
Google Chat
If you want to enable Rocket Chat, provide the webhook with optional text
Parameter |
Description |
alert.googlechat.webhook |
Google Chat webhook URL |
alert.rocketchat.text |
Customized text in Google Chat message |
Custom webhook
If you want to enable custom webhook, provide url with optional headers and
basic auth
Parameter |
Description |
alert.webhook.url |
Webhook URL |
alert.webhook.headers |
optional list of name and value |
alert.webhook.basicAuth |
optional username and password |
Cleanup
kubectl delete -f https://raw.githubusercontent.com/abahmed/kwatch/v0.9.3/deploy/config.yaml
kubectl delete -f https://raw.githubusercontent.com/abahmed/kwatch/v0.9.3/deploy/deploy.yaml
👍 Contribute & Support
🚀 Who uses kwatch?
kwatch is being used by multiple entities including, but not limited to
If you want to add your entity, open issue to add it
💻 Contributors
⭐️ Stargazers
👋 Get in touch
Feel free to chat with us on Discord if you have questions, or suggestions
⚠️ License
kwatch is licensed under MIT License