v1.0 · MIT · ~1500 LOC Go

Kubernetes alerts
that just work.

Event-driven monitoring for developers and startups on their first cluster. One Pod, one ConfigMap, ~64Mi of memory. Slack, email, and webhooks out of the box.

~ install kpulse
curl -fsSL https://kpulse.io/install.sh | bash
1
Pod
~64Mi
Memory
12
Monitors
5
Channels

// why kpulse

The gap before Prometheus.

Day-1 ready

Install, paste one Slack webhook, you have alerts on the 12 most common failure modes. No tuning weekend required.

No time-series stack

No Prometheus, no Grafana, no Alertmanager, no PVCs. kpulse listens to the Kubernetes API and sends.

Sane defaults

All 12 monitors on. Thresholds tuned to be silent on a healthy cluster. Dedupe and digest built-in.

// 12 monitors out of the box

The failures that wake teams up.

Each fires on a tuned threshold. Each can be silenced or rerouted via ConfigMap.

docs/monitors.md →
pod_crashes
critical

CrashLoopBackOff, OOMKilled, ImagePullBackOff

pod_restarts
warning

> 5 restarts in 15 min

warning_events
info

Warning k8s Events, noise filtered

pvc_usage
warn/crit

PVC > 80% warn, > 90% crit

node_conditions
critical

DiskPressure, MemoryPressure, NotReady

node_disk
warn/crit

rootfs/imagefs > 85% warn, > 92% crit

tls_cert_expiry
warn/crit

TLS Secret < 14d warn, < 3d crit

rollout_stuck
warning

Deployment/StatefulSet rolling > 15 min

job_failed
warning

Job condition Failed=True

cronjob_missed
warning

> 2 missed schedules

hpa_at_max
warning

HPA pinned at maxReplicas > 30 min

daemonset_unscheduled
warning

desired != ready > 10 min

// install

Three commands. One alert pipeline.

  1. 1

    Install

    $ install
    curl -fsSL https://kpulse.io/install.sh | bash
  2. 2

    Configure a channel

    $ configure
    kubectl -n kpulse edit configmap kpulse-config   # set cluster.name, enable a channel
    kubectl -n kpulse edit secret kpulse-secrets     # add e.g. SLACK_WEBHOOK_URL
    kubectl -n kpulse rollout restart deploy/kpulse
  3. 3

    Test it

    $ test
    kubectl -n kpulse port-forward svc/kpulse 8080:8080 &
    curl 'http://localhost:8080/test-channel?name=slack'
Raw manifest
kubectl apply -f https://github.com/dnl555/kpulse/releases/latest/download/kpulse.yaml
Helm
helm install kpulse ./charts/kpulse
Local build
git clone … && make build image

// channels

Ping the channel
of your choice.

Pick any subset. Every alert goes through the same dedupe and digest engine before it leaves the cluster.

Slack
Webhook URL, threaded digests.
SMTP Email
Plain SMTP, no provider lock-in.
Webhook
JSON POST to any URL.
Discord
Native embed format.
MS Teams
Adaptive card payloads.

kpulse IS

  • Day-1 alerts on common failures
  • Lightweight: 1 Pod, ~64Mi RAM
  • Slack / SMTP / Webhook / Discord / Teams
  • Sensible thresholds out of the box
  • Dedupe + digest engine

kpulse is NOT

  • Not a metrics store
  • No PromQL or time-series
  • No dashboard or UI in v1
  • No silencing schedules / on-call
  • Not a Prometheus replacement

Need those? Run Prometheus + Grafana + Alertmanager. kpulse covers the gap before you're ready for that stack — and keeps doing the noisy "did Kubernetes break again" work after.

// faq

Questions.

Does kpulse replace Prometheus?

No. It covers the alerting gap before you've set up Prometheus, and continues handling the noisy 'did Kubernetes break?' alerts alongside it.

How much does it cost to run?

One Pod, ~64Mi memory, ~10m CPU. On most clusters, the overhead is invisible.

What permissions does it need?

Read access to Pods, Events, PVCs, Nodes, Deployments, StatefulSets, Jobs, CronJobs, HPAs, DaemonSets, and Secrets (for TLS expiry checks).

Can I silence specific alerts?

Not via silencing rules. You can disable monitors entirely or tune thresholds in the ConfigMap. For full silencing, route to Alertmanager.

Is it open source?

Yes. MIT licensed. ~1500 LOC of Go in 7 packages. Issues and PRs welcome.

Stop discovering crashes
from your users.

One command. One Slack webhook. Twelve fewer pages at 3am.

~ get started
curl -fsSL https://kpulse.io/install.sh | bash