Available on: Free Plus Pro Elite
1. What This Feature Does
Uptime Monitoring tracks whether the hosts behind your DDNS domains are reachable. The system periodically checks connectivity to the target IP address, records response times in milliseconds, and calculates uptime percentages over 24-hour, 7-day, and 30-day windows. Each domain has monitoring individually enabled or disabled via a toggle in the domain list.
Monitoring data is stored in two layers: real-time status and recent checks in Redis, and daily aggregates in PostgreSQL. The 24-hour uptime percentage is computed from hourly check data in Redis, while 7-day and 30-day uptime percentages are derived from daily aggregates in the database.
2. When You Should Use It
- You host a service on a dynamic IP and need to track whether it remains reachable after IP updates.
- You manage multiple servers or home labs and want centralized uptime visibility for all your DDNS domains.
- You need historical uptime data to demonstrate service reliability or troubleshoot intermittent outages.
- You want to detect when a host goes offline without manually checking each endpoint.
3. When You Should Not Use It
- Complex health checks: Uptime monitoring performs simple connectivity checks. It does not validate HTTP status codes, SSL certificates, or application-level responses. For detailed service monitoring, use a dedicated monitoring service.
- Domains without IPs: Monitoring a domain that has no IP address assigned will run but cannot perform connectivity checks. Assign an IP first.
- Plan limits reached: If you have enabled monitoring on the maximum number of domains for your plan (5 on Free, 50 on Pro, 500 on Elite), you cannot enable monitoring on additional domains until you disable it on existing ones or upgrade.
- Real-time alerting: Uptime monitoring does not send notifications when a domain goes down. It provides historical data and current status only.
4. Prerequisites
- At least one DDNS domain created in your account.
- The domain should have a valid IP address assigned for meaningful monitoring results.
- Monitoring capacity available in your plan: Free (5 monitored domains), Pro (50 monitored domains), Elite (500 monitored domains).
- API access (for programmatic control): requires Plus plan or higher.
5. How It Works (Brief)
When monitoring is enabled for a domain, the system performs periodic connectivity checks to the domain's current IP address. Each check records the timestamp, whether the host was reachable, the response time in milliseconds, and any error encountered. Hourly statistics are stored in Redis under keys uptime:stats:{domain_id}:{YYYYMMDDHH} and aggregated daily into the PostgreSQL uptime_daily table.
The dashboard and API endpoints compute uptime percentages by dividing successful checks by total checks within each time window. The 24-hour percentage uses hourly Redis data, while 7-day and 30-day percentages query daily aggregates from the database. Current status (is_up and current_status) reflects the most recent check result stored in uptime:domain:{domain_id}.
6. How to Use It
Enabling monitoring for a domain
- Navigate to Dashboard > Domains.
- In the domain table, locate the domain you want to monitor.
- In the Monitoring column, click the gray monitor-off icon.
- The icon changes to green, indicating monitoring is now enabled.
- If you have reached your plan's monitoring limit, a message appears stating "Monitoring limit reached for your plan."
Disabling monitoring for a domain
- In the domain table, locate the domain with monitoring enabled.
- Click the green monitor icon in the Monitoring column.
- The icon changes to gray, and monitoring stops. Historical data is retained but no new checks are performed.
Viewing uptime data
- Navigate to Dashboard > Uptime to see the uptime dashboard overview.
- The overview displays:
- Overall uptime percentage for 24 hours, 7 days, and 30 days.
- Total number of domains monitored.
- Count of domains currently up and currently down.
- Average response time in milliseconds across all monitored domains.
- To view detailed data for a specific domain, click the domain name in the list or use the API endpoint
GET /uptime/domain/{domain_id}.
Enabling monitoring via API
Use the following endpoint to toggle monitoring:
POST /uptime/domain/{domain_id}/monitor
Content-Type: application/json
{
"enabled": true
}
Response:
{
"success": true,
"monitor_enabled": true,
"domain_id": 123,
"fqdn": "myserver.certadns.com"
}
7. Inputs and Settings
| Setting | Description | Values |
|---|---|---|
| Monitor Enabled | Whether uptime monitoring is active for the domain. | Boolean: true (enabled) or false (disabled). Toggled via UI or API. |
| Domain ID | Internal identifier for the domain being monitored. | Integer. Required when calling API endpoints. |
No additional configuration is required. Check frequency and timeout values are managed system-wide and are not user-configurable.
8. Outputs and Results
Dashboard overview metrics
The uptime dashboard (GET /uptime/dashboard) returns the following fields:
| Field | Description |
|---|---|
overall_uptime_24h | Uptime percentage across all monitored domains in the past 24 hours. |
overall_uptime_7d | Uptime percentage across all monitored domains in the past 7 days. |
overall_uptime_30d | Uptime percentage across all monitored domains in the past 30 days. |
domains_monitored | Total count of domains with monitoring enabled. |
domains_up | Count of monitored domains currently reachable. |
domains_down | Count of monitored domains currently unreachable. |
average_response_time_ms | Average response time in milliseconds for the most recent check across all monitored domains. |
Per-domain uptime data
The domain detail endpoint (GET /uptime/domain/{domain_id}) returns:
| Field | Description |
|---|---|
domain_id | Internal ID of the domain. |
fqdn | Fully qualified domain name. |
is_up | Boolean. true if the last check succeeded, false otherwise. |
uptime_percentage_24h | Uptime percentage in the past 24 hours. |
uptime_percentage_7d | Uptime percentage in the past 7 days. |
uptime_percentage_30d | Uptime percentage in the past 30 days. |
last_check_time | ISO 8601 timestamp of the most recent check. |
last_response_time_ms | Response time in milliseconds from the last successful check, or null if down. |
current_status | String. "operational" if up, other values indicate issues. |
error | String or null. Contains the error message if the last check failed. |
monitor_enabled | Boolean. Whether monitoring is enabled for this domain. |
has_ip | Boolean. Whether the domain has an IP address assigned. |
Real-time status
The real-time status endpoint (GET /uptime/status/realtime) returns a list of all monitored domains with their current is_up status, fqdn, and last_check_time. This endpoint is optimized for quick polling to display live status without loading historical aggregates.
9. How to Interpret Results
Normal
is_up: trueandcurrent_status: "operational"indicate the domain's target is reachable and responding.- Uptime percentages near 100% indicate consistent availability. Minor dips below 100% can occur due to transient network issues or server reboots.
last_response_time_msis a small positive integer (typically under 200ms for local or well-connected hosts).
Unexpected or worth investigating
is_up: falsewith an error message: The host is unreachable. Common errors include "Connection timeout", "Connection refused", or "Host unreachable". Verify the IP address is correct and the host is online.- Uptime percentage below 95%: Indicates frequent or prolonged outages. Check network stability, host uptime, and whether the IP was updated correctly after a change.
has_ip: false: The domain has no IP address assigned. Monitoring cannot perform connectivity checks. Assign an IP to resolve this.- Sudden increase in
average_response_time_ms: May indicate network congestion, increased server load, or routing issues. Compare against baseline response times.
Common interpretation mistakes
- Confusing uptime percentage with DNS propagation: Uptime monitoring checks whether the target IP is reachable, not whether DNS queries return the correct IP. A domain can have 100% uptime even if DNS changes are still propagating.
- Expecting monitoring to detect application failures: A host that responds to connectivity checks but has a failed web server or application will still show
is_up: true. Uptime monitoring confirms network reachability only. - Assuming
domains_down: 0means no issues: A domain with monitoring disabled does not contribute to the down count, even if its host is offline.
10. Common Issues and Explanations
"Monitoring limit reached for your plan" when enabling monitoring
You have enabled monitoring on the maximum number of domains for your plan. Free plan allows 5 monitored domains, Pro allows 50, and Elite allows 500. Disable monitoring on an existing domain or upgrade your plan to increase the limit.
Domain shows is_up: false but the host is online
Verify the IP address assigned to the domain matches the current IP of the host. If you recently updated the domain's IP, ensure the update was successful. Check firewall rules on the host to confirm ICMP or TCP connectivity checks are not blocked. Connectivity checks originate from CertaDNS's monitoring infrastructure; if your host restricts traffic to specific sources, the checks may fail.
Uptime percentage is 0% immediately after enabling monitoring
Uptime percentages are calculated from historical check data. If monitoring was just enabled, there is insufficient data to compute a meaningful percentage. Wait for at least one hour to see 24-hour data, and several days for 7-day and 30-day percentages to stabilize.
error: "Connection timeout" appears intermittently
Transient network issues or brief host downtime can cause occasional timeouts. If the error persists, verify the host is reachable from external networks, not just your local network. Check for network infrastructure issues or ISP routing problems.
API returns 404 when querying GET /uptime/domain/{domain_id}
The domain ID does not exist or does not belong to your account. Verify the domain ID is correct by listing your domains via GET /domains. Ensure you are authenticated with the correct API key or session token.
Monitoring icon is gray but API shows monitor_enabled: true
The dashboard UI may be cached. Refresh the page to sync the UI state with the backend. If the issue persists, check browser console for errors or try logging out and back in.
11. Limits and Constraints
| Constraint | Free | Plus | Pro | Elite |
|---|---|---|---|---|
| Monitored domains | 5 | 5 | 50 | 500 |
| Data retention (hourly) | 24 hours | 24 hours | 24 hours | 24 hours |
| Data retention (daily) | 30 days | 30 days | 30 days | 30 days |
| API access | No | Yes | Yes | Yes |
- Check frequency: System-managed, not user-configurable. Typical frequency is every 5 minutes, but this may vary based on system load.
- Data granularity: Hourly statistics in Redis for the past 24 hours, daily aggregates in PostgreSQL for 7-day and 30-day windows.
- Real-time status data is stored per-domain in Redis under
uptime:domain:{domain_id}. - Hourly stats are stored in Redis under
uptime:stats:{domain_id}:{YYYYMMDDHH}and automatically expire after 24 hours. - Daily aggregates in the
uptime_dailytable are retained for 30 days before archival or deletion.
12. Related Features
- Dynamic DNS Domains — The domains being monitored by the uptime system.
- DNS Analytics — Query volume and traffic analytics for your domains (separate from uptime monitoring).
- Dashboard Overview — Summary of account activity, including uptime monitoring status.
- Wildcard DNS — Wildcard domains can also be monitored for uptime if they have an IP assigned.
- Web Forwarding — Forwarded domains do not support uptime monitoring, as they redirect rather than resolve to an IP.
13. Updates and Behavior Changes
- Uptime monitoring limits for the Pro plan were increased from 25 to 50 monitored domains.
- The
uptime_dailytable was introduced to store daily aggregates, improving performance for 7-day and 30-day uptime queries. - The
GET /uptime/status/realtimeendpoint was added to support lightweight real-time status polling without loading historical data. - Redis key expiration was adjusted to automatically remove hourly stats older than 24 hours, reducing memory usage.