Aller au contenu principal

Métriques applicatives

Exporter les métriques applicatives vers Prometheus​

GitGuardian expose des métriques applicatives au format Prometheus, afin que vous puissiez les collecter pour la surveillance et les alertes.

info

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

Métriques disponibles​

GitGuardian exporte les métriques suivantes, regroupées par domaine.

Noms des métriques dans Prometheus

Les métriques sont listées avec les noms exposés dans Prometheus. Certaines jauges se terminent également par _total, vérifiez donc la colonne Type avant d'utiliser rate(). Prometheus ajoute _bucket, _sum et _count aux noms des histogrammes, même lorsque le nom se termine déjà par _bucket. Par exemple, gim_celery_task_runtime_bucket est interrogé sous la forme gim_celery_task_runtime_bucket_bucket. Sur les instances Self-Hosted, le label plan est toujours on_prem.

Où les métriques sont exposées​

Chaque métrique est exposée par le pod qui l'enregistre :

  • Service app-exporter : jauges calculées à partir de la base de données et de Redis (utilisateurs, incidents, commits, scans actifs, infrastructure, longueur de file d'attente, installations, vérifications de santé, tâches périodiques, et quota, utilisation et tokens de l'API publique).
  • Pods worker Celery (port 9808) : métriques enregistrées par les tâches en arrière-plan, qui couvrent la plupart des compteurs et histogrammes de cette page.
  • Pods de l'application web (/metrics sur le port 5050, ou 5051 pour public-api) : métriques enregistrées pendant le traitement des requêtes, telles que les requêtes HTTP, l'authentification, SCIM, les appels à l'API publique et les événements webhook reçus par les pods hook.

Les Service Monitors fournis couvrent app-exporter, les workers Celery et le ML Secret Engine lorsqu'il est déployé. Ils ne couvrent pas les pods de l'application web, sauf les pods hook lorsque observability.exporters.webAppExporter.enabled vaut true. Pour collecter les métriques des autres pods de l'application web, ajoutez votre propre ServiceMonitor ou PodMonitor.

Chaque pod ne rapporte que ses propres valeurs, agrégez donc les données de tous les pods dans vos requêtes.

Utilisateurs et incidents​

MétriqueTypeDescriptionDimensions
gim_active_users_totalGaugeTous les utilisateurs de l'instanceAucune
gim_billable_users_totalGaugeDéveloppeurs contributeurs comptabilisés dans votre licenceAucune
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_totalGaugeScans actuellement en attente ou en cours, par fonctionnalité de scanscan_feature, status, plan
gim_scan_ended_totalCounterScans terminés, avec ou sans succèsframework_version, source_type, status, scan_type, plan, failure_reason, exception, fault_domain
gim_scan_pending_duration_secondsHistogramTemps passé par un scan en attente avant son lancementframework_version, source_type, status, scan_type, plan
gim_scan_duration_secondsHistogramDurée du scan, du lancement à la finframework_version, source_type, status, scan_type, plan
gim_scan_total_duration_secondsHistogramDurée de scan de bout en bout, de la création à la finframework_version, source_type, status, scan_type, plan, trigger_origin, trigger_family
gim_scan_elements_scanned_totalCounterÉléments scannéssource_type, scan_method, plan
gim_scan_elements_skipped_totalCounterÉléments ignorés pendant les scanssource_type, reason, plan
gim_scan_elements_failed_totalCounterÉléments ayant échoué pendant les scanssource_type, reason, plan
gim_scan_data_downloaded_bytes_totalCounterOctets téléchargés depuis les sources pendant les scanssource_type, plan
gim_scan_data_scanned_bytes_totalCounterOctets scannés à la recherche de secrets pendant les scanssource_type, plan
gim_historical_scan_failure_totalCounterDéprécié, utilisez gim_scan_ended_total. Scans terminés sans succèsintegration_name, scan_feature, scan_status, exception, failure_reason
gim_historical_scan_duration_seconds_bucketHistogramDurée des scans de dépôts et des scans historiques ou récurrents d'autres sourcesscan_feature, plan
gim_vcs_scan_deferred_totalCounterScans VCS différés parce que le workspace a atteint son nombre maximum de scans VCS simultanésretry_number
gim_vcs_scan_retry_scheduled_totalCounterNouvelles tentatives de scan VCS planifiées après un échecsource_type, failure_reason
gim_vcs_scan_retry_outcome_totalCounterStatut final des nouvelles tentatives de scan VCSsource_type, status
gim_vcs_clone_time_seconds_bucketHistogramTemps nécessaire pour cloner un dépôtintegration_name, plan, clone_method
gim_tokenscanner_content_oversized_totalCounterContenu non scanné car il dépasse la taille de scan maximalecaller
  • Dans gim_repo_scan_active_statuses_total, la série scan_feature="check_run_pr" répète des scans déjà comptés sous secrets. Excluez-la lors de la somme sur l'ensemble des fonctionnalités.
  • Les métriques gim_scan_pending_duration_seconds, gim_scan_elements_* et gim_scan_data_* ne couvrent que les sources non-VCS (par exemple Slack, Jira ou Confluence).
  • gim_historical_scan_failure_total compte les scans en échec, expirés, ignorés, annulés et trop volumineux. Utilisez scan_status pour les distinguer.
  • La limite de scans VCS simultanés est désactivée par défaut, de sorte que gim_vcs_scan_deferred_total ne rapporte généralement aucune donnée.

Check runs GitHub​

MétriqueTypeDescriptionDimensions
gim_check_runs_init_totalCounterCheck runs initialisés, qu'ils finissent par être créés ou noncreated, setting_from, plan
gim_check_runs_created_totalCounterCheck runs GitHub créésplan, account_id
gim_check_runs_timed_out_totalCounterCheck runs GitHub ayant expiréplan, account_id
gim_check_runs_runtime_bucketHistogramDurée des check runs GitHub, temps d'attente inclusstatus, plan
gim_check_runs_error_codes_totalCounterErreurs de check runs GitHub par codeerror_code
gim_check_runs_pr_too_large_skipped_totalCounterCheck runs terminés comme neutres sans scan, parce que la pull request dépassait un seuil de tailleplan, reason
gim_check_runs_pr_too_large_scan_dispatched_totalCounterPull requests trop volumineuses pour le chemin de check run habituel, scannées via un check run basé sur un scan à la placeplan, reason
gim_check_runs_softtimelimit_retry_skipped_totalCounterCheck runs non réessayés après avoir atteint la limite de temps de la tâcheplaceholder
gim_github_call_errors_totalCounterErreurs GitHub lors du listage des pull requests d'une branche, comptées sur les check runs réessayésaction, error_class

Pour les métriques pr_too_large, reason correspond au seuil dépassé : commits, files ou changes.

Surveillance en temps réel​

MétriqueTypeDescriptionDimensions
gim_realtime_event_received_totalCounterÉvénements en temps réel reçus des intégrationsintegration_name, event_type
gim_realtime_event_evaluation_started_totalCounterÉvénements en temps réel dont l'évaluation a commencéintegration_name, plan, event_type
gim_realtime_event_evaluation_success_totalCounterÉvénements en temps réel évalués avec succèsintegration_name, plan, event_type
gim_realtime_event_evaluation_failure_totalCounterÉvénements en temps réel dont l'évaluation a échoué et qui ne seront pas réessayésintegration_name, exception, plan, event_type
gim_realtime_event_retry_totalCounterÉvénements en temps réel réessayés après que leur évaluation a atteint la limite de temps de la tâcheintegration_name, exception, plan, event_type
gim_realtime_event_dropped_totalCounterÉvénements en temps réel abandonnésintegration_name, plan, event_type
gim_realtime_elements_scanned_totalCounterÉléments en temps réel scannés à la recherche de secretsintegration_name, plan
gim_realtime_elements_skipped_totalCounterÉléments en temps réel ignorés avant le scanintegration_name, plan, reason
gim_realtime_elements_failed_totalCounterÉléments en temps réel ayant échoué pendant le scanintegration_name, plan, exception

Incidents et secrets​

MétriqueTypeDescriptionDimensions
gim_issue_seen_totalCounterIncidents vus lors des scanspolicy_name, type, kind, detector_name
gim_occurrence_seen_totalCounterOccurrences vues lors des scansintegration_name, policy_name, type, kind
gim_secret_validity_check_duration_secondsHistogramDurée des vérifications de validité des secretsdetector_name, validity_status, has_custom_host, timed_out
gim_secret_validity_status_transition_totalCounterRésultats des vérifications de validité, par statut de validité précédent et nouveau, y compris les statuts inchangésdetector_name, previous_status, new_status
gim_presence_check_duration_secondsHistogramDurée des vérifications de présencekind
gim_presence_check_success_totalCounterOccurrences vérifiées pour présencekind
gim_presence_check_updated_totalCounterOccurrences mises à jour par les vérifications de présencekind, presence_value
gim_playbook_activated_totalCounterPlaybooks activésplaybook_type, is_public
gim_playbook_deactivated_totalCounterPlaybooks désactivésplaybook_type, is_public
gim_playbook_issues_resolved_totalCounterIncidents résolus par les playbooksplaybook_type, is_public
gim_playbook_issues_ignored_totalCounterIncidents ignorés par les playbooksplaybook_type, is_public
gim_playbook_issues_unignored_totalCounterIncidents non ignorés par les playbooksplaybook_type, is_public

Infrastructure​

MétriqueTypeDescriptionDimensions
gim_postgres_used_disk_bytesGaugeTaille de la base de données PostgreSQL GitGuardian, hors fichiers WALAucune
gim_redis_used_memory_bytesGaugeMémoire utilisée par l'instance de cache RedisAucune
gim_redis_available_memory_bytesGaugeMémoire totale de l'hôte exécutant RedisAucune

gim_redis_available_memory_bytes correspond à la valeur Redis total_system_memory, et non à maxmemory ni à une limite de mémoire de conteneur. Sur Kubernetes, il s'agit de la mémoire du nœud exécutant Redis.

Workers et files d'attente Celery​

MétriqueTypeDescriptionDimensions
gim_celery_queue_lengthGaugeTâches en attente dans la filequeue_name, team
gim_celery_active_consumer_countGaugeProcessus worker consommant la file, rapportés par chaque pod workerqueue_name, team
gim_celery_worker_upGaugeWorkers Celery en cours d'exécution, chacun rapportant 1 une fois démarréplaceholder
gim_celery_worker_tasks_activeGaugeTâches en cours de traitementplaceholder
gim_celery_task_sent_totalCounterTâches envoyées à une filename, queue_name, team
gim_celery_task_received_totalCounterTâches reçues par un workername, 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 ayant échouéname, exception, queue_name, team
gim_celery_task_retried_totalCounterTâches réessayéesname, queue_name, team
gim_celery_task_revoked_totalCounterTâches révoquéesname, queue_name, team
gim_celery_task_queue_time_bucketHistogramTemps passé en attente dans la filename, queue_name, team
gim_celery_task_runtime_bucketHistogramDurée d'exécution des tâches terminées avec succèsname, queue_name, team

Le label placeholder vaut toujours ok. Les tâches envoyées lors du traitement d'une requête sont comptées dans gim_celery_task_sent_total par les pods de l'application web. Les tâches périodiques envoyées par le planificateur Celery beat ne sont pas comptées.

Requêtes HTTP​

MétriqueTypeDescriptionDimensions
gim_http_request_started_totalCounterRequêtes HTTP initiéesapi, method, view_name
gim_http_request_success_totalCounterRequêtes HTTP ayant renvoyé un statut inférieur à 400api, method, view_name, plan, ggshield_command, business_account_id
gim_http_request_failure_totalCounterRequêtes HTTP ayant renvoyé un statut 4xx ou 5xxapi, method, status_code, view_name, plan, ggshield_command, business_account_id
gim_http_request_exception_totalCounterRequêtes API où la vue a levé une exception non géréeapi, method, view_name, exception, plan
gim_http_request_view_duration_seconds_bucketHistogramTemps passé dans la vue, hors middlewareapi, method, view_name, plan
gim_http_request_middleware_before_duration_seconds_bucketHistogramTemps passé dans le middleware avant la vueapi
gim_http_request_middleware_after_duration_seconds_bucketHistogramTemps passé dans le middleware après la vueapi
gim_http_request_body_bytes_bucketHistogramTaille du corps de la requête, prise dans l'en-tête Content-Lengthapi
gim_requests_with_invalid_host_header_totalCounterRequêtes rejetées à cause d'un en-tête Host invalideapi, method

Intégrations et vérifications de santé​

MétriqueTypeDescriptionDimensions
gim_installations_totalGaugeInstallations d'intégrations dans n'importe quel étatintegration_type, account_id
gim_installations_statusGaugeInstallations d'intégrations par étatintegration_type, account_id, state
gim_installation_uptime_secondsHistogramTemps pendant lequel une installation est restée saine avant de devenir défaillanteintegration_type, account_id
gim_installation_downtime_secondsHistogramTemps pendant lequel une installation est restée défaillante avant de récupérerintegration_type, account_id
gim_integration_oauth2_access_tokens_expiring_soonGaugeTokens d'accès OAuth2 valides qui expirent dans la marge de renouvellement (Slack, Jira Cloud et Confluence Cloud)integration
gim_integration_api_call_success_totalCounterAppels API réussis vers les intégrationsintegration_name, method, status_code, api_endpoint
gim_integration_api_call_failure_totalCounterAppels API en échec vers les intégrationsintegration_name, method, status_code, exception, api_endpoint
gim_integration_api_call_retry_totalCounterNouvelles tentatives d'appels API vers les intégrationsintegration_name, method, exception, api_endpoint
gim_integration_api_call_rate_limit_totalCounterAppels API vers les intégrations ayant atteint la limite de débit du fournisseurintegration_name, method, status_code, api_endpoint
gim_integration_api_call_duration_totalCounterDurée cumulée des appels API vers les intégrations, en secondesintegration_name, method, status_code, api_endpoint
gim_integration_health_check_probe_failure_totalCounterSondes de vérification de santé en échec vers les intégrations, comptées séparément des échecs d'appels APIintegration_name, method, status_code, exception, api_endpoint
gim_integration_app_credential_invalid_totalCounterIdentifiants au niveau application d'une intégration rejetés par le fournisseurintegration_name, reason
gim_integrations_oauth2_renewal_totalCounterTentatives de renouvellement de token OAuth2integration, outcome, failure_reason, attempt_number
gim_integration_sync_runs_totalCounterExécutions de synchronisation d'installationsintegration_name, sync_type, source_type, outcome
gim_health_check_result_countGaugeServices par résultat de leur dernière vérification de santé, actualisé quotidiennementservice_name, status
gim_outdated_health_check_countGaugeVérifications de santé plus anciennes que la plage périodiqueservice_name
gim_health_check_skipped_totalCounterVérifications de santé ignoréesreason, service_name
gim_health_check_duration_metricHistogramDurée d'exécution des vérifications de santéservice_name

Certaines métriques d'intégration ne sont rapportées que par des intégrations spécifiques :

  • gim_integration_api_call_retry_total : Slack.
  • gim_integration_api_call_rate_limit_total : GitLab, Microsoft Teams, SharePoint Online, OneDrive, Amazon ECR et Amazon S3. Tous sauf GitLab comptent également ces appels dans gim_integration_api_call_failure_total, n'additionnez donc pas les deux.
  • gim_integration_app_credential_invalid_total : Microsoft Teams, SharePoint Online et OneDrive.

Notifications et e-mails​

MétriqueTypeDescriptionDimensions
gim_notifier_run_failure_totalCounterExécutions de notificateur ayant échouénotifier_name, exception, source_integration_name, event_type
gim_ebn_send_notification_event_totalCounterTentatives d'envoi de notification, y compris les nouvelles tentatives, les échecs et les notifications ignoréesevent_type, ebn_service_name, is_retry
gim_ebn_send_notification_event_success_totalCounterNotifications envoyées avec succèsevent_type, ebn_service_name, is_retry
gim_ebn_send_notification_event_failure_totalCounterNotifications dont l'envoi a échouéevent_type, ebn_service_name, is_retry, retryable
gim_ebn_send_notification_event_ignored_totalCounterNotifications ignorées sans être envoyées, par exemple lorsqu'un nouvel incident est déjà ignoré ou résoluevent_type, ebn_service_name, is_retry
gim_ebn_send_notification_event_duration_secondsHistogramTemps nécessaire pour envoyer une notificationevent_type, ebn_service_name, is_retry
gim_email_sent_success_totalCounterE-mails envoyés sans erreur, comptés par destinatairetemplate_name
gim_email_sent_failure_totalCounterE-mails dont l'envoi a échoué, comptés par destinatairetemplate_name, exception

Les e-mails envoyés lors du traitement d'une requête, tels que les codes MFA, sont comptés par les pods de l'application web. gim_email_sent_success_total augmente également lorsqu'aucun serveur de messagerie (SMTP ou SendGrid) n'est configuré, même si aucun e-mail n'est envoyé.

Authentification et provisionnement​

MétriqueTypeDescriptionDimensions
gim_authentication_sso_method_totalCounterRéponses SAML ayant passé les vérifications de signature et d'authentification, par méthode d'authentification rapportée par le fournisseur d'identitéauth_method, idp_type
gim_saml_sso_flow_started_totalCounterConnexions SSO SAML démarréesidp_type
gim_saml_sso_sca_received_totalCounterAssertions SAML reçues du fournisseur d'identitéidp_type
gim_saml_sso_sca_rejected_totalCounterAssertions SAML rejetéesidp_type, error_type
gim_mfa_code_generated_totalCounterCodes MFA générésflow, is_resend
gim_mfa_rate_limit_totalCounterRequêtes MFA rejetées par la limitation de débitflow, kind
gim_mfa_code_verification_totalCounterVérifications de codes MFAflow, is_success
gim_scim_user_created_totalCounterUtilisateurs créés via SCIMaccount_id
gim_scim_saml_user_created_totalCounterUtilisateurs SAML créés via SCIMaccount_id
gim_scim_member_created_totalCounterAppartenances créées via SCIMaccount_id
gim_scim_member_deleted_totalCounterAppartenances supprimées via SCIMaccount_id
gim_scim_error_total_metric_totalCounterErreurs renvoyées par l'API SCIMstatus_code, scim_type, operation
gim_members_deactivated_totalCounterMembers désactivésplan
gim_members_reactivated_totalCounterMembers réactivésplan

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 écoulé depuis le dernier envoi de la tâche par le planificateurtask_name, queue_name

API publique​

MétriqueTypeDescriptionDimensions
gim_public_api_quota_totalGaugeUtilisation maximale autorisée de l'APIaccount
gim_public_api_usage_totalGaugeUtilisation actuelle de l'APIaccount
gim_public_api_token_totalGaugeTokens API actifsaccount, type
gim_public_api_scan_duration_secondsHistogramDurée des scans de contenu via l'APIis_business, preset_name, all_secrets, multiscan
gim_public_api_scan_total_documents_size_bytesHistogramTaille totale des documents scannés via l'APIis_business, preset_name, multiscan
gim_invalid_api_key_totalCounterAppels API rejetés à cause d'une clé API invalidemethod, path, api_type, view_name, reason, token_id
gim_quota_limit_reached_totalCounterAppels API rejetés car le quota était atteintplan, business_account_id
gim_ggshield_calls_totalCounterAppels effectués par ggshieldggshield_version, ggshield_os_name, ggshield_python_version, ggshield_command
Santé du système​
MétriquePoints de vigilance
gim_celery_queue_lengthUn arriéré qui ne cesse de croître est un signe précoce de saturation.
gim_celery_active_consumer_countUne baisse signifie que des pods worker se sont arrêtés. Une file sans consommateur n'a aucune série du tout : voir les exemples de requêtes ci-dessous.
gim_postgres_used_disk_bytesSuivez la croissance de la base de données. Surveillez également l'utilisation du disque du volume PostgreSQL.
gim_redis_used_memory_bytes / gim_redis_available_memory_bytesUn ratio élevé indique une pression mémoire sur l'hôte Redis. Pour détecter Redis atteignant sa propre limite, comparez avec maxmemory ou la limite de mémoire du pod.
gim_periodic_task_not_run_for_secondsComparez avec gim_periodic_task_period_seconds pour détecter les tâches périodiques bloquées.
API et intégrations​
MétriquePoints de vigilance
gim_http_request_failure_totalFiltrez par status_code pour repérer les pics de taux d'erreur (en particulier les 5xx).
gim_http_request_view_duration_seconds_bucketSuivez la latence des vues (P95/P99) pour détecter les ralentissements. Elle exclut le temps de middleware.
gim_health_check_result_countFiltrez par status="not_ok" pour détecter les intégrations défaillantes. Actualisé quotidiennement, il peut donc accuser un retard pouvant aller jusqu'à un jour.
gim_integration_api_call_failure_totalFiltrez par integration_name et status_code pour repérer un fournisseur qui rejette ou fait échouer les appels API.
gim_check_runs_timed_out_totalUn taux croissant signifie que les check runs GitHub ne se terminent pas à temps.
gim_check_runs_pr_too_large_skipped_totalUn taux croissant signifie que davantage de pull requests sont ignorées pour cause de taille.
gim_scan_ended_totalFiltrez par status!="finished" pour repérer les scans infructueux, y compris ceux qui ont été annulés. fault_domain indique l'origine de l'échec : gim (GitGuardian), customer (accès, ressources supprimées, limites de débit ou limites de taille de votre côté) ou provider (erreurs temporaires du fournisseur de source). Déclenchez une alerte sur fault_domain="gim".
gim_installations_statusComparez avec gim_installations_total pour suivre les installations par état.
gim_ebn_send_notification_event_failure_totalLes échecs avec retryable="False" sont définitifs. Un taux soutenu signifie que les notifications ne sont pas envoyées.

Les métriques de requêtes HTTP sont exposées par les pods de l'application web, que les Service Monitors fournis ne couvrent pas (voir Où les métriques sont exposées).

Exemples de requêtes PromQL​
# Celery queue saturation (waiting tasks per active consumer)
max by (queue_name) (gim_celery_queue_length) / sum by (queue_name) (gim_celery_active_consumer_count)

# Queues with waiting tasks and no active consumer (not shown by the saturation query above)
max by (queue_name) (gim_celery_queue_length) > 0 unless on (queue_name) sum by (queue_name) (gim_celery_active_consumer_count)

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

# View latency P95 over the last 5 minutes (excludes middleware time)
histogram_quantile(0.95, sum by (le) (rate(gim_http_request_view_duration_seconds_bucket_bucket[5m])))

# Redis memory as a share of the host's total memory (%)
gim_redis_used_memory_bytes / (gim_redis_available_memory_bytes > 0) * 100

# Periodic tasks the scheduler has not sent for 2x their expected period
gim_periodic_task_not_run_for_seconds > 2 * gim_periodic_task_period_seconds
Exemples de règles d'alerte​

Voici des règles d'alerte Prometheus de départ que vous pouvez adapter à votre environnement :

groups:
- name: gitguardian
rules:
- alert: CeleryQueueBacklog
expr: max by (queue_name) (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_available_memory_bytes > 0) > 0.85
for: 10m

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

# Requires scraping the web application pods
- alert: HighHTTPErrorRate
expr: sum(rate(gim_http_request_failure_total{status_code=~"5.."}[5m])) > 0.1
for: 5m

Si Redis a maxmemory défini ou une limite de mémoire de conteneur, ajustez le seuil de RedisMemoryPressure.

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 standard et fonctionnent avec n'importe quelle instance Grafana connectée à votre serveur Prometheus.

Pour commencer :

  1. Ajoutez votre serveur Prometheus comme source de données Grafana.
  2. Créez des panneaux à l'aide des requêtes PromQL ci-dessus.
  3. Organisez les panneaux en lignes : Santé du système (files d'attente, Redis, Postgres, tâches périodiques) et API et intégrations (taux d'erreur, vérifications de santé).

Activer ou désactiver les métriques applicatives​

Les pods worker Celery et de l'application web exposent leurs métriques sans configuration supplémentaire. Pour activer les jauges app-exporter :

  • autorisez la collecte des métriques par l'application
  • activez l'export Prometheus

Autoriser la collecte des métriques​

Dans l'Admin Area, allez dans Preferences, cochez le feature flag prometheus_metrics_active et enregistrez.

Activate Applicative Metrics

Pour le désactiver, décochez le flag et enregistrez.

Tant qu'il est décoché, le service app-exporter renvoie une erreur 404. Les métriques des workers Celery et de l'application web ne sont pas affectées.

Installer Prometheus Operator​

Les métriques sont collectées par Prometheus à l'aide de Prometheus Operator.

Sur les Existing Clusters, installez-le vous-même (documentation d'installation).

Activer l'export Prometheus via KOTS​

Dans la KOTS Admin Console, ouvrez la page de configuration et cochez Activate Prometheus Exporter dans la section Prometheus.

Activate Prometheus Exporter in KOTS

Enregistrez la configuration et Deploy l'application. Cela déploie le service app-exporter et crée les Service Monitors.

Pour le désactiver, décochez la case, enregistrez et déployez à nouveau.

Activer l'export Prometheus via Helm​

Pour déployer le service app-exporter, définissez observability.exporters.statefulAppExporter.enabled=true dans votre fichier de valeurs.

observability:
exporters:
statefulAppExporter:
enabled: true

Si vous utilisez Prometheus Operator, définissez observability.serviceMonitors.enabled=true pour créer les Service Monitors. Définissez observability.exporters.webAppExporter.enabled=true pour couvrir également les pods hook.

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

Sinon, vous pouvez collecter manuellement les endpoints de métriques :

  • app-exporter : http://app-exporter.<namespace>.svc.cluster.local:9808/metrics
  • Workers Celery : chaque pod sur le port 9808, à /metrics. Utilisez la découverte des endpoints Kubernetes pour collecter chaque pod, car le service worker (par exemple worker ou scanners) ne joint qu'un seul pod par requête.
  • Pods de l'application web : chaque pod à /metrics, sur le port 5050 (5051 pour public-api).

Comment collecter les métriques​

Sur les Existing Clusters, vous installez et configurez Prometheus vous-même. Si vous utilisez la stack kube-prometheus avec les Service Monitors activés, Prometheus découvre automatiquement les pods couverts (voir Où les métriques sont exposées).

Votre instance Prometheus doit sélectionner ces Service Monitors. Par exemple, kube-prometheus-stack ne sélectionne que les Service Monitors qui portent son label release. Avec Helm, définissez-le avec observability.serviceMonitors.labels (voir Autoscaling).

Sinon, collectez les endpoints listés dans Activer l'export Prometheus via Helm.

Données d'utilisation​

GitGuardian collecte des données d'utilisation pour améliorer le produit et le support. Pour les désactiver, décochez custom_telemetry_active dans la section préférences de l'Admin area.

info

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

  • Amélioration du produit : les données d'utilisation nous montrent comment l'application fonctionne dans différents environnements, afin que nous sachions où concentrer les corrections et les tests.

  • Support plus rapide : lorsqu'un problème survient, les données d'utilisation nous aident à le trouver et à le corriger plus rapidement, ce qui signifie moins de temps d'arrêt pour vous.

  • Confidentialité : nous ne collectons aucune donnée personnelle ou sensible.

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

  • Replicated

    • Diverses métriques liées au déploiement telles que le statut cloud, la version et le temps de fonctionnement
  • System

    • Fournisseur SSO
    • Type de passerelle réseau
    • Statut du CA personnalisé et du proxy
    • Statut d'activation des métriques applicatives Prometheus
  • Users & Teams

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

    • Nombre de développeurs contributeurs comptabilisés dans votre licence, et le nombre exclu du décompte
    • Les deux mêmes décomptes ventilés par type de VCS (Azure DevOps, Bitbucket Cloud, Bitbucket Data Center, Gerrit, GitHub, GitHub Enterprise, GitLab)

    Il s'agit de décomptes agrégés d'adresses e-mail distinctes d'auteurs de commits. Les adresses e-mail elles-mêmes ne sont jamais transmises.

  • Historical Scan

    • Nombre de scans historiques annulés, en échec et terminés
    • Durées en centiles 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
  • Integrations

    • Nombre d'instances, d'installations, de projets, de sites pour les VCS et les autres sources de données
    • Nombre de sources surveillées et non surveillées, ainsi que les centiles de taille des sources et les utilisateurs estimés par VCS
  • Secret

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

    • Nombre d'appels pour les scans de secrets ggshield, y compris les différents modes et dépôts
    • Nombre de tokens d'accès personnels et de comptes de service actifs
    • Nombre d'appels à l'API publique