Applicative metrics
Export application metrics to Prometheus
GitGuardian exposes application metrics in the Prometheus format, so you can scrape them for monitoring and alerting.
The Prometheus exporter is not supported for embedded clusters.
Metrics available
GitGuardian exports the following metrics, grouped by area.
Metrics are listed with the names exposed in Prometheus. Some gauges also end in _total, so check the Type column before using rate().
Prometheus appends _bucket, _sum, and _count to histogram names, even when the name already ends in _bucket. For example, gim_celery_task_runtime_bucket is queried as gim_celery_task_runtime_bucket_bucket.
On self-hosted instances, the plan label is always on_prem.
Where metrics are served
Each metric is served by the pod that records it:
app-exporterservice: gauges computed from the database and Redis (users, incidents, commits, active scans, infrastructure, queue length, installations, health checks, periodic tasks, and Public API quota, usage, and tokens).- Celery worker pods (port
9808): metrics recorded by background tasks, which cover most counters and histograms on this page. - Web application pods (
/metricson port5050, or5051forpublic-api): metrics recorded while serving requests, such as HTTP requests, authentication, SCIM, Public API calls, and webhook events received by thehookpods.
The provided Service Monitors cover app-exporter, the Celery workers, and the ML Secret Engine when deployed. They do not cover web application pods, except hook pods when observability.exporters.webAppExporter.enabled is true. To collect metrics from the other web application pods, add your own ServiceMonitor or PodMonitor.
Each pod reports only its own values, so aggregate across pods in your queries.
Users and incidents
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_active_users_total | Gauge | All users in the instance | None |
gim_billable_users_total | Gauge | Contributing developers counted towards your license | None |
gim_issues_total | Gauge | All incidents | severity, status |
gim_occurrences_total | Gauge | All occurrences | hidden, status |
Scanning activity
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_commits_total | Gauge | Commits processed | account, scan_type |
gim_repo_scan_active_statuses_total | Gauge | Scans currently pending or running, by scan feature | scan_feature, status, plan |
gim_scan_ended_total | Counter | Scans that ended, successfully or not | framework_version, source_type, status, scan_type, plan, failure_reason, exception, fault_domain |
gim_scan_pending_duration_seconds | Histogram | Time a scan spent pending before it launched | framework_version, source_type, status, scan_type, plan |
gim_scan_duration_seconds | Histogram | Scan duration, from launch to end | framework_version, source_type, status, scan_type, plan |
gim_scan_total_duration_seconds | Histogram | End-to-end scan duration, from creation to end | framework_version, source_type, status, scan_type, plan, trigger_origin, trigger_family |
gim_scan_elements_scanned_total | Counter | Elements scanned | source_type, scan_method, plan |
gim_scan_elements_skipped_total | Counter | Elements skipped during scans | source_type, reason, plan |
gim_scan_elements_failed_total | Counter | Elements that failed during scans | source_type, reason, plan |
gim_scan_data_downloaded_bytes_total | Counter | Bytes downloaded from sources during scans | source_type, plan |
gim_scan_data_scanned_bytes_total | Counter | Bytes scanned for secrets during scans | source_type, plan |
gim_historical_scan_failure_total | Counter | Deprecated, use gim_scan_ended_total. Scans that ended without success | integration_name, scan_feature, scan_status, exception, failure_reason |
gim_historical_scan_duration_seconds_bucket | Histogram | Duration of repository scans and of historical or recurrent scans of other sources | scan_feature, plan |
gim_vcs_scan_deferred_total | Counter | VCS scans deferred because the workspace reached its maximum number of simultaneous VCS scans | retry_number |
gim_vcs_scan_retry_scheduled_total | Counter | VCS scan retries scheduled after a failure | source_type, failure_reason |
gim_vcs_scan_retry_outcome_total | Counter | Final status of VCS scan retries | source_type, status |
gim_vcs_clone_time_seconds_bucket | Histogram | Time taken to clone a repository | integration_name, plan, clone_method |
gim_tokenscanner_content_oversized_total | Counter | Content not scanned because it exceeds the maximum scan size | caller |
- In
gim_repo_scan_active_statuses_total, thescan_feature="check_run_pr"series repeats scans already counted undersecrets. Exclude it when summing across features. - The
gim_scan_pending_duration_seconds,gim_scan_elements_*, andgim_scan_data_*metrics only cover non-VCS sources (for example Slack, Jira, or Confluence). gim_historical_scan_failure_totalcounts failed, timed out, skipped, canceled, and too large scans. Usescan_statusto tell them apart.- The limit on simultaneous VCS scans is disabled by default, so
gim_vcs_scan_deferred_totalusually reports no data.
GitHub check runs
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_check_runs_init_total | Counter | Check runs initialized, whether or not they end up being created | created, setting_from, plan |
gim_check_runs_created_total | Counter | GitHub check runs created | plan, account_id |
gim_check_runs_timed_out_total | Counter | GitHub check runs that timed out | plan, account_id |
gim_check_runs_runtime_bucket | Histogram | GitHub check run duration, including queue time | status, plan |
gim_check_runs_error_codes_total | Counter | GitHub check run errors by code | error_code |
gim_check_runs_pr_too_large_skipped_total | Counter | Check runs completed as neutral without a scan, because the pull request exceeded a size threshold | plan, reason |
gim_check_runs_pr_too_large_scan_dispatched_total | Counter | Pull requests too large for the regular check run path, scanned with a scan-based check run instead | plan, reason |
gim_check_runs_softtimelimit_retry_skipped_total | Counter | Check runs not retried after hitting the task time limit | placeholder |
gim_github_call_errors_total | Counter | GitHub errors when listing a branch's pull requests, counted on retried check runs | action, error_class |
For the pr_too_large metrics, reason is the exceeded threshold: commits, files, or changes.
Real-time monitoring
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_realtime_event_received_total | Counter | Real-time events received from integrations | integration_name, event_type |
gim_realtime_event_evaluation_started_total | Counter | Real-time events whose evaluation started | integration_name, plan, event_type |
gim_realtime_event_evaluation_success_total | Counter | Real-time events evaluated successfully | integration_name, plan, event_type |
gim_realtime_event_evaluation_failure_total | Counter | Real-time events whose evaluation failed and will not be retried | integration_name, exception, plan, event_type |
gim_realtime_event_retry_total | Counter | Real-time events retried after their evaluation hit the task time limit | integration_name, exception, plan, event_type |
gim_realtime_event_dropped_total | Counter | Real-time events dropped | integration_name, plan, event_type |
gim_realtime_elements_scanned_total | Counter | Real-time elements scanned for secrets | integration_name, plan |
gim_realtime_elements_skipped_total | Counter | Real-time elements skipped before scanning | integration_name, plan, reason |
gim_realtime_elements_failed_total | Counter | Real-time elements that failed during scanning | integration_name, plan, exception |
Incidents and secrets
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_issue_seen_total | Counter | Incidents seen in scans | policy_name, type, kind, detector_name |
gim_occurrence_seen_total | Counter | Occurrences seen in scans | integration_name, policy_name, type, kind |
gim_secret_validity_check_duration_seconds | Histogram | Duration of secret validity checks | detector_name, validity_status, has_custom_host, timed_out |
gim_secret_validity_status_transition_total | Counter | Validity check results, by previous and new validity status, including unchanged statuses | detector_name, previous_status, new_status |
gim_presence_check_duration_seconds | Histogram | Duration of presence checks | kind |
gim_presence_check_success_total | Counter | Occurrences checked for presence | kind |
gim_presence_check_updated_total | Counter | Occurrences updated by presence checks | kind, presence_value |
gim_playbook_activated_total | Counter | Playbooks activated | playbook_type, is_public |
gim_playbook_deactivated_total | Counter | Playbooks deactivated | playbook_type, is_public |
gim_playbook_issues_resolved_total | Counter | Incidents resolved by playbooks | playbook_type, is_public |
gim_playbook_issues_ignored_total | Counter | Incidents ignored by playbooks | playbook_type, is_public |
gim_playbook_issues_unignored_total | Counter | Incidents unignored by playbooks | playbook_type, is_public |
Infrastructure
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_postgres_used_disk_bytes | Gauge | Size of the GitGuardian PostgreSQL database, excluding WAL files | None |
gim_redis_used_memory_bytes | Gauge | Memory used by the Redis cache instance | None |
gim_redis_available_memory_bytes | Gauge | Total memory of the host running Redis | None |
gim_redis_available_memory_bytes is the Redis total_system_memory value, not maxmemory or a container memory limit. On Kubernetes, it is the memory of the node running Redis.
Celery workers and queues
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_celery_queue_length | Gauge | Tasks waiting in queue | queue_name, team |
gim_celery_active_consumer_count | Gauge | Worker processes consuming the queue, reported by each worker pod | queue_name, team |
gim_celery_worker_up | Gauge | Running Celery workers, each reporting 1 once started | placeholder |
gim_celery_worker_tasks_active | Gauge | Tasks currently being processed | placeholder |
gim_celery_task_sent_total | Counter | Tasks sent to a queue | name, queue_name, team |
gim_celery_task_received_total | Counter | Tasks received by a worker | name, queue_name, team |
gim_celery_task_started_total | Counter | Tasks started by a worker | name, queue_name, team |
gim_celery_task_succeeded_total | Counter | Tasks completed successfully | name, queue_name, team |
gim_celery_task_failed_total | Counter | Tasks that failed | name, exception, queue_name, team |
gim_celery_task_retried_total | Counter | Tasks retried | name, queue_name, team |
gim_celery_task_revoked_total | Counter | Tasks revoked | name, queue_name, team |
gim_celery_task_queue_time_bucket | Histogram | Time spent waiting in queue | name, queue_name, team |
gim_celery_task_runtime_bucket | Histogram | Execution duration of tasks that completed successfully | name, queue_name, team |
The placeholder label is always ok. Tasks sent while serving a request are counted in gim_celery_task_sent_total by the web application pods. Periodic tasks sent by the Celery beat scheduler are not counted.
HTTP requests
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_http_request_started_total | Counter | HTTP requests initiated | api, method, view_name |
gim_http_request_success_total | Counter | HTTP requests that returned a status below 400 | api, method, view_name, plan, ggshield_command, business_account_id |
gim_http_request_failure_total | Counter | HTTP requests that returned a 4xx or 5xx status | api, method, status_code, view_name, plan, ggshield_command, business_account_id |
gim_http_request_exception_total | Counter | API requests where the view raised an unhandled exception | api, method, view_name, exception, plan |
gim_http_request_view_duration_seconds_bucket | Histogram | Time spent in the view, excluding middleware | api, method, view_name, plan |
gim_http_request_middleware_before_duration_seconds_bucket | Histogram | Time spent in middleware before the view | api |
gim_http_request_middleware_after_duration_seconds_bucket | Histogram | Time spent in middleware after the view | api |
gim_http_request_body_bytes_bucket | Histogram | Size of the request body, taken from the Content-Length header | api |
gim_requests_with_invalid_host_header_total | Counter | Requests rejected because of an invalid Host header | api, method |
Integrations and health checks
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_installations_total | Gauge | Integration installations in any state | integration_type, account_id |
gim_installations_status | Gauge | Integration installations by state | integration_type, account_id, state |
gim_installation_uptime_seconds | Histogram | Time an installation stayed healthy before becoming unhealthy | integration_type, account_id |
gim_installation_downtime_seconds | Histogram | Time an installation stayed unhealthy before recovering | integration_type, account_id |
gim_integration_oauth2_access_tokens_expiring_soon | Gauge | Valid OAuth2 access tokens that expire within the renewal margin (Slack, Jira Cloud, and Confluence Cloud) | integration |
gim_integration_api_call_success_total | Counter | Successful API calls to integrations | integration_name, method, status_code, api_endpoint |
gim_integration_api_call_failure_total | Counter | Failed API calls to integrations | integration_name, method, status_code, exception, api_endpoint |
gim_integration_api_call_retry_total | Counter | Retry attempts of API calls to integrations | integration_name, method, exception, api_endpoint |
gim_integration_api_call_rate_limit_total | Counter | API calls to integrations that hit the provider's rate limit | integration_name, method, status_code, api_endpoint |
gim_integration_api_call_duration_total | Counter | Cumulative duration of API calls to integrations, in seconds | integration_name, method, status_code, api_endpoint |
gim_integration_health_check_probe_failure_total | Counter | Failed health check probes to integrations, counted separately from API call failures | integration_name, method, status_code, exception, api_endpoint |
gim_integration_app_credential_invalid_total | Counter | App-level credentials of an integration rejected by the provider | integration_name, reason |
gim_integrations_oauth2_renewal_total | Counter | OAuth2 token renewal attempts | integration, outcome, failure_reason, attempt_number |
gim_integration_sync_runs_total | Counter | Installation synchronization runs | integration_name, sync_type, source_type, outcome |
gim_health_check_result_count | Gauge | Services by result of their latest health check, refreshed daily | service_name, status |
gim_outdated_health_check_count | Gauge | Health checks older than the periodic range | service_name |
gim_health_check_skipped_total | Counter | Health checks skipped | reason, service_name |
gim_health_check_duration_metric | Histogram | Health check execution duration | service_name |
Some integration metrics are reported only by specific integrations:
gim_integration_api_call_retry_total: Slack.gim_integration_api_call_rate_limit_total: GitLab, Microsoft Teams, SharePoint Online, OneDrive, Amazon ECR, and Amazon S3. All except GitLab also count these calls ingim_integration_api_call_failure_total, so do not add the two together.gim_integration_app_credential_invalid_total: Microsoft Teams, SharePoint Online, and OneDrive.
Notifications and emails
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_notifier_run_failure_total | Counter | Notifier runs that failed | notifier_name, exception, source_integration_name, event_type |
gim_ebn_send_notification_event_total | Counter | Notification send attempts, including retries, failures, and ignored notifications | event_type, ebn_service_name, is_retry |
gim_ebn_send_notification_event_success_total | Counter | Notifications sent successfully | event_type, ebn_service_name, is_retry |
gim_ebn_send_notification_event_failure_total | Counter | Notifications that failed to be sent | event_type, ebn_service_name, is_retry, retryable |
gim_ebn_send_notification_event_ignored_total | Counter | Notifications ignored without being sent, for example when a new incident is already ignored or resolved | event_type, ebn_service_name, is_retry |
gim_ebn_send_notification_event_duration_seconds | Histogram | Time taken to send a notification | event_type, ebn_service_name, is_retry |
gim_email_sent_success_total | Counter | Emails sent without error, counted per recipient | template_name |
gim_email_sent_failure_total | Counter | Emails that failed to be sent, counted per recipient | template_name, exception |
Emails sent while serving a request, such as MFA codes, are counted by the web application pods. gim_email_sent_success_total also increases when no email server (SMTP or SendGrid) is configured, even though no email is sent.
Authentication and provisioning
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_authentication_sso_method_total | Counter | SAML responses that passed signature and authentication checks, by authentication method reported by the identity provider | auth_method, idp_type |
gim_saml_sso_flow_started_total | Counter | SAML SSO logins started | idp_type |
gim_saml_sso_sca_received_total | Counter | SAML assertions received from the identity provider | idp_type |
gim_saml_sso_sca_rejected_total | Counter | SAML assertions rejected | idp_type, error_type |
gim_mfa_code_generated_total | Counter | MFA codes generated | flow, is_resend |
gim_mfa_rate_limit_total | Counter | MFA requests rejected by rate limiting | flow, kind |
gim_mfa_code_verification_total | Counter | MFA code verifications | flow, is_success |
gim_scim_user_created_total | Counter | Users created through SCIM | account_id |
gim_scim_saml_user_created_total | Counter | SAML users created through SCIM | account_id |
gim_scim_member_created_total | Counter | Memberships created through SCIM | account_id |
gim_scim_member_deleted_total | Counter | Memberships deleted through SCIM | account_id |
gim_scim_error_total_metric_total | Counter | Errors returned by the SCIM API | status_code, scim_type, operation |
gim_members_deactivated_total | Counter | Members deactivated | plan |
gim_members_reactivated_total | Counter | Members reactivated | plan |
Periodic tasks
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_periodic_task_period_seconds | Gauge | Expected periodicity of a task | task_name, queue_name |
gim_periodic_task_not_run_for_seconds | Gauge | Time since the scheduler last sent the task | task_name, queue_name |
Public API
| Metric | Type | Description | Dimensions |
|---|---|---|---|
gim_public_api_quota_total | Gauge | Maximum allowed API usage | account |
gim_public_api_usage_total | Gauge | Current API usage | account |
gim_public_api_token_total | Gauge | Active API tokens | account, type |
gim_public_api_scan_duration_seconds | Histogram | Duration of content scans through the API | is_business, preset_name, all_secrets, multiscan |
gim_public_api_scan_total_documents_size_bytes | Histogram | Total size of documents scanned through the API | is_business, preset_name, multiscan |
gim_invalid_api_key_total | Counter | API calls rejected because of an invalid API key | method, path, api_type, view_name, reason, token_id |
gim_quota_limit_reached_total | Counter | API calls rejected because the quota was reached | plan, business_account_id |
gim_ggshield_calls_total | Counter | Calls made by ggshield | ggshield_version, ggshield_os_name, ggshield_python_version, ggshield_command |
Recommended monitoring
System health
| Metric | What to watch for |
|---|---|
gim_celery_queue_length | A backlog that keeps growing is an early sign of saturation. |
gim_celery_active_consumer_count | A drop means worker pods stopped. A queue with no consumer has no series at all: see the example queries below. |
gim_postgres_used_disk_bytes | Track database growth. Also monitor the PostgreSQL volume disk usage. |
gim_redis_used_memory_bytes / gim_redis_available_memory_bytes | A high ratio indicates memory pressure on the Redis host. To detect Redis reaching its own limit, compare with maxmemory or the pod memory limit. |
gim_periodic_task_not_run_for_seconds | Compare against gim_periodic_task_period_seconds to detect stalled periodic tasks. |
API and integrations
| Metric | What to watch for |
|---|---|
gim_http_request_failure_total | Filter by status_code to spot error rate spikes (especially 5xx). |
gim_http_request_view_duration_seconds_bucket | Track view latency (P95/P99) to detect slowdowns. It excludes middleware time. |
gim_health_check_result_count | Filter by status="not_ok" to detect broken integrations. Refreshed daily, so it can lag by up to a day. |
gim_integration_api_call_failure_total | Filter by integration_name and status_code to spot a provider rejecting or failing API calls. |
gim_check_runs_timed_out_total | A rising rate means GitHub check runs are not completing in time. |
gim_check_runs_pr_too_large_skipped_total | A rising rate means more pull requests are skipped for size. |
gim_scan_ended_total | Filter by status!="finished" to spot unsuccessful scans, including canceled ones. fault_domain tells where the failure comes from: gim (GitGuardian), customer (access, deleted resources, rate limits, or size limits on your side), or provider (temporary source provider errors). Alert on fault_domain="gim". |
gim_installations_status | Compare with gim_installations_total to track installations by state. |
gim_ebn_send_notification_event_failure_total | Failures with retryable="False" are final. A sustained rate means notifications are not delivered. |
HTTP request metrics are served by the web application pods, which the provided Service Monitors do not cover (see Where metrics are served).
Example PromQL queries
# 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
Example alerting rules
Below are starter Prometheus alerting rules you can adapt to your environment:
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
If Redis has maxmemory set or a container memory limit, adjust the RedisMemoryPressure threshold.
Visualizing metrics with Grafana
GitGuardian does not ship pre-built Grafana dashboards, but all gim_* metrics are standard Prometheus metrics and work with any Grafana instance connected to your Prometheus server.
To get started:
- Add your Prometheus server as a Grafana data source.
- Create panels using the PromQL queries above.
- Organize panels into rows: System health (queues, Redis, Postgres, periodic tasks) and API and integrations (error rates, health checks).
Enable or disable application metrics
Celery worker and web application pods expose their metrics without extra configuration. To activate the app-exporter gauges:
- authorize collection of metrics by the application
- activate Prometheus export
Authorize metrics collection
In the Admin Area, go to Preferences, check the prometheus_metrics_active
feature flag, and save.

To disable it, uncheck the flag and save.
While unchecked, the app-exporter service returns a 404 error. Celery worker and web application metrics are not affected.
Install Prometheus Operator
Metrics are collected by Prometheus using the Prometheus Operator.
On Existing Clusters, install it yourself (installation documentation).
Activate Prometheus export using KOTS
In the KOTS Admin Console, open the configuration page and check Activate Prometheus Exporter in the Prometheus section.

Save the configuration and Deploy the application. This deploys the app-exporter service and creates the Service Monitors.
To disable it, uncheck the box, save, and deploy again.
Activate Prometheus export using Helm
To deploy the app-exporter service, set observability.exporters.statefulAppExporter.enabled=true in your values file.
observability:
exporters:
statefulAppExporter:
enabled: true
If you use Prometheus Operator, set observability.serviceMonitors.enabled=true to create the Service Monitors. Set observability.exporters.webAppExporter.enabled=true to also cover the hook pods.
observability:
exporters:
webAppExporter:
enabled: true
statefulAppExporter:
enabled: true
serviceMonitors:
enabled: true
Otherwise, you can manually scrape the metric endpoints:
app-exporter:http://app-exporter.<namespace>.svc.cluster.local:9808/metrics- Celery workers: each pod on port
9808, at/metrics. Use Kubernetes endpoints discovery to scrape every pod, since the worker service (for exampleworkerorscanners) only reaches one pod per request. - Web application pods: each pod at
/metrics, on port5050(5051forpublic-api).
How to collect metrics
On Existing Clusters, you install and configure Prometheus yourself. If you use the kube-prometheus stack with Service Monitors enabled, Prometheus discovers the covered pods automatically (see Where metrics are served).
Your Prometheus instance must select these Service Monitors. For example,
kube-prometheus-stack only selects Service Monitors that carry its release
label. With Helm, set it with observability.serviceMonitors.labels (see
Autoscaling).
Otherwise, scrape the endpoints listed in Activate Prometheus export using Helm.
Usage data
GitGuardian collects usage data to improve the product and support. To turn it off,
uncheck custom_telemetry_active in the preferences
section of the Admin area.
Why keep usage data enabled?
-
Product improvement: usage data shows us how the application runs across environments, so we know where to focus fixes and testing.
-
Faster support: when something breaks, usage data helps us find and fix the issue faster, which means less downtime for you.
-
Privacy: we do not collect personal or sensitive data.
Here are the categories and metrics we collect:
-
Replicated
- Various deployment-related metrics such as cloud status, version, and uptime
-
System
- SSO Provider
- Network Gateway Type
- Custom CA and proxy status
- Prometheus Application metrics activation status
-
Users & Teams
- Number of pending invitees, registered users with different access levels, active users.
-
Billing
- Number of contributing developers counted towards your license, and the number excluded from the count
- The same two counts broken down per VCS type (Azure DevOps, Bitbucket Cloud, Bitbucket Data Center, Gerrit, GitHub, GitHub Enterprise, GitLab)
These are aggregate counts of distinct commit author email addresses. The email addresses themselves are never transmitted.
-
Historical Scan
- Number of historical scans canceled, failed, and finished
- Percentile durations of historical scans
- Number of secrets found per day and source scans per day in historical scans
- Number of historical scans considered too large
-
Integrations
- Number of instances, installations, projects, sites for VCS and Other Data Sources
- Number of monitored and unmonitored sources, along with source size percentiles and estimated users per VCS
-
Secret
- Number of deactivated detectors per category, registered and unregistered feedbacks, and various metrics related to secret validity checks and incidents
-
Public API
- Number of calls for ggshield secrets scans, including different modes and repositories
- Number of active personal access tokens and service accounts
- Number of public API calls