Skip to content

Quick start

Three steps. No agent. No bytecode weaving. No custom runtime.

1. Add the dependency

Pulse is on Maven Central.

<dependency>
  <groupId>io.github.arun0009</groupId>
  <artifactId>pulse-spring-boot-starter</artifactId>
  <version>2.0.2</version>
</dependency>
implementation("io.github.arun0009:pulse-spring-boot-starter:2.0.2")
implementation 'io.github.arun0009:pulse-spring-boot-starter:2.0.2'
Log4j2 users — add it yourself

Pulse follows Spring Boot: Logback is the default. The starter no longer pulls spring-boot-starter-log4j2. Pulse's logback-spring.xml produces the JSON field set, PII masking, and resource attributes.

To use Log4j2 instead, exclude Boot's logging starter and add Log4j2 as you would in any Boot app:

<dependency>
  <groupId>io.github.arun0009</groupId>
  <artifactId>pulse-spring-boot-starter</artifactId>
  <version>2.0.2</version>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

Pulse's log4j2-spring.xml produces the exact same JSON shape as the Logback path. Dashboards work unchanged.

2. Point at your OTel Collector

Skip this if you already have OTLP env vars set:

export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
Don't have a Collector yet?

Pulse ships a single-command local stack — Collector, Prometheus, Grafana, Jaeger, and Loki, all wired up:

docker compose -f deploy/local-stack/docker-compose.yml up -d

Details on the local stack page.

3. Start your app and verify

The exact command depends on your build (./mvnw spring-boot:run, ./gradlew bootRun, etc.). Once it's up, ask the actuator whether spans are landing — substitute your management port (default 8080):

$ curl -s localhost:8080/actuator/health/otelExporter
{"status":"UP","details":{"lastSuccessAgeMs":1230,"totalSuccess":14}}

That's it. Every Pulse feature is on by default with sensible production defaults, and the diagnostic UI tells you exactly what's running.

What now?

  • See what's running


    Open /actuator/pulseui in your browser for a single-page summary of every Pulse feature — what's on, what's off, which configuration won.

  • Learn the model


    Concepts explains how Pulse threads context through Spring, OTel, MDC, baggage, and outbound clients.

  • Browse features


    The feature catalogue groups all 25 features by use case, with config keys and links to runbooks.

  • Tune for production


    The configuration reference covers sampling, budgets, and SLO objectives. The production checklist is the cutover bar.