Aller au contenu principal

Métriques applicatives

Exporter les métriques de l'application vers Prometheus

Les métriques applicatives sont collectées grâce à Prometheus, un logiciel utilisé pour la surveillance d'événements et l'alerting, qui permet de scraper les données capturées dans l'application.

info

L'exporter Prometheus n'est pas pris en charge pour les clusters embedded.

Métriques disponibles

L'exporter Prometheus donne accès aux métriques suivantes, regroupées par domaine.

Utilisateurs et incidents

MétriqueTypeDescriptionDimensions
gim_active_users_totalGaugeTous les utilisateurs de l'instanceAucune
gim_issues_totalGaugeTous les incidentsSeverity, Status
gim_occurrences_totalGaugeToutes les occurrencesHidden, Status

Activité de scan

MétriqueTypeDescriptionDimensions
gim_commits_totalGaugeCommits traitésAccount, Scan type
gim_repo_scan_active_statuses_totalGaugeCompte des scans historiquesscan_feature, status
gim_check_runs_createdCounterCheck runs GitHub créésplan, account_id
gim_check_runs_timed_outCounterCheck runs GitHub qui ont expiréplan, account_id
gim_check_runs_runtime_bucketHistogramDurée des check runs GitHubstatus
gim_check_runs_error_codesCounterErreurs de check run GitHub par codeerror_code

Infrastructure

MétriqueTypeDescriptionDimensions
gim_postgres_used_disk_bytesGaugeEspace disque utilisé par PostgreSQLAucune
gim_redis_used_memory_bytesGaugeMémoire utilisée par RedisAucune
gim_redis_available_memory_bytesGaugeMémoire disponible pour RedisAucune

Workers et queues Celery

MétriqueTypeDescriptionDimensions
gim_celery_queue_lengthGaugeTâches en attente dans la queuequeue_name
gim_celery_active_consumer_countGaugeConsommateurs actifs dans la queue brokerqueue_name
gim_celery_worker_tasks_activeGaugeTâches actuellement en cours de traitementAucune
gim_celery_task_sent_totalCounterTâches envoyées dans une queuename, queue_name, team
gim_celery_task_started_totalCounterTâches démarrées par un workername, queue_name, team
gim_celery_task_succeeded_totalCounterTâches terminées avec succèsname, queue_name, team
gim_celery_task_failed_totalCounterTâches qui ont échouéname, exception, queue_name, team
gim_celery_task_retried_totalCounterTâches retentéesname, queue_name, team
gim_celery_task_queue_time_bucketHistogramTemps passé en attente dans la queuename, queue_name, team
gim_celery_task_runtime_bucketHistogramDurée d'exécution de tâchename, queue_name, team

Requêtes HTTP

MétriqueTypeDescriptionDimensions
gim_http_request_started_totalCounterRequêtes HTTP initiéesapi, method, view_name
gim_http_request_success_totalCounterRequêtes HTTP réussiesapi, method, view_name
gim_http_request_failure_totalCounterRequêtes HTTP échouéesapi, method, status_code, view_name
gim_http_request_exception_totalCounterRequêtes HTTP ayant levé une exceptionapi, method, view_name, exception
gim_http_request_view_duration_secondsHistogramDurée des requêtes HTTP par vueapi, method, view_name

Health checks

MétriqueTypeDescriptionDimensions
gim_health_check_result_countGaugeRésultats des health checksservice_name, status
gim_outdated_health_check_countGaugeHealth checks plus anciens que la plage périodiqueservice_name
gim_health_check_skipped_totalCounterHealth checks sautésreason, service_name
gim_health_check_duration_metricHistogramDurée d'exécution des health checksservice_name

Tâches périodiques

MétriqueTypeDescriptionDimensions
gim_periodic_task_period_secondsGaugePériodicité attendue d'une tâchetask_name, queue_name
gim_periodic_task_not_run_for_secondsGaugeTemps depuis la dernière exécution d'une tâchetask_name, queue_name

API publique

MétriqueTypeDescriptionDimensions
gim_public_api_quota_totalGaugeUsage maximum autorisé de l'APIAccount
gim_public_api_usage_totalGaugeUsage actuel de l'APIAccount
gim_public_api_token_totalGaugeTokens API actifsAccount, Type
Santé du système
MétriqueÀ surveiller
gim_celery_queue_lengthUne croissance du backlog de queue dans le temps est le premier signe de saturation du système.
gim_celery_active_consumer_countUne chute du nombre de workers signale des problèmes de disponibilité.
gim_postgres_used_disk_bytesSurveillez la pression disque avant qu'elle ne devienne critique.
gim_redis_used_memory_bytes / gim_redis_available_memory_bytesUn ratio élevé indique une pression mémoire sur le cache.
gim_periodic_task_not_run_for_secondsComparez à gim_periodic_task_period_seconds pour détecter les tâches bloquées.
API et intégrations
MétriqueÀ surveiller
gim_http_request_failure_totalFiltrez par status_code pour repérer les pics de taux d'erreur (en particulier 5xx).
gim_http_request_view_duration_secondsSuivez la latence API (P95/P99) pour détecter les ralentissements.
gim_health_check_result_countFiltrez par status=not_ok pour détecter les intégrations cassées.
Exemples de requêtes PromQL
# Celery queue saturation (tasks per worker)
gim_celery_queue_length / gim_celery_active_consumer_count

# HTTP 5xx error rate over the last 5 minutes
rate(gim_http_request_failure_total{status_code=~"5.."}[5m])

# API latency P95 over the last 5 minutes
histogram_quantile(0.95, rate(gim_http_request_view_duration_seconds_bucket[5m]))

# Redis memory utilization (%)
gim_redis_used_memory_bytes / (gim_redis_used_memory_bytes + gim_redis_available_memory_bytes) * 100

# Detect stalled periodic tasks (not run for 2x their expected period)
gim_periodic_task_not_run_for_seconds > 2 * gim_periodic_task_period_seconds
Exemples de règles d'alerting

Voici des règles Prometheus alerting rules de démarrage que vous pouvez adapter à votre environnement :

groups:
- name: gitguardian
rules:
- alert: CeleryQueueBacklog
expr: gim_celery_queue_length > 100
for: 5m
annotations:
summary: "Queue {{ $labels.queue_name }} has {{ $value }} pending tasks"

- alert: RedisMemoryPressure
expr: >
gim_redis_used_memory_bytes
/ (gim_redis_used_memory_bytes + gim_redis_available_memory_bytes) > 0.85
for: 10m

- alert: PeriodicTaskStalled
expr: gim_periodic_task_not_run_for_seconds > 2 * gim_periodic_task_period_seconds
for: 5m

- alert: HighHTTPErrorRate
expr: rate(gim_http_request_failure_total{status_code=~"5.."}[5m]) > 0.1
for: 5m
Visualiser les métriques avec Grafana

GitGuardian ne fournit pas de dashboards Grafana pré-construits, mais toutes les métriques gim_* sont des métriques Prometheus standards et fonctionnent avec n'importe quelle instance Grafana connectée à votre serveur Prometheus.

Pour démarrer :

  1. Ajoutez votre serveur Prometheus comme data source Grafana.
  2. Créez des panels en utilisant les requêtes PromQL ci-dessus.
  3. Organisez les panels en lignes : Santé du système (queues, Redis, Postgres, tâches périodiques) et API & Intégrations (taux d'erreur, health checks).

Activer ou désactiver les métriques applicatives

Les métriques applicatives sont désactivées par défaut. Deux étapes sont nécessaires pour activer les métriques applicatives :

  • autoriser la collecte des métriques par l'application
  • activer l'export Prometheus

Autoriser la collecte des métriques

Pour autoriser la collecte des métriques, allez dans la section Préférences de l'Admin Area, cochez le feature flag prometheus_metrics_active et enregistrez les paramètres.

Activate Applicative Metrics

Pour la désactiver, décochez ce paramètre et enregistrez les paramètres.

Installer Prometheus Operator

Les métriques sont collectées par Prometheus en utilisant le Prometheus Operator.

Pour les clusters existants, vous devez l'installer manuellement (documentation d'installation).

Activer l'export Prometheus via KOTS

Pour créer les ressources d'export et permettre la découverte automatique, allez dans la console d'administration KOTS et cochez la case Activate Prometheus Exporter dans la section Prometheus de la section configuration.

Activate Applicative Metrics

Puis enregistrez la configuration et Déployez l'application pour appliquer la nouvelle configuration.

Pour la désactiver, décochez ce paramètre, enregistrez la configuration et appliquez-la via un nouveau déploiement.

Activer l'export Prometheus via Helm

L'exporter de métriques applicatives peut être activé en définissant observability.exporters.webAppExporter.enabled=true dans le fichier de values.

observability:
exporters:
webAppExporter:
enabled: true

Notez que l'application Helm dispose aussi d'un Celery Exporter permettant de surveiller plusieurs métriques Celery comme « count of active tasks by queue ». La liste complète des métriques est disponible ici.

Vous pouvez activer Celery Exporter dans votre fichier de values :

observability:
exporters:
webAppExporter:
enabled: true
statefulAppExporter:
enabled: true

Si vous utilisez Prometheus Operator, vous pouvez vouloir utiliser le Service Monitor fourni pour la découverte automatique de l'exporter par Prometheus :

observability:
exporters:
webAppExporter:
enabled: true
statefulAppExporter:
enabled: true
serviceMonitors:
enabled: true

Sinon, vous pouvez scraper manuellement les exporters.

  • Les métriques applicatives peuvent être scrapées depuis le service app-exporter à : http://app-exporter:9808/metrics
  • Les métriques Celery peuvent être scrapées depuis le service celery-exporter à : http://celery-exporter:9808/metrics

Comment collecter les métriques

Sur les clusters existants, Prometheus doit être installé et configuré manuellement. Si l'opérateur Kube-Prometheus est utilisé, toutes les métriques applicatives seront automatiquement listées grâce au service Discovery de Kube-Prometheus Operator.

Sinon, une configuration manuelle peut être nécessaire. La découverte des métriques applicatives est possible via le service headless app-monitoring. Ce service expose un pod exporter servant les métriques sur http://exporter-xxxxx-xxxxx:9808/metrics

Données d'usage

GitGuardian collecte des données d'usage pour améliorer l'expérience utilisateur et le support. Cela peut être facilement désactivé en ajustant le paramètre custom_telemetry_active trouvé dans la section préférences de l'Admin area.

info

Pourquoi garder les données d'usage activées ?

  • Amélioration continue du produit : les données d'usage nous aident grandement à comprendre comment notre application est utilisée dans divers environnements. Cela nous permet de cibler spécifiquement les zones nécessitant des améliorations et de diriger nos efforts de tests. Cela garantit que notre produit évolue pour répondre efficacement aux besoins de nos utilisateurs tout en contribuant à une meilleure qualité et stabilité.

  • Support ciblé et efficace : en cas de problèmes techniques, les données d'usage permettent à GitGuardian d'identifier et résoudre les problèmes beaucoup plus rapidement. Cela signifie une indisponibilité réduite pour vous et une meilleure expérience utilisateur globale.

  • Sécurité et confidentialité : nous voulons vous rassurer que la confidentialité et la sécurité des données sont notre priorité absolue. Nous ne collectons aucune donnée personnelle ou sensible. Notre objectif est uniquement d'améliorer l'expérience utilisateur et les performances de notre produit.

Voici les catégories et métriques que nous collectons :

  • Replicated

    • Diverses métriques liées au déploiement comme le statut cloud, la version et l'uptime
  • Système

    • Fournisseur SSO
    • Type de Network Gateway
    • Statut Custom CA et proxy
    • Statut d'activation des métriques applicatives Prometheus
  • Utilisateurs & Teams

    • Nombre d'invités en attente, d'utilisateurs enregistrés avec différents niveaux d'accès, d'utilisateurs actifs.
  • Scan historique

    • Nombre de scans historiques annulés, échoués et terminés
    • Durées en percentile des scans historiques
    • Nombre de secrets trouvés par jour et de scans de sources par jour dans les scans historiques
    • Nombre de scans historiques considérés comme trop volumineux
  • Intégrations

    • Nombre d'instances, installations, projets, sites pour les VCS et autres sources de données
    • Nombre de sources surveillées et non surveillées, avec percentiles de taille de source et utilisateurs estimés par VCS
  • Secret

    • Nombre de détecteurs désactivés par catégorie, retours enregistrés et non enregistrés, et diverses métriques liées aux vérifications de validité de secrets et incidents
  • API publique

    • Nombre d'appels pour les scans de secrets ggshield, incluant différents modes et dépôts
    • Nombre de personal access tokens et service accounts actifs
    • Nombre d'appels à l'API publique