Skip to content

What is Yuptime?

Yuptime is a Kubernetes-native monitoring solution where all configuration is managed through Custom Resource Definitions (CRDs). It's designed for teams who want their monitoring to be part of their GitOps workflow.

Key Principles

1. Everything is a CRD

Every aspect of Yuptime is configured through Kubernetes Custom Resources:

yaml
apiVersion: monitoring.yuptime.io/v1
kind: Monitor
metadata:
  name: my-api
  namespace: yuptime
spec:
  type: http
  target:
    http:
      url: "https://api.example.com/health"

This means your monitoring configuration:

  • Lives in Git alongside your application code
  • Is version-controlled and auditable
  • Can be deployed with kubectl, Helm, Timoni, Flux, or Argo CD
  • Benefits from Kubernetes RBAC

2. Database-Free Architecture

Unlike traditional monitoring tools, Yuptime doesn't require a database. All state is stored in the CRD status subresources:

yaml
status:
  lastCheck:
    timestamp: "2025-12-30T10:00:00Z"
    success: true
    latencyMs: 125
  uptime:
    last24h: 99.95
    last7d: 99.98

Benefits:

  • No database to manage, backup, or scale
  • State is automatically replicated by the Kubernetes API
  • Disaster recovery is just kubectl apply

3. Isolated Execution

Each health check runs in its own Kubernetes Job pod:

┌────────────────────┐
│    Yuptime API     │
│  (Controller Pod)  │
└─────────┬──────────┘
          │ Creates Jobs

┌─────────────────────────────────────────┐
│          Checker Job Pods               │
├─────────┬─────────┬─────────┬──────────┤
│ Check 1 │ Check 2 │ Check 3 │ Check N  │
│  HTTP   │   TCP   │   DNS   │   ...    │
└─────────┴─────────┴─────────┴──────────┘

          │ Updates status directly

┌────────────────────┐
│   Monitor CRDs     │
│ (Status subresource)│
└────────────────────┘

Benefits:

  • Security: Each check runs with minimal permissions
  • Isolation: A failing check doesn't affect others
  • Resource control: Set CPU/memory limits per check
  • Observability: Each check has its own pod logs

4. GitOps-Native

Yuptime follows the GitOps principle: Git is the single source of truth.

The controller:

  • Only reads from the spec (never writes to it)
  • Only writes to the status subresource
  • Never stores state outside of Kubernetes

This means you can:

  • Store all monitors in Git
  • Use Flux or Argo CD to sync them
  • Roll back by reverting a commit
  • Audit who changed what and when

Architecture Overview

┌─────────────────────────────────────────────────────────────────┐
│                         Yuptime Pod                              │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐  │
│  │   Metrics   │  │ Controller  │  │      Job Manager        │  │
│  │   Server    │  │  (Watches   │  │  (Creates K8s Jobs for  │  │
│  │ (Port 3000) │  │    CRDs)    │  │     each check)         │  │
│  └─────────────┘  └─────────────┘  └─────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────────┐
│                    Checker Job Pods (Isolated)                   │
├─────────────────────────────────────────────────────────────────┤
│  Job 1: HTTP Check    →  Updates Monitor CRD status (no DB)     │
│  Job 2: TCP Check     →  Updates Monitor CRD status (no DB)     │
│  Job 3: DNS Check     →  Updates Monitor CRD status (no DB)     │
└─────────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────────┐
│                        External Services                         │
├─────────────────────────────────────────────────────────────────┤
│  Prometheus (metrics)  │  Alertmanager (alerts)  │  Grafana     │
└─────────────────────────────────────────────────────────────────┘

Components

ComponentDescription
ControllerWatches Monitor CRDs and reconciles desired state
Job ManagerCreates Kubernetes Jobs for each monitor check
Metrics ServerExposes Prometheus metrics on port 3000
Checker PodsIsolated pods that execute health checks

Custom Resources

Yuptime defines 5 CRDs:

CRDDescription
MonitorSingle health check definition
MonitorSetBulk monitor definitions
MaintenanceWindowScheduled suppression with RRULE
SilenceAd-hoc alert muting
YuptimeSettingsCluster-scoped global configuration

Monitor Types

Yuptime supports 14 monitor types:

TypeUse Case
httpAPIs, websites, webhooks
tcpDatabases, services, ports
dnsDNS infrastructure
pingNetwork connectivity
websocketReal-time services
grpcgRPC microservices
mysqlMySQL database health
postgresqlPostgreSQL database health
redisRedis cache health
kubernetesDeployments, pods, services
pushCustom applications
steamSteam game servers

Comparison with Other Tools

vs. Uptime Kuma

FeatureYuptimeUptime Kuma
ConfigurationCRDs (GitOps)Web UI
StorageKubernetes APISQLite
DeploymentNative K8sDocker container
Check executionIsolated JobsIn-process
GitOpsNativeRequires workarounds

vs. Prometheus Blackbox Exporter

FeatureYuptimeBlackbox Exporter
ConfigurationCRDsPrometheus config
StateIn CRD statusNo state
AlertingAlertmanager integrationPrometheus rules
UIMetrics/GrafanaGrafana
SuppressionsMaintenanceWindow, SilenceAlertmanager only

Next Steps

Released under the Apache 2.0 License.