Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

277 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation


๐Ÿ‘‹ New to Kubernetes? No problem.
kwatch watches your cluster 24/7. When something fails, it tells you what broke and why โ€” with the error reason, diagnostic hints, logs, and events โ€” straight to your team chat.
โœจ 60 seconds to install. No backend. No dashboards. No YAML spaghetti.


๐Ÿง What is kwatch?

kwatch is like a smart friend for your Kubernetes cluster:

  • ๐Ÿ’ฅ Something crashes โ†’ you get a message that says why (not just "pod is broken")
  • ๐Ÿ”‡ Smart about noise โ€” groups related issues into a single notification, ignores flapping
  • ๐Ÿง  Optional AI that reads the logs and tells you what's likely wrong
  • โšก Works in under a minute โ€” just one command and a config file

No Prometheus. No Grafana. No 50-step setup. Just alerts that make sense.


๐Ÿ†š kwatch vs the scary stuff

โœจ kwatch ๐Ÿ˜ฐ DIY Prometheus + Alertmanager ๐Ÿ’ธ Heavy SaaS
โฑ๏ธ Setup time ~5 minutes hours of YAML agent + backend setup
๐Ÿ“ฆ Size ~20 MB single binary whole monitoring stack per-node agents + cloud costs
๐Ÿ’ฌ Alerts Self-explaining ("OOMKilled โ€” raise memory limit") Rule-defined message Depends on configuration
๐Ÿ—„๏ธ Storage None (stateless) Prometheus TSDB Full retention (costly)
๐Ÿ“š Learning curve One ConfigMap PromQL + alert rules Platform-specific DSL

๐Ÿšจ Before vs After

Raw kubectl output ๐Ÿคท kwatch tells you ๐Ÿ’ก
CrashLoopBackOff ๐Ÿšจ OOMKilled (memory limit: 512Mi) โ€” try raising limits.memory ยท here are the logs + events
Error ๐Ÿšจ HTTP probe failing on :8080/healthz (exit 137) โ€” container ran out of memory

โšก๏ธ 60-second install

๐Ÿ“ฆ Helm (easiest ๐Ÿ†)

helm repo add kwatch https://kwatch.dev/charts
helm install [RELEASE_NAME] kwatch/kwatch --namespace kwatch --create-namespace --version 0.11.0

More details in the chart docs

๐Ÿ™ kubectl

curl -L https://raw.githubusercontent.com/abahmed/kwatch/v0.11.0/deploy/config.yaml -o config.yaml
# โœ๏ธ Edit config.yaml with your Slack/Discord/email webhook
kubectl apply -f config.yaml
kubectl apply -f https://raw.githubusercontent.com/abahmed/kwatch/v0.11.0/deploy/deploy.yaml

๐ŸŽฏ What does it catch?

Every monitor below is on by default โ€” zero config needed:

Signal Default What you get
๐ŸŸฅ Pod crashes (CrashLoop, OOM, ImagePull, Error) โœ… on Container state + previous logs + events โ€” tells you why
โณ Pending pods (stuck Unschedulable) โœ… on Alerts after 300s stuck; includes scheduling delay in hint
๐ŸŽฏ Scheduling delay diagnostics โœ… on Prepends "unschedulable for XmYs" duration to Unschedulable hints
๐Ÿ–ฅ๏ธ Node issues (NotReady, Disk/Memory pressure) โœ… on Per-condition severity
๐Ÿ’พ PVC running out of space โœ… on Warn at 80%, critical at 90%
โŒ Failed Jobs โœ… on JobFailed / JobSuspended
๐Ÿš€ Stuck rollouts โœ… on ProgressDeadlineExceeded โ€” deployment didn't finish
๐Ÿšฆ Deployment unavailable โœ… on DeploymentUnavailable โ€” unavailable replicas for rolloutMonitor.sustainedMinutes consecutive minutes
๐Ÿ“ก DaemonSet pods not running โœ… on Unavailable pods detected
โฐ CronJob suspended or missing runs โœ… on Not scheduled in 24h? Alert.
๐Ÿ“ˆ HPA stuck at max replicas โœ… on After 20 minutes sustained
๐Ÿ”— Service endpoint health โœ… on Detects endpoints with zero ready addresses
๐Ÿงฉ Admission webhook backends โœ… on Alerts when a webhook's backing service has no ready endpoints
๐Ÿ›๏ธ Control-plane component health โœ… on Detects broken control-plane pods (apiserver, scheduler, etc.)
๐Ÿงฉ StatefulSet unavailable โœ… on StsUnavailable โ€” pods not ready for statefulSetMonitor.sustainedMinutes minutes
๐Ÿ”„ PDB blocking disruptions โœ… on PdbViolation โ€” PodDisruptionBudget has disruptionsAllowed=0 and unhealthy pods
๐Ÿญ Node overcommit prediction โœ… on NodeResourceHigh/Critical โ€” warning at 2ร—, critical at 4ร— CPU/mem overcommit
๐Ÿ’ฅ OOM pattern detection โœ… on OOMRepeating โ€” 3+ OOM kills in 60-minute sliding window flags potential memory leak
๐ŸŒ Ingress backend health โœ… on Alerts when ingress backend services have no ready endpoints
๐Ÿšง NetworkPolicy over-restriction โœ… on Detects policies that may block all ingress traffic
๐Ÿ”’ TLS certs expiring โŒ off Enable if you want cert expiry warnings
๐Ÿง  Context-aware intelligence (dependency analysis) โœ… on Links incidents to root causes โ€” unhealthy nodes, bad rollouts, misconfigured ConfigMaps/Secrets
๐Ÿ“Š Mass failure detection โœ… on Detects when 30%+ of dependents sharing a node/configmap/secret fail simultaneously

โœ… TLS is the only one off โ€” everything else just works out of the box.


๐Ÿง  Context-aware intelligence

kwatch builds a dependency graph of your cluster from pod informers โ€” mapping pods to their nodes, owners (Deployments/StatefulSets/DaemonSets), Services, PVCs, and referenced ConfigMaps/Secrets. When an incident fires, the insight engine analyzes it against the graph and answers:

  • What likely caused this? โ€” unhealthy node, failed rollout, or misconfigured resources (ConfigMap, Secret, PVC)
  • What's the impact? โ€” how many pods, services, or dependents are affected
  • Recent changes? โ€” correlated changes on the same resource or namespace

The graph is built at startup from the informer cache, rebuilt periodically, and updated incrementally as pods come and go. No configuration needed.

Mass failure detection

The correlation engine periodically scans all active incidents for shared dependencies. If more than 30% of dependents sharing a node, ConfigMap, Secret, or PVC are in failure, a mass failure alert fires. The threshold is dynamic โ€” computed per dependency based on the current scope. Mass failures automatically resolve when the underlying incidents clear.


๐Ÿค– AI-powered troubleshooting (optional, off by default)

kwatch ships with built-in AI (runs inside your cluster โ€” zero data leaves). It is disabled by default; set enabled: true to use it:

llm:
  enabled: false   # โŒ off by default!

When a crash happens, the AI reads the logs and tells you the most likely cause and what to do next. Like having a senior SRE on-call with you.

๐Ÿ“Œ Architecture note: AI is available for linux/amd64 and linux/arm64 only. It does not support arm/v6 or arm/v7 (the main kwatch image supports all four).


โš™๏ธ Configuration (simple)

๐Ÿ”ง General

Parameter What it does
maxRecentLogLines How many log lines to include in alerts (default: 50)
resyncSeconds Check for problems periodically (0 = only on events, recommended)
workers How many parallel workers (default: 1, raise for big clusters)
namespaces ๐Ÿ”ฝ Limit to specific namespaces, or use !kube-system to exclude
reasons ๐Ÿ”ฝ Only alert on specific reasons, or exclude some with !
ignoreFailedGracefulShutdown โœ… Skip containers killed during graceful shutdown (default: true)
ignoreDisruptionTerminations โœ… Skip pods evicted during node drains (default: true)
runbooks ๐Ÿ“š Add links to your runbooks per error reason
llm.enabled ๐Ÿค– AI enrichment (default: false)
containerRestartThreshold Alert if a container restarts this many times (0 = off)
reportStartupBaseline ๐Ÿ“‹ Send one startup summary of pre-existing issues (default: true)

๐Ÿ”ฝ Filter by namespace

# Watch only these namespaces
namespaces:
  - default
  - production

# Or exclude some (can't mix both)
namespaces:
  - !kube-system
  - !monitoring

๐Ÿ”ฝ Filter by reason

# Only these reasons trigger alerts
reasons:
  - CrashLoopBackOff
  - ImagePullBackOff

# Or exclude some
reasons:
  - !Started
  - !Killing

๐Ÿ“ฑ App settings

Parameter What it does
app.proxyURL ๐Ÿ”— Proxy for outgoing HTTP requests
app.clusterName ๐Ÿท๏ธ Name shown in alerts so you know which cluster
app.disableStartupMessage Silence the "kwatch is alive" welcome message
app.logFormatter Log format: text (default) or json
includeEvents ๐Ÿ“‹ Include K8s events in alerts (default: true)
includeLogs ๐Ÿ“‹ Include container logs in alerts (default: true)

๐Ÿ’“ Health checks

Parameter What it does
healthCheck.enabled โœ… Health endpoints (default: true)
healthCheck.port Port to serve health on (default: 8060)
healthCheck.pprof ๐Ÿ”ฌ Go profiling endpoints (default: false)
healthCheck.diagnostics ๐Ÿฉบ Extra endpoints: /incidents, /test-alert, /deadletters

Endpoints:

  • GET /healthz โ€” โœ… Liveness
  • GET /readyz โ€” โœ… Readiness
  • GET /health โ€” {"status": "ok"}
  • GET /incidents โ€” ๐Ÿ“‹ All active incidents (requires diagnostics: true)
  • POST /test-alert โ€” ๐Ÿ“ค Send a test alert (requires diagnostics: true)
  • GET /deadletters โ€” ๐Ÿ’€ Recent delivery failures (requires diagnostics: true)

๐Ÿ”„ Upgrader

Parameter What it does
upgrader.disableUpdateCheck ๐Ÿ”• Don't check for new kwatch versions

๐Ÿ“Š Monitors

๐Ÿ’พ PVC Monitor โ€” disk space alerts

Parameter What it does
pvcMonitor.enabled โœ… Monitor disk usage (default: true)
pvcMonitor.interval Check every N minutes (default: 5)
pvcMonitor.threshold โš ๏ธ Warn at this % (default: 80)
pvcMonitor.criticalThreshold ๐Ÿšจ Critical at this % (default: 90)
pvcMonitor.clearThreshold โœ… Resolve below this % (default: 75)

๐Ÿ–ฅ๏ธ Node Monitor

Parameter What it does
nodeMonitor.enabled โœ… Watch for node problems (default: true)

Catches: NotReady, Unknown, MemoryPressure, DiskPressure, PIDPressure, NetworkUnavailable.

๐Ÿš€ Rollout Monitor

Parameter What it does
rolloutMonitor.enabled โœ… Watch for stuck deployments (default: true)
rolloutMonitor.sustainedMinutes โฑ๏ธ Minutes of unavailability before alerting (default: 2)

๐Ÿ“ก DaemonSet Monitor

Parameter What it does
daemonSetMonitor.enabled โœ… Watch for unavailable DaemonSet pods (default: true)

๐Ÿง‘โ€๐Ÿ’ผ Job Monitor

Parameter What it does
jobMonitor.enabled โœ… Watch for failed/suspended Jobs (default: true)

โฐ CronJob Monitor

Parameter What it does
cronJobMonitor.enabled โœ… Watch for suspended CronJobs or missed schedules (default: true)

๐Ÿ“ˆ HPA Monitor

Parameter What it does
hpaMonitor.enabled โœ… Watch HPAs stuck at max replicas (default: true)
hpaMonitor.sustainedMinutes โฑ๏ธ How long before alerting (default: 20 min)

๐Ÿ’“ Heartbeat Monitor (dead man's switch)

Parameter What it does
heartbeatMonitor.enabled Send pings to a health-check URL (default: false)
heartbeatMonitor.interval โฑ๏ธ Seconds between pings (default: 300)
heartbeatMonitor.url ๐Ÿ”— External URL (e.g. Healthchecks.io)

If kwatch stops or crashes, the external monitor stops getting pings and pages you. ๐Ÿ””

๐Ÿ”’ TLS Certificate Monitor

Parameter What it does
tlsMonitor.enabled ๐Ÿ” Watch for expiring certs (default: false)
tlsMonitor.threshold ๐Ÿ“… Days before warning (default: 30)
tlsMonitor.criticalThreshold ๐Ÿšจ Days before critical (default: 3)

๐Ÿ”— Service Endpoint Monitor

Parameter What it does
serviceMonitor.enabled ๐Ÿ”— Watch for services with zero ready endpoints (default: true)

Detects when a Service's backing Endpoints object has zero ready addresses, indicating no healthy pods are available to serve traffic. Includes a 60-second debounce to avoid flapping during rolling updates or brief endpoint transitions.

๐Ÿงฉ Admission Webhook Monitor

Parameter What it does
admissionWebhookMonitor.enabled ๐Ÿงฉ Watch for webhooks with unreachable backends (default: true)

Monitors MutatingWebhookConfiguration and ValidatingWebhookConfiguration resources. Alerts when a webhook's backing service has no ready endpoints, meaning admission requests may fail or timeout.

๐Ÿ›๏ธ Control-Plane Monitor

Parameter What it does
controlPlaneMonitor.enabled ๐Ÿ›๏ธ Watch for broken control-plane components (default: true)

Detects container issues (CrashLoopBackOff, Error, OOMKilled, etc.) in control-plane pods (kube-apiserver, kube-scheduler, kube-controller-manager, etcd, kube-proxy, coredns). Runs a dedicated sweep at startup to catch pre-existing failures.

๐ŸŒ Ingress Backend Monitor

Parameter What it does
ingressMonitor.enabled ๐ŸŒ Watch for ingress backends with no ready endpoints (default: true)

Alerts when an Ingress rule references a backend service that has zero ready endpoints, meaning traffic to that host/path would return an error.

๐Ÿšง Network Policy Monitor

Parameter What it does
networkPolicyMonitor.enabled ๐Ÿšง Detect overly restrictive network policies (default: true)

Detects NetworkPolicy resources that deny all ingress traffic (no ingress rules defined). Helps identify policies that may unintentionally block legitimate traffic.

๐Ÿงฉ StatefulSet Monitor

Parameter What it does
statefulSetMonitor.enabled โœ… Watch for unavailable StatefulSet pods (default: true)
statefulSetMonitor.sustainedMinutes โฑ๏ธ Minutes of unavailability before alerting, plus 15-minute rollout grace (default: 5)

Monitors StatefulSets where readyReplicas < replicas for a sustained period, with a 15-minute grace window during rollouts to avoid alerting mid-update.

๐Ÿ”„ PDB Monitor

Parameter What it does
pdbMonitor.enabled โœ… Watch for PDBs blocking voluntary disruptions (default: true)
pdbMonitor.sustainedMinutes โฑ๏ธ Minutes of blocking before alerting (default: 5)

Alerts when a PodDisruptionBudget has disruptionsAllowed=0 and currentHealthy < desiredHealthy, meaning voluntary disruptions (rollouts, node drains) are blocked.

๐Ÿญ Node Resource Monitor

Parameter What it does
nodeResourceMonitor.enabled โœ… Check node overcommit levels (default: true)
nodeResourceMonitor.intervalSeconds โฑ๏ธ How often to check (default: 300)
nodeResourceMonitor.cpuWarning โš ๏ธ CPU overcommit ratio for warning (default: 2.0)
nodeResourceMonitor.cpuCritical ๐Ÿšจ CPU overcommit ratio for critical (default: 4.0)
nodeResourceMonitor.memWarning โš ๏ธ Memory overcommit ratio for warning (default: 2.0)
nodeResourceMonitor.memCritical ๐Ÿšจ Memory overcommit ratio for critical (default: 4.0)

Periodically computes the ratio of pod resource requests vs node allocatable for CPU and memory. Data is purely in-memory โ€” no TSDB or persistent storage needed.

๐Ÿ’ฅ OOM Pattern Monitor

Parameter What it does
oomMonitor.enabled โœ… Track repeating OOMs (default: true)
oomMonitor.threshold ๐Ÿ”ข OOM count within window to flag (default: 3)
oomMonitor.windowMinutes โฑ๏ธ Sliding window in minutes (default: 60)

Tracks OOMKilled events per container in a sliding window. When the threshold is exceeded, the reason changes from OOMKilled to OOMRepeating with a hint suggesting a potential memory leak.

๐ŸŽฏ Scheduling Delay Diagnostics

Parameter What it does
scheduleMonitor.enabled โœ… Compute unschedulable delay (default: true)

When a pod is stuck Unschedulable, computes now - PodScheduled.LastTransitionTime and prepends the delay to the hint (e.g., "unschedulable for 5m30s โ€” ...").

โณ Pending Pod Threshold โ€” alert after N seconds stuck in Pending (default: 300s)

๐ŸŽฏ Severity

Parameter What it does
severityByOwnerKind Set severity per resource type, e.g. StatefulSet: "high"

Defaults: StatefulSet โ†’ ๐Ÿ”ด high, everything else โ†’ ๐ŸŸก normal

๐Ÿ”‡ Silences โ€” stop the noise

silences:
  - namespaces: ["kube-system", "monitoring"]
  - reasons: ["BackOff"]
  - podNamePatterns: ["my-fancy-pod-.*"]

๐Ÿšซ Inhibition โ€” no double alerts

Parameter What it does
inhibition.nodeSuppressesPods โœ… Don't alert on pod issues if the node itself is down (default: true)

๐Ÿ“ Custom message templates

templates:
  CrashLoopBackOff: "{{.Incident.Name}} โ€” {{.Action}} โ€” {{.Incident.Hint}}"

๐Ÿง  Correlation โ€” smart incident grouping

Parameter What it does
correlation.window โฑ๏ธ Keep incidents in memory (default: 10 min)
correlation.resolveHoldDown โฑ๏ธ Wait before sending "resolved" (default: 30s)
correlation.lifecycleInterval โฑ๏ธ Lifecycle check frequency (default: 1 min)
correlation.escalation.enabled โœ… Escalate severity on repeated crashes (default: true)
correlation.escalation.tiers ๐Ÿ“Š Restart thresholds: [3, 10, 50]
correlation.renotify.maxPerIncident ๐Ÿ”” Max re-alerts per incident (default: 3)

๐Ÿงน Smart Grouping โ€” coalesce duplicate notifications

Parameter What it does
smartGrouping.windowSeconds โฑ Grouping window in seconds (default: 60). Set to 0 to disable.

kwatch groups related incidents by the dimension that best captures each failure type's root cause. For example, OOMKilled and probe failures group by owner+namespace, node conditions group by node (not pod errors on the same node), image pull errors group by image (or globally for rate limits), and CrashLoopBackOff with a matching log signature bridges across owners. Each group notification shows affected pods, owners, nodes, or images depending on scope, with overflow counting above 1,000 entries. After a group notification is sent, the same condition will not re-notify until the underlying incident is resolved and re-occurs, preventing periodic flooding.

๐Ÿ“‹ CRD โ€” live config changes

Parameter What it does
crd.enabled Watch KwatchConfig CRs for live config updates (default: false)
apiVersion: kwatch.abahmed.dev/v1alpha1
kind: KwatchConfig
metadata:
  name: kwatch-config
  namespace: kwatch
spec:
  maxRecentLogLines: 100
  silences:
    - namespaces: ["kube-system"]

๐Ÿ”” Alert providers

๐Ÿ’ฌ Slack

Webhook mode:

Parameter What it does
alert.slack.webhook ๐Ÿ”— Slack webhook URL
alert.slack.channel ๐Ÿ“ข Override channel
alert.slack.title โœ๏ธ Custom title
alert.slack.text โœ๏ธ Custom text
alert.slack.compact ๐Ÿ“ Single-line mode

Bot Token mode:

Parameter What it does
alert.slack.token ๐Ÿ”‘ Bot token (xoxb-...)
alert.slack.channel ๐Ÿ“ข Channel to post to
alert.slack.title โœ๏ธ Custom title
alert.slack.text โœ๏ธ Custom text
alert.slack.compact ๐Ÿ“ Single-line mode

Compact mode:

alert:
  slack:
    webhook: "https://hooks.slack.com/..."
    compact: true

๐Ÿ’ก Pro tip: When using bot token mode, alerts become threaded conversations โ€” root message on first alert, updates as replies. Clean and organized! ๐Ÿงน

๐Ÿ“ฎ Provider Routing & Retry

alert:
  slack:
    webhook: "<url>"
    routes:
      - namespaces: ["production"]
        severities: ["high", "critical"]
    retry:
      maxAttempts: 3
      delay: 5s

Need a backup? Set a fallback:

alert:
  slack:
    webhook: "<url>"
    fallback: "pagerduty"    # ๐Ÿ†˜ tries PagerDuty if Slack fails
    retry:
      maxAttempts: 3

๐Ÿ’ฌ Discord

Parameter What it does
alert.discord.webhook ๐Ÿ”— Discord webhook URL
alert.discord.title โœ๏ธ Custom title
alert.discord.text โœ๏ธ Custom text

๐Ÿ“ง Email

Parameter What it does
alert.email.from ๐Ÿ“ค From address
alert.email.password ๐Ÿ”‘ From password
alert.email.host ๐Ÿ–ฅ๏ธ SMTP host
alert.email.port ๐Ÿ”Œ SMTP port
alert.email.to ๐Ÿ“ฅ Receiver email

๐Ÿšจ PagerDuty

Parameter What it does
alert.pagerduty.integrationKey ๐Ÿ”‘ PagerDuty integration key

โœˆ๏ธ Telegram

Parameter What it does
alert.telegram.token ๐Ÿ”‘ Bot token
alert.telegram.chatId ๐Ÿ’ฌ Chat ID

๐Ÿ’ผ Microsoft Teams

Parameter What it does
alert.teams.webhook ๐Ÿ”— Webhook URL
alert.teams.title โœ๏ธ Custom title
alert.teams.text โœ๏ธ Custom text

๐Ÿš€ Rocket Chat

Parameter What it does
alert.rocketchat.webhook ๐Ÿ”— Webhook URL
alert.rocketchat.text โœ๏ธ Custom text

๐ŸŒ Mattermost

Parameter What it does
alert.mattermost.webhook ๐Ÿ”— Webhook URL
alert.mattermost.title โœ๏ธ Custom title
alert.mattermost.text โœ๏ธ Custom text

๐Ÿ”” Opsgenie

Parameter What it does
alert.opsgenie.apiKey ๐Ÿ”‘ API Key
alert.opsgenie.title โœ๏ธ Custom title
alert.opsgenie.text โœ๏ธ Custom text

๐Ÿ—๏ธ Matrix

Parameter What it does
alert.matrix.homeServer ๐Ÿ–ฅ๏ธ HomeServer URL
alert.matrix.accessToken ๐Ÿ”‘ Access token
alert.matrix.internalRoomID ๐Ÿ†” Room ID
alert.matrix.title โœ๏ธ Custom title
alert.matrix.text โœ๏ธ Custom text

๐Ÿ”” DingTalk

Parameter What it does
alert.dingtalk.accessToken ๐Ÿ”‘ Access token
alert.dingtalk.secret ๐Ÿ” Signing secret
alert.dingtalk.title โœ๏ธ Custom title

๐Ÿฆ FeiShu

Parameter What it does
alert.feishu.webhook ๐Ÿ”— Webhook URL
alert.feishu.title โœ๏ธ Custom title

๐Ÿ›ก๏ธ Zenduty

Parameter What it does
alert.zenduty.integrationKey ๐Ÿ”‘ Integration Key
alert.zenduty.alertType ๐Ÿท๏ธ Alert type (default: critical)

๐Ÿ’ฌ Google Chat

Parameter What it does
alert.googlechat.webhook ๐Ÿ”— Webhook URL
alert.googlechat.text โœ๏ธ Custom text

๐Ÿ”— Custom Webhook

Parameter What it does
alert.webhook.url ๐Ÿ”— Webhook URL
alert.webhook.headers ๐Ÿ“‹ Custom headers
alert.webhook.basicAuth ๐Ÿ” Username + password

๐Ÿ› ๏ธ CLI commands

Command What it does
kwatch โ–ถ๏ธ Run the main monitor
kwatch --version โ„น๏ธ Print version
kwatch lint โœ… Validate your config
kwatch lint --strict โœ…โœ… Strict check (catches typos!)
kwatch lint --check โœ…โœ…โœ… Validate + test provider credentials
kwatch replay < events.jsonl ๐ŸŽฌ Replay past events to test

๐Ÿงน Clean up

kubectl delete -f https://raw.githubusercontent.com/abahmed/kwatch/v0.11.0/deploy/config.yaml
kubectl delete -f https://raw.githubusercontent.com/abahmed/kwatch/v0.11.0/deploy/deploy.yaml

๐Ÿ“– Not a monitoring platform โ€” and proud of it! ๐ŸŽ‰

kwatch is not a metrics collector, dashboard, or observability backend. No TSDB, no dashboards, no log storage, no query language. kwatch is the alarm โ€” your existing tools are the archive.

Need full observability? Pair kwatch with Prometheus + Grafana for metrics, or Loki for logs. kwatch handles the one thing a dashboard cannot: telling you something broke right now. โฐ


๐Ÿ‘ Contribute & Support

๐Ÿš€ Who uses kwatch?

kwatch is trusted by:

Want to add your company? Open an issue!

๐Ÿ’ป Contributors

โญ๏ธ Stargazers

Stargazers over time

๐Ÿ‘‹ Get in touch

Questions? Suggestions? Chat with us on Discord โ€” we're friendly! ๐ŸŽ‰

โš ๏ธ License

kwatch is MIT Licensed โ€” use it, fork it, share it! ๐ŸŽŠ

About

๐Ÿ‘€ monitor & detect crashes in your Kubernetes(K8s) cluster instantly

Topics

Resources

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages