DEV Community

Cover image for Lightweight Spring Boot Monitoring Without Prometheus and Grafana
Ted Kupolov
Ted Kupolov

Posted on • Originally published at pvrlabs.xyz

Lightweight Spring Boot Monitoring Without Prometheus and Grafana

Running one Spring Boot application, or a handful of them, on a VPS still requires basic visibility.

You need to know:

  • Is the application healthy?
  • Are errors increasing?
  • Are requests slowing down?
  • Is memory usage growing?
  • Did the application restart?

You may not need a complete monitoring platform to answer those questions.

Spring Boot Actuator already exposes much of the necessary information. StatLite turns it into a focused dashboard for health, HTTP activity, latency, memory, uptime, and restarts.

It runs as a single Go binary and stores its history in SQLite.

StatLite dashboard monitoring a Spring Boot application

View StatLite on GitHub Β· Installation instructions

Why not just use Actuator directly?

Actuator exposes useful health and Micrometer metrics endpoints, but repeatedly opening JSON responses is not a convenient monitoring workflow.

Prometheus and Grafana are excellent when you need:

  • Many services or hosts
  • Flexible metric queries
  • Long retention
  • Alert routing
  • Shared organizational dashboards

Spring Boot Admin provides broader application administration and monitoring features.

For a few services on one VPS, however, a smaller dashboard may be enough. StatLite reads the Actuator endpoints you already have and presents the operational signals needed for routine checks.

Quick comparison

Tool Complexity Best fit
Raw Actuator endpoints Low Occasional manual checks
Spring Boot Admin Medium Application administration
Prometheus and Grafana High Larger observability deployments
StatLite Very low A few Spring Boot services on a VPS

These approaches can coexist. Starting with StatLite does not prevent moving to Prometheus and Grafana later.

Set up StatLite

The following example uses the runnable Spring Actuator demo included in the StatLite repository.

1. Expose Actuator health and metrics

Add the required endpoint exposure to your Spring Boot configuration:

management:
  endpoints:
    web:
      exposure:
        include: health,metrics
  endpoint:
    health:
      show-details: always
Enter fullscreen mode Exit fullscreen mode

Keep Actuator restricted to trusted networks and add authentication when required.

Start the demo application:

cd examples/spring-actuator-demo
mvn spring-boot:run
Enter fullscreen mode Exit fullscreen mode

Confirm that its endpoints respond:

curl -s http://127.0.0.1:8080/actuator/health
curl -s http://127.0.0.1:8080/actuator/metrics
Enter fullscreen mode Exit fullscreen mode

2. Install StatLite

The installation guide covers the release installer and Homebrew.

You can also build it from source:

git clone https://github.com/pvrlabs/statlite.git
cd statlite
go build -o statlite ./cmd/statlite
Enter fullscreen mode Exit fullscreen mode

3. Configure a target

Create statlite.yaml beside the binary:

server:
  listen: "127.0.0.1:9090"

storage:
  sqlite_path: "./statlite.sqlite"

polling:
  interval: "10s"
  timeout: "5s"

targets:
  - name: "spring-demo"
    actuator_base_url: "http://127.0.0.1:8080/actuator"
Enter fullscreen mode Exit fullscreen mode

This configuration:

  • Keeps the dashboard bound to localhost
  • Stores history in statlite.sqlite
  • Polls the application every ten seconds
  • Reads metrics from the application’s Actuator base URL

For Basic Auth, multiple applications, retention, and production security, see the configuration documentation.

The demo leaves Actuator unauthenticated because it binds to loopback for local testing. Do not expose the same configuration publicly without appropriate network and authentication controls.

4. Open the dashboard

Start StatLite:

./statlite --config ./statlite.yaml
Enter fullscreen mode Exit fullscreen mode

Then open:

http://127.0.0.1:9090
Enter fullscreen mode Exit fullscreen mode

The demo includes a traffic generator for populating the request, latency, and error charts:

./examples/spring-actuator-demo/generate-traffic.sh
Enter fullscreen mode Exit fullscreen mode

It generates successful, slow, database, 400, 404, and 500 responses. StatLite updates after the next configured polling interval.

Why StatLite stays small

StatLite intentionally uses a narrow architecture:

  • One Go binary
  • SQLite storage
  • No monitoring agent
  • No custom instrumentation beyond Actuator
  • Multiple Spring Boot targets in one configuration
  • Straightforward systemd deployment

It is Actuator-first: your application exposes Actuator, and StatLite provides a focused view over that data.

When StatLite is not enough

Use a broader observability platform when you need distributed tracing, centralized logs, advanced queries, alert routing, long-term retention, or dashboards spanning a large number of systems.

StatLite is not intended to replace enterprise observability. It is for the smaller operational job: monitoring a few Spring Boot services without running a full Prometheus and Grafana stack.

To try it, visit the StatLite repository and follow the installation instructions.

Top comments (0)