Skip to main content

Monitor batch pipelines via API and email alerts — install and deploy on Linux servers from PyPI

Project description

inferyx-monitoring

Batch pipeline monitor with email alerts and Admin UI.

Install directory: /opt/pipeline-monitor
Admin URL: https://<your-host>/monitoring/admin/ (nginx required)
PyPI: inferyx-monitoring


Quick reference

Task Command
Fresh install See Install from scratch
Upgrade pip install --upgraderelease.sh upgrade --skip-pip
Uninstall release.sh uninstall --skip-pip
Remove everything release.sh uninstall --purge --skip-pip
Service status sudo systemctl status inferyx-monitoring
Logs sudo journalctl -u inferyx-monitoring -n 50

Maintainer build docs: docs/DEVELOPMENT.md (not for server operators).


Prerequisites

Requirement Notes
OS Ubuntu 22.04+ (or Debian with apt)
Python 3.10+ (python3, python3-venv)
User inferyx system user (created by install script)
nginx Reverse proxy for /monitoring/admin/ and /monitoring/api/
Network SMTP, Inferyx API, Google OAuth and/or AWS IDC SAML

Install from scratch

Step 1 — Install Python package

Replace VERSION with the target release (e.g. 1.0.56):

export VERSION=1.0.56
export IM_HOME=/opt/pipeline-monitor

sudo mkdir -p "$IM_HOME"
sudo useradd --system --home-dir "$IM_HOME" --shell /usr/sbin/nologin inferyx 2>/dev/null || true

sudo -u inferyx python3 -m venv "$IM_HOME/.venv"
sudo -u inferyx "$IM_HOME/.venv/bin/pip" install --upgrade pip
sudo -u inferyx "$IM_HOME/.venv/bin/pip" install "inferyx-monitoring==${VERSION}"

Or from a local wheel:

sudo -u inferyx "$IM_HOME/.venv/bin/pip" install /path/to/inferyx_monitoring-${VERSION}-py3-none-any.whl

Step 2 — Run install script

sudo bash "$IM_HOME/.venv/share/inferyx-monitoring/release.sh" install --skip-pip

This creates:

Path Purpose
/opt/pipeline-monitor/.env SMTP, API, alert settings
/opt/pipeline-monitor/auth.policy Admin UI, OAuth, paths
/opt/pipeline-monitor/batch_file.csv Batch schedules
/opt/pipeline-monitor/secrets/ session_secret, OAuth secrets
/opt/pipeline-monitor/www/ Admin UI static files
/opt/pipeline-monitor/logs/ Monitor log
inferyx-monitoring.service systemd unit

Step 3 — Configure

sudo nano /opt/pipeline-monitor/.env
sudo nano /opt/pipeline-monitor/auth.policy
sudo nano /opt/pipeline-monitor/batch_file.csv

Required after install:

  1. .env — SMTP, PIPELINE_API_BASE_URL, PIPELINE_API_TOKEN_HEADER, alert toggles (PIPELINE_ALERT_*)
  2. batch_file.csv — batch rows with a real Token per batch (not in .env)
  3. auth.policyui.public_base_url, login providers, paths under /opt/pipeline-monitor

Secrets (never commit):

sudo mkdir -p /opt/pipeline-monitor/secrets
sudo openssl rand -hex 32 | sudo tee /opt/pipeline-monitor/secrets/session_secret
sudo chmod 600 /opt/pipeline-monitor/secrets/*
sudo chown -R inferyx:inferyx /opt/pipeline-monitor

.env templates: inferyx_pipeline_monitor/data/.env.example (in package: .venv/.../data/)

AWS IAM Identity Center (SAML 2.0)

Choose SAML 2.0 (not OAuth) when creating the AWS IDC application.

AWS console field auth.policy key Example
Application ACS URL acs_url https://devops.inferyx.com/monitoring/api/auth/callback/aws_idc
Application SAML audience entity_id https://devops.inferyx.com/monitoring
IAM Identity Center SAML issuer URL idp_entity_id from IDC metadata
IAM Identity Center sign-in URL idp_sso_url from IDC metadata
IDC certificate idp_certificate_path /opt/pipeline-monitor/secrets/aws_idc_idp.crt
"aws_idc": {
  "enabled": true,
  "entity_id": "https://devops.inferyx.com/monitoring",
  "acs_url": "https://devops.inferyx.com/monitoring/api/auth/callback/aws_idc",
  "idp_entity_id": "https://portal.sso.<region>.amazonaws.com/saml/assertion/<id>",
  "idp_sso_url": "https://portal.sso.<region>.amazonaws.com/saml/assertion/<id>",
  "idp_certificate_path": "/opt/pipeline-monitor/secrets/aws_idc_idp.crt",
  "allowed_domains": ["inferyx.com"]
}

SP metadata (optional download for AWS setup):

https://devops.inferyx.com/monitoring/api/auth/saml/aws_idc/metadata

Google Workspace stays on OAuth 2.0 (auth.google).


Step 4 — nginx

sudo cp /opt/pipeline-monitor/.venv/share/inferyx-monitoring/nginx.conf.example \
        /etc/nginx/sites-available/pipeline-monitor
sudo ln -sf /etc/nginx/sites-available/pipeline-monitor /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Edit server_name and SSL paths in the nginx file for production.

Step 5 — Verify

sudo systemctl status inferyx-monitoring
curl -s http://127.0.0.1:8090/api/health
curl -s http://127.0.0.1:8090/api/ui/status

Open https://<your-host>/monitoring/admin/ in a browser.


Upgrade

export VERSION=1.0.56   # new version
export IM_HOME=/opt/pipeline-monitor

sudo -u inferyx "$IM_HOME/.venv/bin/pip" install --upgrade "inferyx-monitoring==${VERSION}"
sudo bash "$IM_HOME/.venv/share/inferyx-monitoring/release.sh" upgrade --skip-pip

Upgrade without service restart:

sudo bash "$IM_HOME/.venv/share/inferyx-monitoring/release.sh" upgrade --skip-pip --no-restart

The upgrade script:

  • Deploys new Admin UI to /opt/pipeline-monitor/www/
  • Merges new .env keys (existing values kept)
  • Migrates batch_file.csv columns when needed (adds Token / Status; drops legacy Alert* CSV columns)
  • Updates systemd unit
  • Restarts inferyx-monitoring service

Your config is never overwritten: .env secrets, batch_file.csv rows, and auth.policy values stay as-is unless you edit them.

Post-upgrade checklist (1.0.56+)

  1. Open Admin UI → Batch Data (or edit CSV) and set Token for each Active batch
  2. In Application Settings / .env, set alert toggles as needed (PIPELINE_ALERT_MISSED, _FAILED, _RUNNING, _NO_DATA)
  3. Remove unused PIPELINE_API_TOKEN= from .env if present (no longer used)
  4. Confirm PIPELINE_API_TOKEN_HEADER is still set (e.g. token)
  5. sudo systemctl status inferyx-monitoring and check logs if API calls fail

Uninstall / remove

Stop service, keep config

Keeps /opt/pipeline-monitor (.env, CSV, secrets, logs):

sudo bash /opt/pipeline-monitor/.venv/share/inferyx-monitoring/release.sh uninstall --skip-pip

Remove everything

Deletes /opt/pipeline-monitor entirely:

sudo bash /opt/pipeline-monitor/.venv/share/inferyx-monitoring/release.sh uninstall --purge --skip-pip

Manual cleanup (optional)

# nginx
sudo rm -f /etc/nginx/sites-enabled/pipeline-monitor
sudo rm -f /etc/nginx/sites-available/pipeline-monitor
sudo nginx -t && sudo systemctl reload nginx

# service user (only if nothing else uses it)
sudo userdel inferyx 2>/dev/null || true

Reinstall from scratch

After --purge, repeat Install from scratch.


Configuration files

File Template Description
.env data/.env.example SMTP, API base URL / token header, alert toggles
batch_file.csv data/batch_file.csv.example Batch names, schedules, per-batch Token
auth.policy release/auth.policy.example Admin UI, OAuth/SAML, file paths

All paths in auth.policy should point under /opt/pipeline-monitor/ on the server.


Batch CSV

Required columns: Name, Frequency, Token
Optional: ExpectedStartTime, AvgExecutionTime, ExpectedDayOfMonth, Status (Active / Suspended)

API auth uses the Token column per batch (header name from PIPELINE_API_TOKEN_HEADER in .env). There is no global PIPELINE_API_TOKEN.

Frequency: Daily, Hourly, Monthly, MondaySunday, OnDemand, Continuous.
Use a weekday name for weekly jobs (do not use Weekly). For multiple runs per day, set several times in ExpectedStartTime.

Alert types are enabled/disabled globally in .env (Application Settings), not in the CSV:

Variable Controls Default
PIPELINE_ALERT_MISSED Did not start (missed) true
PIPELINE_ALERT_FAILED Failed status true
PIPELINE_ALERT_RUNNING Running too long / stuck true
PIPELINE_ALERT_NO_DATA API/auth lookup failure true

Scheduled (Daily, Hourly, Weekly, …)

Name,Frequency,ExpectedStartTime,AvgExecutionTime,ExpectedDayOfMonth,Token,Status
payroll_job,Daily,9:00:00,"30 mins",,YOUR_TOKEN,Active

Alerts: missed, failed, stuck, no_data (when enabled in .env)

On-demand (runtime trigger)

Name,Frequency,ExpectedStartTime,AvgExecutionTime,ExpectedDayOfMonth,Token,Status
manual_export,OnDemand,,"30 mins",,YOUR_TOKEN,Active

Use OnDemand (or Adhoc, Manual, Unscheduled). Leave start time empty.
AvgExecutionTime enables stuck alerts (API start + avg + grace).
Polling uses CHECK_WINDOW_MINUTES windows, not 24/7.

Continuous (always-on)

Name,Frequency,ExpectedStartTime,AvgExecutionTime,ExpectedDayOfMonth,Token,Status
stream_job,Continuous,,,,YOUR_TOKEN,Active

Alerts: failed and no_data only (when enabled in .env).


Alert tuning (.env)

Key variables (full list in .env.example):

Variable Default Purpose
PIPELINE_CHECK_MODE schedule_windows Poll in short windows vs continuous
PIPELINE_CHECK_WINDOW_MINUTES 10 Poll window length
PIPELINE_SCHEDULE_GRACE_MINUTES 5 Delay before missed/stuck alerts
PIPELINE_ALERT_MISSED true Enable missed (did not start) alerts
PIPELINE_ALERT_FAILED true Enable failed-status alerts
PIPELINE_ALERT_RUNNING true Enable stuck / running-too-long alerts
PIPELINE_ALERT_NO_DATA true Enable API/auth error alerts
PIPELINE_AUDIT_RETENTION_DAYS 30 Keep admin audit JSONL entries for N days (0 = forever)
PIPELINE_ALERT_ONCE_PER_DAY_ALL_SCENARIOS true One new email per issue per day
PIPELINE_ALERT_REPLY_TO_THREAD false Follow-ups as reply-all in same thread

Test email threading:

sudo -u inferyx /opt/pipeline-monitor/.venv/bin/inferyx-monitoring --test-mail-thread

Troubleshooting

Symptom Fix
No such file ... release.sh Run pip install inferyx-monitoring first
Service restart loop Check .envjournalctl -u inferyx-monitoring -n 50
nginx 404 on /monitoring/admin/ Use nginx.conf.example; check ui_base_path in auth.policy
Admin UI "Unavailable" curl http://127.0.0.1:8090/api/ui/status
Missed vs no_data Empty API after schedule → missed; API error → no_data
Batch API 401 / no_data Set Token on that CSV row; check PIPELINE_API_TOKEN_HEADER
Alerts not sending Check PIPELINE_ALERT_MISSED / _FAILED / _RUNNING / _NO_DATA in .env
OAuth / SAML login fails Google: match redirect_uri. AWS IDC: use SAML 2.0; match acs_url / entity_id; check IdP cert file

See CHANGELOG.md.


Service commands

sudo systemctl start inferyx-monitoring
sudo systemctl stop inferyx-monitoring
sudo systemctl restart inferyx-monitoring
sudo systemctl status inferyx-monitoring
sudo journalctl -u inferyx-monitoring -f

Or via package CLI:

sudo -u inferyx /opt/pipeline-monitor/.venv/bin/inferyx-monitoring-ctl status
sudo -u inferyx /opt/pipeline-monitor/.venv/bin/inferyx-monitoring-ctl restart

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

inferyx_monitoring-1.0.60.tar.gz (197.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

inferyx_monitoring-1.0.60-py3-none-any.whl (208.8 kB view details)

Uploaded Python 3

File details

Details for the file inferyx_monitoring-1.0.60.tar.gz.

File metadata

  • Download URL: inferyx_monitoring-1.0.60.tar.gz
  • Upload date:
  • Size: 197.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for inferyx_monitoring-1.0.60.tar.gz
Algorithm Hash digest
SHA256 06fbc8dbefe7c48aac0fae71514a89762bcbff35e3609531689b41476f9f76b0
MD5 3198c7a5a484a88fe10a7d9e51612fe0
BLAKE2b-256 ce39b69ad94c3b6ed5a9300a579c1b41b65f3cae1d2ac23775c276967d9eeae5

See more details on using hashes here.

File details

Details for the file inferyx_monitoring-1.0.60-py3-none-any.whl.

File metadata

File hashes

Hashes for inferyx_monitoring-1.0.60-py3-none-any.whl
Algorithm Hash digest
SHA256 9860a1d189245573c9ddc7236097ce8e8ca15ce2078eb0ff8858e085c5a619b3
MD5 f01d1c9f595bd264abe1269b9ec0b00e
BLAKE2b-256 f56046a0cc7bd6eb3dbc0154544010d39a4c1459722fc013fbd3b4bd45eafe88

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page