tutorial

Monitoring DagsHub with Vigilmon

DagsHub is a self-hosted collaborative ML platform combining Git hosting, DVC storage, and MLflow tracking — but Git server failures and DVC storage outages are silent without monitoring. Here's how to monitor DagsHub's web server, MLflow API, DVC storage, and annotation integrations with Vigilmon.

DagsHub is the GitHub-like hub for ML projects — combining Git repository hosting, DVC (Data Version Control) support, MLflow experiment tracking, and Jupyter notebook sharing in a single self-hosted platform. When the Git server goes down or DVC storage becomes unreachable, data scientists lose access to datasets and model artifacts without warning. Vigilmon gives you continuous monitoring of DagsHub's web server, Git endpoints, MLflow API, DVC storage, and annotation integrations — so you catch failures before they block your team's work.

What You'll Set Up

  • HTTP uptime monitor for the DagsHub web application (port 3000)
  • Git server health checks (HTTPS and SSH endpoints)
  • DVC storage health monitoring (S3-compatible endpoint)
  • MLflow tracking server health (MLflow API at /api/2.0)
  • PostgreSQL database connectivity
  • Object storage health for large files
  • Jupyter notebook rendering endpoint
  • Label annotation integration health
  • SSL certificate expiry alerts

Prerequisites

  • DagsHub self-hosted deployment running (Python/Go server at port 3000)
  • Web application accessible at port 3000 or via a reverse-proxied domain
  • A free Vigilmon account

Step 1: Monitor the DagsHub Web Application

The DagsHub web server at port 3000 is the core of the platform — repository browsing, experiment dashboard, and all collaboration features live here. If it's down, your team has no access to any ML projects.

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter the web app URL: https://dagshub.yourdomain.com/ (or http://localhost:3000/).
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. Enable Keyword check and look for DagsHub in the response body.
  7. Click Save.

If DagsHub exposes a dedicated health endpoint, prefer that:

curl https://dagshub.yourdomain.com/-/health
# {"status": "ok"}

Use /health or /-/health if available — these check internal dependencies without returning full HTML pages.


Step 2: Monitor the Git Server (HTTPS)

DagsHub hosts Git repositories for ML projects. The HTTPS Git endpoint is how most users clone, push, and pull. If it fails, version control operations break for the entire team.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter the Git info endpoint: https://dagshub.yourdomain.com/info/refs?service=git-upload-pack (replace with a real repo path like https://dagshub.yourdomain.com/username/repo.git/info/refs?service=git-upload-pack).
  3. Set Expected HTTP status to 200 or 401 (401 means the Git server is up but requires authentication — that's expected behavior).
  4. Set Check interval to 2 minutes.
  5. Click Save.

A 200 or 401 on the /info/refs endpoint confirms the Git HTTP smart protocol is working. A 502 or 503 means the Git service layer is down.


Step 3: Monitor the Git SSH Endpoint (TCP)

SSH Git operations (git clone git@dagshub.yourdomain.com:...) use port 22 or a custom SSH port. TCP monitoring confirms the SSH service is accepting connections.

  1. Click Add MonitorTCP Port.
  2. Enter your DagsHub host.
  3. Set Port to 22 (or your custom SSH port).
  4. Set Check interval to 2 minutes.
  5. Click Save.

If you use a non-standard SSH port for Git, set that port instead. A TCP connection to port 22 doesn't require authentication — it just confirms the SSH daemon is listening.


Step 4: Monitor DVC Storage Health

DagsHub provides DVC remote storage (S3-compatible) for large dataset and model files. When teams run dvc push or dvc pull, they're hitting this endpoint. Storage outages silently break data versioning workflows.

For DVC's S3-compatible storage endpoint:

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter the S3-compatible storage endpoint: https://dagshub.yourdomain.com/storage/ or the MinIO endpoint URL.
  3. Set Expected HTTP status to 200 or 403 (403 on a bucket listing means the service is reachable but access is restricted — expected for authenticated storage).
  4. Set Check interval to 5 minutes.
  5. Click Save.

For a deeper write-read-delete test from within your infrastructure:

import boto3
from botocore.config import Config

def check_dvc_storage(request):
    # DagsHub uses S3-compatible storage with a custom endpoint
    s3 = boto3.client(
        's3',
        endpoint_url='https://dagshub.yourdomain.com/storage',
        aws_access_key_id='your-dagshub-token',
        aws_secret_access_key='your-dagshub-password',
        config=Config(signature_version='s3v4')
    )
    test_key = '.dagshub-healthcheck'
    bucket = 'your-dvc-bucket'
    try:
        s3.put_object(Bucket=bucket, Key=test_key, Body=b'ok')
        s3.get_object(Bucket=bucket, Key=test_key)
        s3.delete_object(Bucket=bucket, Key=test_key)
        return JsonResponse({'status': 'ok', 'dvc_storage': 'reachable'})
    except Exception as e:
        return JsonResponse({'status': 'error', 'detail': str(e)}, status=503)

Step 5: Monitor the MLflow Tracking Server

DagsHub embeds MLflow for experiment tracking. SDK clients (Python scripts, notebooks) call the MLflow API to log metrics and parameters. If the MLflow API is down, experiment data is lost silently during training runs.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter: https://dagshub.yourdomain.com/api/2.0/mlflow/experiments/list.
  3. Set Expected HTTP status to 200 or 401 (401 means MLflow is up but requires authentication).
  4. Set Check interval to 2 minutes.
  5. Click Save.

Verify MLflow is responding:

curl -u username:token \
  https://dagshub.yourdomain.com/api/2.0/mlflow/experiments/list
# {"experiments": [...]}

A successful response confirms the MLflow tracking server is accepting API calls. An MLflow outage is particularly insidious because training scripts continue running but lose all experiment data.


Step 6: Monitor PostgreSQL Connectivity (TCP)

PostgreSQL stores DagsHub's repositories, users, experiments, and collaboration data. A database outage brings the entire platform down.

  1. Click Add MonitorTCP Port.
  2. Enter your PostgreSQL host.
  3. Set Port to 5432.
  4. Set Check interval to 1 minute.
  5. Click Save.

Add a database health endpoint to your DagsHub deployment:

from sqlalchemy import text
from flask import jsonify

def db_health():
    try:
        db.session.execute(text("SELECT 1"))
        return jsonify({'status': 'ok', 'database': 'connected'})
    except Exception as e:
        return jsonify({'status': 'error', 'detail': str(e)}), 503

Step 7: Monitor Object Storage for Large Files

DagsHub stores large dataset files and model artifacts in S3 or MinIO (separate from DVC storage in some configurations). If this storage is unreachable, notebook renders and artifact downloads fail.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter your MinIO or S3 health endpoint: http://minio.yourdomain.com:9000/minio/health/live.
  3. Set Expected HTTP status to 200.
  4. Set Check interval to 5 minutes.
  5. Click Save.

MinIO exposes /minio/health/live and /minio/health/ready endpoints specifically for health checks:

curl http://localhost:9000/minio/health/live
# 200 OK (empty body)

Step 8: Monitor Jupyter Notebook Rendering

DagsHub renders Jupyter notebooks stored in repositories in the browser. If the render endpoint is down, notebooks show as raw JSON — a poor experience that teams notice immediately.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter a known notebook render URL: https://dagshub.yourdomain.com/username/repo/blob/main/notebook.ipynb.
  3. Set Expected HTTP status to 200.
  4. Enable Keyword check and look for ipynb or jupyter in the response body.
  5. Set Check interval to 10 minutes.
  6. Click Save.

The notebook render endpoint exercises the full DagsHub rendering pipeline. A failure here while the main app returns 200 indicates a rendering service regression.


Step 9: Monitor Label Studio Annotation Integration

If DagsHub is configured with Label Studio for annotation projects, the annotation API is a critical integration point. Label Studio project API failures silently block annotation workflows.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter the Label Studio health endpoint: http://label-studio.yourdomain.com/health.
  3. Set Expected HTTP status to 200.
  4. Set Check interval to 5 minutes.
  5. Click Save.

Label Studio exposes a /health endpoint that returns:

{"status": "UP"}

If Label Studio is embedded within the DagsHub deployment, the URL will be under the DagsHub domain. Check your deployment configuration for the correct path.


Step 10: SSL Certificate Expiry Alerts

DagsHub handles HTTPS for web access, Git HTTPS operations, MLflow API calls, and DVC storage — all on your domain. A certificate expiry breaks all of these simultaneously.

  1. Open the HTTP monitor for https://dagshub.yourdomain.com/.
  2. Enable Monitor SSL certificate.
  3. Set Alert when certificate expires in less than 21 days.
  4. Click Save.

If DVC storage or MLflow use a subdomain with a separate certificate, add SSL monitoring for those domains too.


Step 11: Configure Alert Channels

  1. Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
  2. Set Consecutive failures before alert to 2 on the web app and Git monitors — brief network blips shouldn't page your team.
  3. Group related monitors under a Status Page in Vigilmon if you want to share DagsHub availability with your organization.
  4. Use Maintenance windows during platform upgrades:
curl -X POST https://vigilmon.online/api/maintenance \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"monitor_id": "abc123", "duration_minutes": 30}'

# Apply DagsHub update
docker-compose pull && docker-compose up -d

Summary

| Monitor | Target | What It Catches | |---|---|---| | Web application | https://dagshub.domain.com/ | Server crash, frontend down | | Git HTTPS | /info/refs?service=git-upload-pack | Git HTTP smart protocol failure | | Git SSH | TCP :22 | SSH daemon down | | DVC storage | S3-compatible endpoint | Dataset push/pull failures | | MLflow API | /api/2.0/mlflow/experiments/list | Experiment tracking lost | | PostgreSQL | TCP :5432 | Database connectivity loss | | Object storage | MinIO /health/live | Large file storage failure | | Notebook rendering | Known notebook URL + keyword | Render pipeline regression | | Label Studio | /health | Annotation API down | | SSL certificate | HTTPS domain | TLS renewal failure |

DagsHub unifies Git hosting, DVC storage, and MLflow tracking in a single self-hosted platform — and each of those components is a separate failure domain. With Vigilmon monitoring each layer, from the Git endpoint to the annotation API, you get full-stack visibility into your ML collaboration platform and catch failures before they interrupt your data science team's workflow.

Monitor your app with Vigilmon

Free plan — 5 monitors, no credit card required. Up and running in 60 seconds.

Start free →