perf-monitor
import { Aside, Steps } from ‘@astrojs/starlight/components’;
perf-monitor schedules your existing JMeter, k6, and Gatling scripts as production monitors — running them on a cron against live endpoints and alerting on threshold breaches.
It runs your scripts on your infrastructure. No new DSL to learn, no agents to install on production hosts.
| Tier | Monitors | Min Interval | Price |
|---|---|---|---|
| Community | 5 | 15 min | Free |
| Professional | 50 | 1 min | £299/year |
| Enterprise | Unlimited | 1 min + SSO/RBAC | £799/year |
Requirements
Section titled “Requirements”- Docker and Docker Compose
- Access to
registry.martkos-it.co.ukfor agent images (requires license key) - Outbound network access from the Docker host to your production endpoints
Installation
Section titled “Installation”-
Download
-
Extract and configure
Terminal window unzip perf-monitor.zip && cd perf-monitorcp .env.example .envMinimum required values in
.env:Terminal window APP_SECRET_KEY=generate-a-random-32-char-stringDATABASE_URL=postgres://perf:changeme@postgres:5432/perfmonitorDB_USER=perfDB_PASSWORD=changemeDB_NAME=perfmonitorREDIS_URL=redis://redis:6379REDIS_PASSWORD=changemeALERT_ENCRYPTION_KEY=another-32-char-random-stringPERF_MONITOR_LICENSE_KEY=your-license-key -
Start
Terminal window docker compose up -ddocker compose ps # all services should reach 'healthy' -
Access the dashboard
http://localhost:8000/app/
Creating Monitors
Section titled “Creating Monitors”Via the dashboard → Monitors → New Monitor:
| Field | Description |
|---|---|
| Name | Human-readable label |
| Script | Upload a .jmx, .js, or .scala file |
| Schedule | Cron expression (e.g., */15 * * * *) |
| Tool | Auto-detected from file extension |
| Thresholds | Latency (ms), error rate (%), Apdex score |
Common Cron Patterns
Section titled “Common Cron Patterns”*/5 * * * * — every 5 minutes*/15 * * * * — every 15 minutes (Community minimum)0 * * * * — hourly0 6 * * * — daily at 06:000 9 * * 1-5 — weekdays at 09:00Alerting
Section titled “Alerting”Configure alerting channels in .env or via Settings → Alerts in the dashboard.
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...SLACK_CHANNEL=#perf-alertsSMTP_HOST=smtp.example.comSMTP_PORT=587SMTP_USER=alerts@example.comSMTP_PASSWORD=...ALERT_FROM_EMAIL=alerts@example.comALERT_TO_EMAIL=oncall@example.comPagerDuty
Section titled “PagerDuty”PAGERDUTY_INTEGRATION_KEY=...Webhook
Section titled “Webhook”ALERT_WEBHOOK_URL=https://your-system.example.com/hooks/perfScript Requirements
Section titled “Script Requirements”Scripts run unmodified. The executor agents handle tool invocation. Requirements:
- JMeter (
.jmx): No GUI listeners. Use non-GUI-friendly samplers. Command-line properties override VU count if needed. - k6 (
.js): Standard k6 script.__VUand__ITERare available. Avoidopen()in VU functions. - Gatling (
.scala): Standard simulation. The agent invokesgatling.sh -s SimulationClass.
Passing Parameters
Section titled “Passing Parameters”Override script parameters at monitor level (avoids hardcoding in scripts):
{ "parameters": { "TARGET_HOST": "https://api.production.example.com", "VUS": "10", "DURATION": "60s" }}In JMeter: ${__P(TARGET_HOST)}. In k6: __ENV.TARGET_HOST. In Gatling: System.getProperty("TARGET_HOST").
Agents (Remote Execution)
Section titled “Agents (Remote Execution)”To test from multiple geographic locations, deploy remote executor agents:
# On the remote hostdocker run -d \ -e AGENT_ID=eu-west-agent \ -e API_URL=https://monitor.example.com \ -e REGISTRATION_SECRET=${AGENTS_REGISTRATION_SECRET} \ registry.martkos-it.co.uk/perf-monitor-agent:1.0.0The agent registers with the perf-monitor server and receives script execution jobs.
perf-results-db Integration
Section titled “perf-results-db Integration”Push monitor results to perf-results-db for centralised trending:
PERF_RESULTS_DB_URL=http://perf-results-db:4000PERF_RESULTS_DB_API_KEY=prdb_your_keyPERF_RESULTS_DB_PROJECT_ID=your-project-uuidWhen configured, every monitor run is automatically uploaded after completion.
Data Retention
Section titled “Data Retention”RETENTION_DAYS_DEFAULT=90 # Default retention for monitor runsConfigure per-monitor in the dashboard → Monitor Settings → Data Retention.
Upgrading
Section titled “Upgrading”- Download the new release bundle
- Replace
docker-compose.yml— do not overwrite.env docker compose up -d- Verify migrations:
docker compose logs api | grep -i migrat
perf-monitor stores execution metadata (timestamps, metrics, thresholds) and your script files. It does not store request/response bodies by default. You are the data controller. Configure retention to comply with your data minimisation obligations.