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.53.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.53-py3-none-any.whl (195.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: inferyx_monitoring-1.0.53.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.53.tar.gz
Algorithm Hash digest
SHA256 e06385fde07cee37b1acb88185eda770dfdcc4233c7e1b60aac4c580e9cdde9e
MD5 edc58e09b51bee7f4198d89006a6d246
BLAKE2b-256 cd823b458ab05cbc3941f3729bb03e8a1b0d836c17337d6fee25667f8453e4f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for inferyx_monitoring-1.0.53-py3-none-any.whl
Algorithm Hash digest
SHA256 d75d12dde8ff616e9c81096022e5d703fbdf93ca518da5ece9d365e0d88aa920
MD5 b832e6f0aeca4558517dadd612fb2077
BLAKE2b-256 95b3c3ace59f2529421b900eeb81d57859b170d94bc9f836647a534ba063188a

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