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.51):

export VERSION=1.0.51
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

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/)

auth.policy: set ui.public_base_url, login providers, and paths under /opt/pipeline-monitor.

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.51   # 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)
  • 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.


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 token, alert tuning
batch_file.csv data/batch_file.csv.example Batch names and schedules
auth.policy release/auth.policy.example Admin UI, OAuth, file paths

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


Batch CSV

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

Scheduled (Daily, Hourly, Weekly, …)

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

Alerts: missed, failed, stuck, no_data

On-demand (runtime trigger)

Name,Frequency,ExpectedStartTime,AvgExecutionTime,ExpectedDayOfMonth,Status
manual_export,OnDemand,,"30 mins",,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,Status
stream_job,Continuous,,,,Active

Alerts: failed and no_data only.


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_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
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.55.tar.gz (183.8 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.55-py3-none-any.whl (195.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: inferyx_monitoring-1.0.55.tar.gz
  • Upload date:
  • Size: 183.8 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.55.tar.gz
Algorithm Hash digest
SHA256 ed1d1fd0b5dce63007f4bf271d568b06a3fb3f2bd8c62a4414a72eb29fa3d75c
MD5 0ba3fb9dc7cc4feab3e0877229dc2b14
BLAKE2b-256 14d465c6ba2abfa42fef7e6ec0ac08a75ea0466d88a0b4968ecb58bbfaba65bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for inferyx_monitoring-1.0.55-py3-none-any.whl
Algorithm Hash digest
SHA256 a82a6709bd49f9ca0eaac7e2ab8b796e13c48d04e8bc29e63744e4203f50d149
MD5 0d063e792f753ff4e188f56a3edd28da
BLAKE2b-256 01cd643e93f851ce4a83ebcf004868080f8c8bb19254fc882a693e61a0fc661a

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