Aller au contenu principal

Gatus sur Google Cloud Run

Gatus sur Google Cloud Run

Gatus est une page de statut et un moniteur de contrôles de santé open source, sous licence Apache 2.0, orienté développeurs et écrit en Go. Il interroge des points de terminaison HTTP, TCP, DNS, ICMP et autres, chacun selon sa propre planification, évalue des conditions de résultat simples (code de statut, temps de réponse, contenu du corps de la réponse, expiration du certificat TLS) et sert une page de statut publique en direct ainsi que des alertes — sans base de données externe. Ce module déploie Gatus sur Cloud Run v2 en s'appuyant sur le socle App_CloudRun, qui provisionne et gère l'infrastructure Google Cloud partagée.

Ce guide se concentre sur les services cloud utilisés par Gatus et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toutes les applications Cloud Run — identité du service, entrée et équilibrage de charge, mise à l'échelle et concurrence, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_CloudRun plutôt que de les répéter ici.


1. Vue d'ensemble​

Gatus s'exécute comme un unique conteneur Go sur Cloud Run v2. Le déploiement assemble un ensemble volontairement restreint de services Google Cloud — Gatus ne dépend d'aucune base de données, d'aucun cache ni d'aucun stockage d'objets :

FonctionnalitéService Google CloudRemarques
CalculCloud Run v2Service Go unique, 1 vCPU / 512 MiB par défaut ; CPU toujours alloué afin que la boucle d'interrogation du watchdog ne soit jamais bridée
Base de donnéesAucunedatabase_type = "NONE" ; le stockage d'historique facultatif est un fichier SQLite local, aucune instance Cloud SQL n'est provisionnée
PersistanceDisque éphémère (par défaut) ou NFS (facultatif, avec une réserve)Historique SQLite dans /data/data.db ; lisez la réserve concernant le journal WAL ci-dessous avant d'activer NFS
Stockage d'objetsAucunGatus ne stocke rien dans Cloud Storage
Cache / file d'attenteAucunPas de Redis ; Gatus ne dépend d'aucun cache ni d'aucune file d'attente
SecretsSecret ManagerAucun secret généré automatiquement ; uniquement les secret_environment_variables fournies par l'utilisateur
EntréeURL Cloud Run / Cloud Load BalancingURL run.app par défaut ; équilibreur de charge HTTPS externe et domaine personnalisé facultatifs

Valeurs par défaut judicieuses à connaître d'emblée :

  • Aucune base de données n'est provisionnée. database_type = "NONE" — le stockage d'historique facultatif de Gatus est un fichier SQLite local. Les variables liées à la base de données existent par souci d'exhaustivité, mais sont inertes sauf si vous choisissez délibérément une base de données externe.
  • La configuration repose entièrement sur un fichier. Chaque point de terminaison surveillé, chaque intégration d'alerte et chaque paramètre de stockage se trouve dans un unique fichier YAML intégré à l'image au moment du build — il n'existe ni convention de variable d'environnement par paramètre, ni API de rechargement de la configuration à l'exécution. Modifiez les points de terminaison surveillés en éditant modules/Gatus_Common/scripts/config.yaml puis en redéployant.
  • Le stockage d'historique est éphémère par défaut, délibérément. Gatus code en dur le mode de journalisation WAL de SQLite (confirmé en conditions réelles : aucune option de configuration ni aucun paramètre de chaîne de connexion ne le désactive), et la documentation de SQLite elle-même indique que WAL n'est pas pris en charge sur les systèmes de fichiers réseau. Cloud Run ne propose pour cela que le stockage éphémère ou NFS — aucun des deux n'est un emplacement véritablement sûr pour un fichier SQLite en mode WAL ; le module opte donc par défaut pour l'éphémère plutôt que de risquer une corruption silencieuse. Déployez Gatus_GKE avec stateful_pvc_enabled = true (un véritable périphérique bloc) si la persistance de l'historique compte pour vous.
  • Le CPU est toujours alloué (cpu_always_allocated = true). La goroutine watchdog de Gatus interroge chaque point de terminaison configuré selon sa propre planification, indépendamment des requêtes HTTP entrantes. Une facturation basée sur les requêtes briderait le CPU entre les consultations de pages et bloquerait ou sauterait silencieusement les vérifications planifiées — la boucle de surveillance est le produit, selon la même logique que pour UptimeKuma.
  • Une seule instance par défaut (min_instance_count = 1, max_instance_count = 1). Plusieurs instances interrogeraient chacune indépendamment tous les points de terminaison et dupliqueraient les alertes — aucune coordination n'existe entre les instances Gatus.
  • L'entrée publique est la valeur par défaut (ingress_settings = "all") afin que la page de statut soit accessible publiquement. L'activation d'IAP exige une connexion Google et bloque la consultation non authentifiée.
  • Le point de terminaison de santé est /health, qui renvoie HTTP 200 dès que le serveur se lie à son port.
  • Le contrôle d'accès, le cas échéant, se configure dans config.yaml. Gatus est livré avec une page de statut ouverte par défaut ; une protection facultative par basic-auth ou OIDC se configure dans le bloc security de config.yaml et nécessite un nouveau build.

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que PROJECT et REGION sont définis. Les noms des services et des ressources sont indiqués dans les sorties du déploiement.

A. Cloud Run — le service Gatus​

Gatus s'exécute comme un service Cloud Run v2. Chaque déploiement crée une révision immuable ; le trafic peut être réparti entre les révisions pour des déploiements progressifs sûrs. Comme le CPU est toujours alloué, la boucle d'interrogation du watchdog continue de s'exécuter entre les requêtes entrantes.

  • Console : Cloud Run → sélectionnez le service pour consulter les révisions, le trafic, les journaux et les métriques.
  • CLI :
    gcloud run services list --project "$PROJECT" --region "$REGION"
    gcloud run services describe <service-name> --project "$PROJECT" --region "$REGION"
    gcloud run revisions list --service <service-name> --project "$PROJECT" --region "$REGION"

Consultez App_CloudRun pour la mise à l'échelle, la concurrence, l'environnement d'exécution et la répartition du trafic.

B. Persistance — le stockage d'historique SQLite​

Gatus ne possède aucune instance Cloud SQL. Son stockage d'historique facultatif est un fichier SQLite local situé dans /data/data.db, dont l'arborescence est intégrée à l'image au moment du build. Dans la configuration par défaut de Cloud Run, ce répertoire est éphémère — l'historique ne survit ni à un redémarrage ni à un redéploiement.

  • Console : Filestore → Instances (lorsque enable_nfs = true).
  • CLI :
    # Confirm the injected environment on the running revision:
    gcloud run services describe <service-name> --project "$PROJECT" --region "$REGION" \
    --format='value(spec.template.spec.containers[0].env)'

Avant d'activer NFS pour un historique durable, lisez la réserve concernant le journal WAL dans la §1 Vue d'ensemble et dans Gatus_Common — Cloud Run ne propose aucune option de PVC en mode bloc, si bien que NFS est ici le seul mécanisme de persistance facultatif, et il présente un risque réel de corruption pour un fichier SQLite en mode WAL. Consultez App_CloudRun pour le modèle général de montage NFS (Filestore).

C. Secret Manager​

Gatus ne génère aucun secret au moment du déploiement — il n'y a ni mot de passe de base de données ni clé de chiffrement à gérer. Secret Manager n'est utilisé que si vous fournissez vos propres secrets via secret_environment_variables (par exemple une ${VAR} référencée dans la configuration des alertes de config.yaml).

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"

Consultez App_CloudRun pour les détails d'injection et de rotation.

D. Réseau et entrée​

Le service est accessible par défaut à son URL run.app, ce qui permet l'accès public dont une page de statut a généralement besoin. Un équilibreur de charge HTTPS externe avec domaine personnalisé, Cloud CDN et Cloud Armor peut être ajouté.

  • Console : Cloud Run (URL du service) ; Network services → Load balancing.
  • CLI :
    gcloud run services describe <service-name> --region "$REGION" --format='value(status.url)'
    gcloud compute addresses list --project "$PROJECT"

Consultez App_CloudRun.

E. Cloud Logging et Monitoring​

Les journaux des conteneurs sont envoyés vers Cloud Logging ; les métriques de Cloud Run sont envoyées vers Cloud Monitoring, avec des tests de disponibilité et des règles d'alerte facultatifs. Gatus journalise le résultat de chaque vérification de point de terminaison (réussite/échec, durée) au fil de son exécution.

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud run services logs read <service-name> --project "$PROJECT" --region "$REGION" --limit 50

3. Comportement de l'application Gatus​

  • Aucune configuration de base de données au premier déploiement. Gatus n'a ni base de données externe ni étape de migration. Il lit config.yaml, initialise son stockage d'historique SQLite (s'il est configuré) et commence immédiatement à servir. Aucun job d'initialisation n'existe par défaut.
  • Stockage d'historique éphémère par défaut. /data/data.db réside sur le système de fichiers local accessible en écriture du conteneur, sans aucun montage sauf si vous choisissez NFS. Chaque redémarrage ou redéploiement réinitialise l'historique des vérifications (la page de statut elle-même et toutes les vérifications actuellement configurées ne sont pas affectées — seuls les résultats historiques et les pourcentages de disponibilité sont réinitialisés).
  • La boucle d'interrogation du watchdog a besoin d'un CPU alloué. Chaque point de terminaison configuré est vérifié selon son propre intervalle indépendant par une goroutine interne au processus ; cpu_always_allocated = true garantit que celle-ci continue de s'exécuter entre les consultations de pages entrantes.
  • Chemin de santé. Les sondes de démarrage et d'activité ciblent /health, qui renvoie HTTP 200 dès que le serveur se lie au port 8080. Vérifiez :
    SERVICE_URL=$(gcloud run services describe <service-name> \
    --project "$PROJECT" --region "$REGION" --format='value(status.url)')
    curl -s -o /dev/null -w '%{http_code}\n' "$SERVICE_URL/health" # -> 200
  • Consulter la page de statut.
    curl -s "$SERVICE_URL/" | head -20     # rendered HTML status page
  • Les modifications de configuration nécessitent un nouveau build. Gatus n'a ni interface d'administration ni API pour modifier les points de terminaison surveillés. Éditez modules/Gatus_Common/scripts/config.yaml (ajoutez, supprimez ou modifiez des entrées endpoints) et redéployez pour appliquer les modifications.
  • L'accès est ouvert tant que vous ne le configurez pas. Par défaut, la page de statut n'a aucune authentification. Configurez basic-auth ou OIDC dans le bloc security de config.yaml et redéployez pour restreindre la consultation.

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Gatus ou notables pour celui-ci sont listés ; toutes les autres entrées sont héritées d'App_CloudRun avec leur comportement standard.

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(required)Projet Google Cloud cible.
regionus-central1Région du service et des ressources régionales.

Groupe 2 / 3 — Environnement de déploiement et identité de l'application​

VariableValeur par défautDescription
tenant_iddemoSuffixe court qui rend les noms de ressources uniques par environnement.
application_namegatusNom de base du service, du dépôt du registre et des secrets. Ne le modifiez pas après le premier déploiement.
application_display_nameGatusNom lisible affiché dans la console.
application_versionlatestTag de version de l'image ; latest correspond à une base épinglée v5.36.0. Épinglez une version v5.x.y explicite en production.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour provisionner uniquement l'infrastructure de support.
container_image_sourcecustomcustom construit l'image wrapper via Cloud Build ; prebuilt déploie directement une image.
cpu_limit1000mCPU par instance.
memory_limit512MiMémoire par instance (le plancher de gen2 est de 512Mi).
min_instance_count1Nombre minimal d'instances.
max_instance_count1Conservez 1 — des réplicas interrogeraient chacun indépendamment tous les points de terminaison et dupliqueraient les alertes.
container_port8080Gatus écoute sur le port 8080.
container_protocolhttp1HTTP/1.1 par défaut.
cpu_always_allocatedtrueRequis pour que la boucle d'interrogation du watchdog ne soit jamais bridée entre les requêtes.
enable_cloudsql_volumefalseDésactivé — Gatus n'a pas de base de données.
enable_image_mirroringtrueMet en miroir l'image Gatus dans Artifact Registry.

Groupe 5 — Accès et réseau​

VariableValeur par défautDescription
ingress_settingsallall est requis pour une page de statut publique.
enable_iapfalseExige une connexion Google. Bloque la consultation non authentifiée.

Groupe 6 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Substitutions pour les références de type ${VAR} dans config.yaml (p. ex. un jeton de webhook d'alerte), et non des surcharges par paramètre.
secret_environment_variables{}Map variable d'environnement → nom du secret Secret Manager (facultatif ; aucun n'est requis).

Groupe 11 — Stockage et système de fichiers​

VariableValeur par défautDescription
enable_nfsfalseMontage facultatif pour un historique durable. Attention : présente un risque lié à WAL sur un système de fichiers réseau — voir la §1.
nfs_mount_path/dataChemin de montage NFS ; correspond au storage.path intégré dans config.yaml.
storage_buckets[]Non requis — Gatus n'utilise aucun stockage d'objets.

Groupe 12 — Backend de base de données​

VariableValeur par défautDescription
database_typeNONEGatus n'a pas de base de données externe ; laissez NONE.
application_database_name / application_database_usergatusInertes sauf si une base de données externe est délibérément activée.

Groupe 13 — Jobs et tâches planifiées​

VariableValeur par défautDescription
initialization_jobs[]Gatus n'a besoin d'aucun job d'initialisation ; laissez vide.
cron_jobs[]Jobs Cloud Run planifiés facultatifs.

Groupe 14 — Observabilité et santé​

VariableValeur par défautDescription
startup_probeHTTP /health 10s delaySonde de démarrage. Gatus devient sain en quelques secondes.
liveness_probeHTTP /health 15s delaySonde de vivacité.
uptime_check_config{ enabled=false, path="/health" }Test de disponibilité Cloud Monitoring facultatif.

Groupe 16 — Cache Redis​

VariableValeur par défautDescription
enable_redisfalseNon requis — Gatus ne dépend pas de Redis.

Toutes les autres entrées suivent le comportement standard d'App_CloudRun.


5. Sorties​

Renvoyés lorsqu'un déploiement réussit — le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du service Cloud Run.
service_urlURL run.app par défaut du service.
service_locationRégion dans laquelle le service s'exécute.
stage_servicesURL des services propres à chaque étape (Cloud Deploy).
load_balancer_ip / load_balancer_urlIP / URL de l'équilibreur de charge HTTPS externe (lorsqu'il est activé).
database_instance_name / database_name / database_userIdentifiants de la base de données — vides pour le moteur NONE par défaut.
database_password_secret / database_host / database_portChamps du point de terminaison de la base de données — inutilisés avec NONE.
storage_bucketsBuckets Cloud Storage créés (aucun par défaut).
network_name / network_exists / regionsRéseau VPC, présence, régions.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channels / uptime_check_namesÉtat de la surveillance, canaux, tests de disponibilité.
initialization_jobsNoms des éventuels jobs de configuration (aucun par défaut).
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / github_repository_url / github_repository_owner / github_repository_name / cicd_configurationÉtat et détails du CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat de la journalisation d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

Validation héritée au moment du plan. Ce module transmet sa configuration au moteur du socle App_CloudRun, qui valide les valeurs et leurs combinaisons au moment du plan — IAP sans identité autorisée, un runtime gen1 avec des montages NFS/GCS, un container_port/timeout_seconds hors limites, une valeur de mémoire inférieure au plancher de gen2. Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource, de sorte que la plupart des erreurs ci-dessous sont détectées en amont plutôt qu'à l'apply ou à l'exécution.

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
enable_nfs (pour un historique durable)Laissez false ; utilisez plutôt Gatus_GKE avec stateful_pvc_enabledCritiqueGatus code en dur le mode de journalisation WAL de SQLite, que la documentation de SQLite elle-même indique comme non pris en charge sur les systèmes de fichiers réseau — un historique sur NFS risque une corruption silencieuse au fil du temps.
max_instance_count1ÉlevéAu-delà de 1, chaque réplica interroge indépendamment tous les points de terminaison, ce qui duplique les notifications d'alerte sans aucune coordination entre les instances.
cpu_always_allocatedtrueÉlevéLe définir sur false permet à Cloud Run de brider le CPU entre les requêtes, ce qui bloque ou saute silencieusement les vérifications planifiées des points de terminaison par le watchdog.
ingress_settingsallÉlevéinternal rend une page de statut publique inaccessible depuis l'extérieur du VPC.
enable_iapuniquement si l'accès doit être authentifiéÉlevéIAP exige une connexion Google pour chaque requête, ce qui bloque la consultation non authentifiée de la page de statut — rarement ce que souhaite une page de statut publique.
Bloc security de Gatus dans config.yamlÀ configurer si la page contient des noms de points de terminaison sensiblesMoyenLaissée par défaut, la page de statut (y compris les noms de tous les points de terminaison configurés et leur historique de disponibilité) est visible publiquement par toute personne disposant de l'URL.
container_port8080MoyenLe remplacer par une valeur sur laquelle Gatus n'écoute pas fait échouer toutes les sondes de santé.
memory_limit512MiFaibleL'environnement d'exécution gen2 rejette les valeurs inférieures à 512Mi au moment de l'apply.
application_versionÉpinglez v5.x.y en productionFaiblelatest correspond à une base épinglée (v5.36.0) ; épinglez explicitement pour maîtriser les mises à niveau.

Pour le comportement du socle évoqué tout au long de cette page — identité du service, mise à l'échelle et concurrence, entrée et équilibrage de charge, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_CloudRun. La configuration applicative propre à Gatus, partagée avec la variante GKE, est décrite dans Gatus_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.