Skip to content

A CLI utility to work with Spring Boot's Actuator Endpoint

License

Notifications You must be signed in to change notification settings

arkits/spring-boot-actuator-cli

Repository files navigation

Spring Boot Actuator CLI

sba-cli is a command-line utility to work with a Spring Boot application's Actuator endpoint.

actuator screenshot

Check out additional screenshots in docs/screenshots/

Usage

Quick Start

sba-cli is available as a stand-alone binary. Pre-built binaries are available in the Releases.

The most basic usage of sba-cli is to check the info of a Spring Boot app.

# ./sba-cli info -U <baseURL to your app>
$ ./sba-cli info -U http://localhost:8080
┌─────────────────────────────┐
│         SERVICE INFO        │
├──────────────┬──────────────┤
│ title        │ demo-service │
└──────────────┴──────────────┘
┌────────────────────────────────────────────────────────────┐
│                          GIT INFO                          │
├─────────────────┬──────────────────────────────────────────┤
│ branch          │ main                                     │
│ commit.time     │ 2021-03-24 01:18:38+0000                 │
│ commit.describe │ 0.0.3-6-gc6c4cdb-dirty                   │
│ commit.abbrev   │ c6c4cdb                                  │
│ commit.full     │ c6c4cdb3932d1b2f28b342fbeb1c3de1d724114e │
└─────────────────┴──────────────────────────────────────────┘

sba-cli aims to provides a more legible output for most of the default Actuator endpoints. Currently supported endpoints are - actuator,info, env, health, logfile, prometheus, metrics.

Users can still reach unsupported or custom endpoints and make use of the Inventory functionality by using the custom command.

# ./sba-cli custom \
#    -E <custom endpoint's path ID> \
#    -U <baseURL to your app> \
#    --skip-pretty-print
$ ./sba-cli custom \
    -E prometheus \
    -U http://localhost:8080 \
    --skip-pretty-print

# HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool
# TYPE jvm_buffer_total_capacity_bytes gauge
jvm_buffer_total_capacity_bytes{application="user-service",id="mapped",} 0.0
jvm_buffer_total_capacity_bytes{application="user-service",id="direct",} 81920.0
...

Inventory

Chances are that you are managing multiple micro-services. sba-cli is designed to support this is use case by allowing the user to supply an Inventory. An Inventory can be defined in a config.yaml that must be placed in the same directory as sba-cli. Refer to the config.sample.yml

After defining multiple services in your config.yaml, you can refer to a specific service by passing it's name in -S flag.

# ./sba-cli info -S <name of a specific service>
$ ./sba-cli info -S demo-service
>>> demo-service
┌─────────────────────────────┐
│         SERVICE INFO        │
├──────────────┬──────────────┤
│ title        │ demo-service │
└──────────────┴──────────────┘
┌────────────────────────────────────────────────────────────┐
│                          GIT INFO                          │
├─────────────────┬──────────────────────────────────────────┤
│ branch          │ main                                     │
│ commit.time     │ 2021-03-24 01:18:38+0000                 │
│ commit.describe │ 0.0.3-6-gc6c4cdb-dirty                   │
│ commit.abbrev   │ c6c4cdb                                  │
│ commit.full     │ c6c4cdb3932d1b2f28b342fbeb1c3de1d724114e │
└─────────────────┴──────────────────────────────────────────┘

Multiple specific services can be passed as a comma-separated string. sba-cli will iterate and print the responses for each.

$ ./sba-cli info -S demo-service,demo-service-prod
>>> demo-service
┌─────────────────────────────┐
│         SERVICE INFO        │
├──────────────┬──────────────┤
│ title        │ demo-service │
└──────────────┴──────────────┘
┌────────────────────────────────────────────────────────────┐
│                          GIT INFO                          │
├─────────────────┬──────────────────────────────────────────┤
│ branch          │ main                                     │
│ commit.time     │ 2021-03-24 01:18:38+0000                 │
│ commit.describe │ 0.0.3-6-gc6c4cdb-dirty                   │
│ commit.abbrev   │ c6c4cdb                                  │
│ commit.full     │ c6c4cdb3932d1b2f28b342fbeb1c3de1d724114e │
└─────────────────┴──────────────────────────────────────────┘
>>> demo-service-prod
┌─────────────────────────────┐
│         SERVICE INFO        │
├──────────────┬──────────────┤
│ title        │ demo-service │
└──────────────┴──────────────┘
┌────────────────────────────────────────────────────────────┐
│                          GIT INFO                          │
├─────────────────┬──────────────────────────────────────────┤
│ branch          │ main                                     │
│ commit.time     │ 2021-03-24 01:18:38+0000                 │
│ commit.describe │ 0.0.3-6-gc6c4cdb-dirty                   │
│ commit.abbrev   │ c6c4cdb                                  │
│ commit.full     │ c6c4cdb3932d1b2f28b342fbeb1c3de1d724114e │
└─────────────────┴──────────────────────────────────────────┘

Inventory Tagging

Complicated Inventories can be managed and queried easily with Tags. Each Inventory entry can have a list of string tags associated to it. During runtime, pass a query tag (multiple as a comma-separated string) and sba-cli will match the Inventory appropriately. Refer to config.sample.yml for additional details.

$ ./sba-cli health -T dev,prod
>>> demo-service-dev
┌─────────────────┐
│      HEALTH     │
├────────┬────────┤
│ status │ UP     │
└────────┴────────┘

>>> demo-service-prod
┌─────────────────┐
│      HEALTH     │
├────────┬────────┤
│ status │ UP     │
└────────┴────────┘

Debugging with Verbose

$ ./sba-cli custom -V \
    --url http://localhost:8080 \
    --auth-header "Basic YXJraXRzOmh1bnRlcjI=" \
    --endpoint health
>>> url was set... assuming impromptu definition
>>> GET http://localhost:8080
>>> Authorization: Basic YXJraXRzOmh1bnRlcjI=
>>> Proto: HTTP/1.1 Status: 200
{
  "status": "UP"
}

Development

Building + Running Locally

# Download Go dependencies
$ go mod download

# Run sba-cli
$ go run main.go