Skip to content

wlanboy/kubeeventjava

Repository files navigation

Kubernetes Event Dashboard

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

K8s Events

Java version of https://github.com/wlanboy/kubeevent

Features

Real‑time Event Stream

  • 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

Prometheus Metrics

Exposes /actuator/prometheus with:

  • Events by type (Normal, Warning)
  • Events by component (kubelet, scheduler, controller)
  • Events by namespace, deployment, pod
  • Events by node/host

Persistent Storage

  • 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

Architecture Overview

+-------------------+        +-------------------------+
| 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    |
                             +-------------------------+

Start service

mkdir data
mvn spring-boot:run

Docker build

docker 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:jlink

Docker run

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: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:jlink

Run service in cluster

cd 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:run

Create Events

kubectl 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

About

Spring Boot Kubernetes Eventlistener for namespaces to export metrics on kubernetes events

Topics

Resources

License

Stars

Watchers

Forks

Contributors