Skip to main content

⚙️ Deckhouse Prom++ Installer

· 5 min read
Yevgeniy Goncharov
Maintainer of OpenBLD.net

Installer, Updater, Uninstaller - Deckhouse Prom++

promppctl.sh is a native Linux installer and lifecycle helper for Deckhouse Prom++.

It installs Prom++ without Docker, creates a systemd service, can safely migrate an existing Prometheus TSDB copy, can perform release updates from GitHub Releases, and can roll back to the original prometheus.service.

Features

  • Native installation (no Docker).
  • Automatic latest release detection from the official GitHub repository.
  • Optional pinned release or custom release URL.
  • systemd service generation.
  • Safe Prometheus data migration:
    • old /var/lib/prometheus remains untouched;
    • data is copied into /var/lib/prompp;
    • WAL is converted with prompptool walvanilla.
  • Clean install mode for machines without Prometheus.
  • Automatic config creation:
    • uses existing /etc/prometheus/prometheus.yml if present;
    • otherwise tries to use an example config from the release archive;
    • otherwise creates a minimal working config.
  • Release update command:
    • downloads the latest release;
    • extracts and validates binaries;
    • stops prompp.service;
    • backs up current binaries;
    • installs new binaries;
    • starts prompp.service.
  • Rollback command:
    • stops Prom++;
    • removes Prom++ service/binaries;
    • starts original prometheus.service if it exists.
  • Flexible environment overrides for paths, ports, retention, migration behavior and release selection.

Default paths

ItemDefault
Prom++ binary/usr/local/bin/prompp
Prom++ tool/usr/local/bin/prompptool
Install dir/opt/prompp
Config file/etc/prometheus/prometheus.yml
Prom++ data dir/var/lib/prompp
Old Prometheus data dir/var/lib/prometheus
Systemd unit/etc/systemd/system/prompp.service
Listen address127.0.0.1:9090
Retention15d
User/groupprometheus:prometheus

Requirements

The script expects a Linux host with systemd.

Required commands:

curl tar install find cp date grep sed awk tr chmod chown getent id

Optional but recommended:

rsync

If rsync is not installed, the script falls back to cp -a for TSDB migration.

Installation

Download or copy the script:

chmod +x promppctl.sh

Install Prom++ using the latest release:

sudo ./promppctl.sh install

By default the installer:

  1. detects the latest Prom++ release from GitHub;
  2. downloads the matching amd64 or arm64 archive;
  3. installs prompp and prompptool;
  4. creates or reuses /etc/prometheus/prometheus.yml;
  5. migrates existing Prometheus data if /var/lib/prometheus exists;
  6. creates prompp.service;
  7. starts Prom++ on 127.0.0.1:9090.

Migration from Prometheus

Default migration mode is enabled:

MIGRATE_DATA=1

During installation, if /var/lib/prometheus exists and contains data, the script performs a safe migration:

/var/lib/prometheus old Prometheus data, left untouched
/var/lib/prompp copied data converted for Prom++
/var/lib/prometheus.backup.<date> backup copy

Migration flow:

  1. Stops prometheus.service, if running.
  2. Disables prometheus.service, if present.
  3. Creates a backup of /var/lib/prometheus.
  4. Copies /var/lib/prometheus/ to /var/lib/prompp/.
  5. Runs:
prompptool walvanilla --working-dir /var/lib/prompp
  1. Starts prompp.service.

Important

Prometheus and Prom++ must not use the same storage.tsdb.path at the same time.

This script intentionally does not modify /var/lib/prometheus. It copies data into /var/lib/prompp and converts WAL only in the copied directory.

Environment variables

Release variables

VariableDefaultDescription
GITHUB_REPOdeckhouse/promppGitHub repository
PROMPP_VERSIONlatestRelease tag or latest
PROMPP_ARCHautoauto, amd64, arm64
PROMPP_URLemptyDirect asset URL; overrides GitHub API detection

Examples:

sudo PROMPP_VERSION="v0.8.0-rc3" ./promppctl.sh install
sudo PROMPP_ARCH="amd64" ./promppctl.sh latest-url
sudo PROMPP_URL="https://github.com/deckhouse/prompp/releases/download/v0.8.0-rc3/prompp-binaries-amd64.tar.gz" ./promppctl.sh install

Service and path variables

VariableDefaultDescription
PROMPP_USERprometheusLinux user for service
PROMPP_GROUPprometheusLinux group for service
INSTALL_DIR/opt/promppInstall and backup directory
BIN_PATH/usr/local/bin/promppProm++ binary path
TOOL_PATH/usr/local/bin/prompptoolProm++ tool path
CONFIG_DIR/etc/prometheusConfig directory
CONFIG_FILE/etc/prometheus/prometheus.ymlPrometheus-compatible config
DATA_DIR/var/lib/promppProm++ data dir
OLD_DATA_DIR/var/lib/prometheusExisting Prometheus data dir
BACKUP_ROOT/var/libBackup root for Prometheus data
SERVICE_FILE/etc/systemd/system/prompp.serviceSystemd unit path
LISTEN_ADDRESS127.0.0.1:9090Prom++ web listen address
RETENTION_TIME15dTSDB retention time

Examples:

sudo LISTEN_ADDRESS="0.0.0.0:9090" ./promppctl.sh install
sudo DATA_DIR="/data/prompp" RETENTION_TIME="30d" ./promppctl.sh install
sudo CONFIG_FILE="/etc/prompp/prometheus.yml" ./promppctl.sh install

Migration variables

VariableDefaultDescription
MIGRATE_DATA1Migrate existing Prometheus data copy
FORCE_MIGRATE0Recreate DATA_DIR from OLD_DATA_DIR
REPLACE_PROMETHEUS1Stop/disable prometheus.service during install

Examples:

Clean install without migration:

sudo MIGRATE_DATA=0 ./promppctl.sh install

Test Prom++ next to Prometheus:

sudo MIGRATE_DATA=0 REPLACE_PROMETHEUS=0 LISTEN_ADDRESS="127.0.0.1:9091" ./promppctl.sh install

Force re-copy and re-convert old Prometheus data:

sudo FORCE_MIGRATE=1 ./promppctl.sh install

Install without stopping vanilla Prometheus:

sudo REPLACE_PROMETHEUS=0 LISTEN_ADDRESS="127.0.0.1:9091" ./promppctl.sh install

Typical workflows

Replace existing Prometheus on the same port

sudo ./promppctl.sh install
curl http://127.0.0.1:9090/-/ready

Run Prom++ side by side for testing

sudo MIGRATE_DATA=0 REPLACE_PROMETHEUS=0 LISTEN_ADDRESS="127.0.0.1:9091" ./promppctl.sh install
curl http://127.0.0.1:9091/-/ready

Replace Prometheus and expose to remote Grafana

sudo LISTEN_ADDRESS="0.0.0.0:9090" ./promppctl.sh install

Make sure firewall rules allow only trusted hosts.

Notes

  • Prom++ is intended to be Prometheus-compatible for configs, API and PromQL workflows.
  • The script keeps vanilla Prometheus data untouched to make rollback simple.
  • Never run Prometheus and Prom++ against the same TSDB directory simultaneously.
  • For production exposure, prefer 127.0.0.1 plus reverse proxy/VPN/firewall rules over raw public access.

Repository

Credits


Updates