Status Pages
Status pages provide a public-facing view of your service health, allowing you to communicate availability and incidents transparently to your users, customers, and stakeholders. 9n9s makes it easy to create beautiful, customizable status pages that automatically reflect the health of your monitored services.
Overview
Section titled “Overview”Status pages serve multiple critical functions:
Customer Communication:
- Proactive Transparency: Show service status before customers notice issues
- Incident Communication: Provide real-time updates during outages
- Historical Context: Display past incidents and resolution times
- Maintenance Notices: Communicate planned maintenance windows
Business Benefits:
- Reduced Support Load: Customers can self-serve status information
- Trust Building: Transparency builds customer confidence
- SLA Reporting: Demonstrate uptime performance to stakeholders
- Brand Consistency: Customizable design matches your brand
Technical Integration:
- Automated Updates: Status reflects monitor health automatically
- Real-time Data: Live updates without manual intervention
- Multi-Service Views: Group related services logically
- API Access: Programmatic access to status data
Creating Status Pages
Section titled “Creating Status Pages”Basic Setup
Section titled “Basic Setup”Via Web Interface:
- Navigate to Organization Settings > Status Pages
- Click “Create Status Page”
- Configure basic settings:
- Page Name: Internal name for management
- Public Title: Displayed to visitors
- Description: Brief description of your services
- Subdomain: Choose your
status.9n9s.com/[subdomain]URL
- Select monitors to include
- Customize appearance and branding
- Publish the page
Via CLI:
# Create a basic status page9n9s-cli status-page create \ --name "ACME Service Status" \ --subdomain "acme-status" \ --description "Real-time status of ACME services" \ --monitors "mon_api,mon_website,mon_database"
# Create with custom configuration9n9s-cli status-page create \ --name "Production Services" \ --subdomain "prod-status" \ --config '{ "theme": "modern", "custom_domain": "status.acme.com", "incident_history_days": 90, "show_uptime_percentages": true }'Via API:
curl -X POST https://api.9n9s.com/v1/status-pages \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "ACME Service Status", "subdomain": "acme-status", "title": "ACME Services", "description": "Real-time status of ACME services", "monitors": [ {"id": "mon_api", "display_name": "API Service"}, {"id": "mon_website", "display_name": "Main Website"}, {"id": "mon_database", "display_name": "Database"} ], "settings": { "theme": "modern", "show_incident_history": true, "uptime_calculation_days": 30 } }'Monitor Selection and Grouping
Section titled “Monitor Selection and Grouping”Service Groups: Organize monitors into logical service groups for better user experience:
# Status page configurationservice_groups: - name: "Core Services" monitors: - id: "mon_api" display_name: "API Gateway" description: "Primary API endpoints" - id: "mon_auth" display_name: "Authentication" description: "User login and authentication"
- name: "Website & Frontend" monitors: - id: "mon_website" display_name: "Main Website" - id: "mon_cdn" display_name: "CDN & Assets"
- name: "Infrastructure" monitors: - id: "mon_database" display_name: "Primary Database" - id: "mon_cache" display_name: "Cache Layer"Monitor Filtering: Choose which monitors to display based on various criteria:
# Include monitors by tags9n9s-cli status-page update status_123 \ --include-tags "public:true,criticality:high"
# Include specific projects9n9s-cli status-page update status_123 \ --include-projects "proj_production,proj_core"
# Exclude maintenance monitors9n9s-cli status-page update status_123 \ --exclude-tags "maintenance:true"Customization and Branding
Section titled “Customization and Branding”Visual Customization
Section titled “Visual Customization”Theme Options:
- Modern: Clean, minimal design with subtle shadows
- Classic: Traditional status page layout
- Dark: Dark theme for modern brands
- Custom: Upload your own CSS for complete control
Branding Elements:
branding: logo: url: "https://example.com/logo.png" width: 200 height: 50 colors: primary: "#007bff" success: "#28a745" warning: "#ffc107" danger: "#dc3545" background: "#ffffff" text: "#333333" fonts: family: "Inter, sans-serif" headings: "Inter, sans-serif"Custom CSS:
/* Custom styling for status page */.status-page-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 2rem;}
.service-group { border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); margin-bottom: 1.5rem;}
.monitor-status.operational { background-color: #d4edda; border-color: #c3e6cb;}Custom Domains
Section titled “Custom Domains”Configure your own domain for professional status page URLs:
DNS Configuration:
# Add CNAME record to your DNSstatus.example.com CNAME status.9n9s.comSSL Certificate: 9n9s automatically provisions and manages SSL certificates for custom domains using Let’s Encrypt.
Via CLI:
# Configure custom domain9n9s-cli status-page update status_123 \ --custom-domain "status.example.com"
# Verify domain configuration9n9s-cli status-page verify-domain status_123Status Page Features
Section titled “Status Page Features”Real-time Status Updates
Section titled “Real-time Status Updates”Status pages automatically update based on monitor state changes:
Status Indicators:
- 🟢 Operational: All systems functioning normally
- 🟡 Degraded Performance: Some issues but service available
- 🟠 Partial Outage: Some services affected
- 🔴 Major Outage: Significant service disruption
- 🔵 Maintenance: Planned maintenance in progress
Automatic Transitions:
Monitor Down → Service shows "Partial/Major Outage"Monitor Degraded → Service shows "Degraded Performance"Monitor Up → Service shows "Operational"Maintenance Mode → Service shows "Maintenance"Incident Management
Section titled “Incident Management”Incident Creation: Incidents can be created automatically when monitors fail or manually for broader issues:
# Create manual incident9n9s-cli incident create \ --title "Database Performance Issues" \ --description "Investigating elevated response times" \ --status "investigating" \ --affected-services "mon_api,mon_database"
# Update incident9n9s-cli incident update inc_123 \ --status "identified" \ --message "Root cause identified as disk I/O bottleneck"Incident Status Flow:
- Investigating: Team is looking into the issue
- Identified: Root cause has been determined
- Monitoring: Fix applied, monitoring for stability
- Resolved: Issue completely resolved
Incident Updates:
{ "incident_id": "inc_123", "timestamp": "2024-01-15T14:30:00Z", "status": "monitoring", "message": "Database performance has been restored. We are monitoring the situation to ensure stability.", "author": "ops-team"}Uptime Metrics
Section titled “Uptime Metrics”Uptime Calculation:
uptime_metrics: calculation_period: 30 # days calculation_method: "percentage" # percentage or availability exclude_maintenance: true minimum_data_points: 1000Display Options:
- Current Status: Real-time operational state
- Uptime Percentage: 99.95% uptime over last 30 days
- Response Times: Average response times for uptime monitors
- Historical Charts: Visual representation of uptime over time
SLA Reporting:
# Generate SLA report9n9s-cli status-page report status_123 \ --period "last-quarter" \ --format "pdf" \ --include-details \ --output "q4-sla-report.pdf"Advanced Features
Section titled “Advanced Features”Maintenance Windows
Section titled “Maintenance Windows”Schedule and communicate planned maintenance:
# Schedule maintenance window9n9s-cli maintenance create \ --title "Database Upgrade" \ --description "Upgrading database cluster to v14" \ --start "2024-02-15T02:00:00Z" \ --end "2024-02-15T06:00:00Z" \ --affected-services "mon_database,mon_api"
# Notify subscribers9n9s-cli maintenance notify maint_456 \ --advance-notice "24h" \ --reminder "1h"Maintenance Communication:
- Advance Notice: Email/SMS notifications to subscribers
- Status Page Updates: Visible maintenance banner
- Automatic Status: Services show as “Under Maintenance”
- Progress Updates: Real-time updates during maintenance
Subscriber Management
Section titled “Subscriber Management”Allow users to subscribe to status updates:
Subscription Options:
- Email Notifications: Incident updates and maintenance notices
- SMS Alerts: Critical incidents only (premium feature)
- Webhooks: Programmatic notifications for other systems
- RSS/Atom Feeds: Machine-readable status updates
Privacy Controls:
subscriber_settings: require_confirmation: true allow_unsubscribe: true retention_period: 365 # days privacy_policy_url: "https://example.com/privacy"API Integration
Section titled “API Integration”Status pages provide API access for external integrations:
Public API Endpoints:
# Get current statuscurl https://status.9n9s.com/api/acme-status/summary
# Get detailed component statuscurl https://status.9n9s.com/api/acme-status/components
# Get incident historycurl https://status.9n9s.com/api/acme-status/incidents
# Subscribe to updatescurl -X POST https://status.9n9s.com/api/acme-status/subscribers \Response Format:
{ "status": { "indicator": "operational", "description": "All Systems Operational" }, "components": [ { "id": "api", "name": "API Service", "status": "operational", "uptime": "99.98%" } ], "incidents": [], "scheduled_maintenances": []}Multi-Environment Setup
Section titled “Multi-Environment Setup”Environment-Specific Pages
Section titled “Environment-Specific Pages”Create separate status pages for different environments:
# Production status page9n9s-cli status-page create \ --name "Production Status" \ --subdomain "status" \ --monitors "$(9n9s-cli monitors list --tags environment:production --output ids)"
# Staging status page9n9s-cli status-page create \ --name "Staging Status" \ --subdomain "staging-status" \ --monitors "$(9n9s-cli monitors list --tags environment:staging --output ids)" \ --public false # Internal onlyCascading Status
Section titled “Cascading Status”Configure dependency relationships between services:
service_dependencies: - service: "web-application" depends_on: ["api-service", "database"] dependency_type: "hard" # hard or soft
- service: "mobile-app" depends_on: ["api-service"] dependency_type: "soft"Best Practices
Section titled “Best Practices”Status Page Design
Section titled “Status Page Design”Keep It Simple:
- Use clear, non-technical language for service names
- Group related services logically
- Limit the number of services displayed
- Use consistent naming conventions
Transparency Guidelines:
- Be honest about service health
- Provide meaningful incident updates
- Set realistic uptime targets
- Include estimated resolution times when possible
Communication Strategy
Section titled “Communication Strategy”Incident Communication:
- Acknowledge Quickly: Confirm you’re aware of the issue
- Regular Updates: Provide updates every 30-60 minutes
- Technical Details: Include relevant technical information
- Resolution Confirmation: Confirm when issues are fully resolved
- Post-Mortem: Share lessons learned for significant incidents
Maintenance Communication:
- Advance Notice: Notify at least 24 hours in advance
- Multiple Channels: Use email, status page, and in-app notifications
- Clear Timeline: Provide start time, duration, and expected impact
- Alternatives: Suggest workarounds if available
Performance Optimization
Section titled “Performance Optimization”Page Load Speed:
- Use CDN for global distribution
- Optimize images and assets
- Minimize external dependencies
- Enable browser caching
Mobile Optimization:
- Responsive design for all devices
- Touch-friendly interface elements
- Readable fonts and appropriate sizing
- Fast loading on mobile networks
Analytics and Insights
Section titled “Analytics and Insights”Page Analytics
Section titled “Page Analytics”Track status page usage and effectiveness:
# View status page analytics9n9s-cli status-page analytics status_123 \ --period "last-30-days" \ --metrics "pageviews,unique-visitors,incident-views"Key Metrics:
- Page Views: Total visits to status page
- Unique Visitors: Individual users checking status
- Incident Engagement: Views during incident periods
- Subscriber Growth: Status update subscription trends
- Geographic Distribution: Where users are checking from
User Behavior Insights
Section titled “User Behavior Insights”Peak Traffic Patterns:
- Identify when users check status most frequently
- Correlate traffic spikes with actual incidents
- Understand geographic usage patterns
- Plan communication timing based on user behavior
Incident Impact Analysis:
- Measure customer awareness of incidents
- Track communication effectiveness
- Identify services users care about most
- Optimize incident response based on user engagement
Integration Examples
Section titled “Integration Examples”Internal Dashboards
Section titled “Internal Dashboards”Embed status page data in internal dashboards:
<!-- Embed status widget --><iframe src="https://status.example.com/embed/compact" width="400" height="200" frameborder="0"> </iframe>
<!-- Or use JavaScript API --><script> fetch("https://status.9n9s.com/api/acme-status/summary") .then((response) => response.json()) .then((data) => { document.getElementById("status").textContent = data.status.description; document.getElementById("indicator").className = data.status.indicator; });</script>Chatbot Integration
Section titled “Chatbot Integration”Add status information to support chatbots:
# Slack bot example@app.command("/status")def status_command(ack, command, client): ack()
# Fetch current status response = requests.get('https://status.9n9s.com/api/acme-status/summary') status_data = response.json()
message = f"Current Status: {status_data['status']['description']}\n"
for component in status_data['components']: status_emoji = "🟢" if component['status'] == 'operational' else "🔴" message += f"{status_emoji} {component['name']}: {component['status']}\n"
client.chat_postMessage( channel=command['channel_id'], text=message )Status pages are a crucial component of transparent service communication. By implementing comprehensive status pages with 9n9s, you can build customer trust, reduce support burden, and demonstrate your commitment to service reliability.