A lightweight, real‑time dashboard for collecting, storing, searching, and visualizing Kubernetes Events. This project provides:
- A Spring Boot backend that watches Kubernetes events, stores them in a database, and exposes REST + SSE endpoints
- A minimal frontend for live event streaming, searching, filtering, and pagination
- Prometheus metrics for monitoring event activity
- A clean, self‑contained solution for debugging clusters and understanding workload behavior
Java version of https://github.com/wlanboy/kubeevent
- Uses Kubernetes Informer API (SharedIndexInformer)
- Streams events via Server‑Sent Events (SSE)
- Client‑side filtering (type, reason, message, namespace, involved object)
- Automatic deduplication via uid+count
Exposes /actuator/prometheus with:
- Events by type (Normal, Warning)
- Events by component (kubelet, scheduler, controller)
- Events by namespace, deployment, pod
- Events by node/host
- Stores all events in H2 Database (JPA/Hibernate)
- Automatic deduplication (unique constraint on uid+count)
- Automatic retention: events older than 7 days are deleted
- Allows historical search
+-------------------+ +-------------------------+
| Kubernetes API | -----> | Spring Boot Watcher |
| (Events) | | (K8sWatcherService.java)|
+-------------------+ +-------------------------+
|
v
+------------------+
| H2 / JPA Storage |
+------------------+
|
v
+-------------------+ +-------------------------+
| Frontend (HTML/JS)| <----> | Spring Boot REST + SSE |
| Live Stream + UI | | /events/stream |
+-------------------+ | /events/search |
| /actuator/prometheus |
+-------------------------+mkdir data
mvn spring-boot:rundocker build -t kubeevent:latest .
docker build -f Dockerfile25Jlink -t kubeevent:jlink .
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep "kubeevent"
kubeevent jlink 410MB
kubeevent latest 864MB
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive kubeevent:jlinkdocker run --rm --name kubeeventjava \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
-e DB_PATH="jdbc:h2:file:/app/data/events;DB_CLOSE_DELAY=-1;NON_KEYWORDS=count" \
-e POD_NAMESPACE="kubeeventjava,simpleservice,randomfail" \
kubeevent:latest
docker run --rm --name kubeeventjava \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
-e DB_PATH="jdbc:h2:file:/app/data/events;DB_CLOSE_DELAY=-1;NON_KEYWORDS=count" \
-e POD_NAMESPACE="kubeeventjava,simpleservice,randomfail" \
kubeevent:jlinkcd kubeevent-chart
helm install kubeevent . -n kubeevent --create-namespace
cd ..
curl -fsSL https://raw.githubusercontent.com/metalbear-co/mirrord/main/scripts/install.sh | bash
POD=$(kubectl get pod -n kubeeventjava -l app=kubeeventjava -o jsonpath='{.items[0].metadata.name}')
mirrord exec -t pod/$POD -n kubeeventjava -- mvn spring-boot:run
# or
mirrord exec -t deployment/kubeeventjava -n kubeeventjava -- mvn spring-boot:runkubectl create deployment demoapp -n kubeeventjava --image=nginx
kubectl scale deployment demoapp -n kubeeventjava --replicas=2
kubectl scale deployment demoapp -n kubeeventjava --replicas=0
kubectl delete deployment demoapp -n kubeeventjava