-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Arael Espinosa edited this page Jul 13, 2026
·
4 revisions
Piro is an open-source, self-hosted status page and uptime monitoring platform. It lets you track the health of your services, notify your team when things go wrong, and keep your users informed through a public status page.
- HTTP checks — monitor endpoints with configurable expected status codes, keywords, and response time thresholds
- TCP checks — verify that a port is open and accepting connections
- Ping checks — ICMP ping with latency tracking
- DNS checks — validate DNS resolution and record values
- SSL checks — track certificate validity and expiry
- Deploy remote workers (
Piro.Worker) in different regions — each runs checks independently and reports back - Multi-region checks fan out to all connected workers; results are aggregated (worst-status wins)
- The API itself can act as a local worker via
PIRO_API_WORKER=true - Workers report their version and heartbeat in real time
- Configurable alert configs per check: thresholds for failure/recovery, severity levels
- Triggers: Email, Telegram, Twilio SMS, Opsgenie, Pushover, Ntfy — attach triggers to individual checks or globally (see Triggers)
- On-call & escalation policies — per-service escalation chains that page on-call schedules when alerts go unacknowledged
- Incident management — link alerts to a new or existing incident (always a manual step), track investigation state through to resolution
- Public-facing status page showing service health at a glance
- Maintenance windows — schedule downtime and suppress alerts
- YAML import — define your entire monitoring setup as code and import it
- API keys — authenticate external integrations
- Serilog structured logging — persisted to PostgreSQL, visible in the admin UI
-
OpenAPI 3.1 spec at
/openapi/v1.jsonwith Swagger UI at/swagger - Real-time admin UI via SignalR — Workers page updates instantly on connect/disconnect
┌─────────────────────────────────────┐
│ Piro.Api (ASP.NET Core) │
│ REST API · SignalR Hubs · Quartz │
│ PostgreSQL (EF Core) · Serilog │
└────────────┬──────────┬─────────────┘
│ │ SignalR /hub/worker
┌────────┘ └──────────────────────┐
│ In-process │
│ (PIRO_API_WORKER=true) ┌────────┴────────┐
│ │ Piro.Worker │
│ │ (remote agent) │
└─────────────────────────────────┴─────────────────┘
↑ both feed into MultiRegionBatchTracker
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ apps/web (Next.js 16) │ │ apps/admin (Vite + React) │
│ Public status page │ │ Admin panel (SPA) │
│ port 3000 │ │ port 5173 │
└──────────────────────────────┘ └──────────────────────────────┘
both talk to the API · admin also uses SignalR /hub/admin (RT)