Skip to main content

Applicative metrics

Export Application Metrics to Prometheus

Applicative metrics are gathered thanks to Prometheus, a software used for event monitoring and alerting, which permits scraping the data captured in the application.

info

The Prometheus exporter is not supported for embedded clusters.

Metrics available

The Prometheus exporter gives access to the following metrics, grouped by area.

Users and incidents

MetricTypeDescriptionDimensions
gim_active_users_totalGaugeAll users in the instanceNone
gim_issues_totalGaugeAll incidentsSeverity, Status
gim_occurrences_totalGaugeAll occurrencesHidden, Status

Scanning activity

MetricTypeDescriptionDimensions
gim_commits_totalGaugeCommits processedAccount, Scan type
gim_repo_scan_active_statuses_totalGaugeCount of historical scansscan_feature, status
gim_check_runs_createdCounterGitHub check runs createdplan, account_id
gim_check_runs_timed_outCounterGitHub check runs that timed outplan, account_id
gim_check_runs_runtime_bucketHistogramGitHub check run durationstatus
gim_check_runs_error_codesCounterGitHub check run errors by codeerror_code

Infrastructure

MetricTypeDescriptionDimensions
gim_postgres_used_disk_bytesGaugeDisk space used by PostgreSQLNone
gim_redis_used_memory_bytesGaugeMemory used by RedisNone
gim_redis_available_memory_bytesGaugeMemory available for RedisNone

Celery workers and queues

MetricTypeDescriptionDimensions
gim_celery_queue_lengthGaugeTasks waiting in queuequeue_name
gim_celery_active_consumer_countGaugeActive consumers in broker queuequeue_name
gim_celery_worker_tasks_activeGaugeTasks currently being processedNone
gim_celery_task_sent_totalCounterTasks sent to a queuename, queue_name, team
gim_celery_task_started_totalCounterTasks started by a workername, queue_name, team
gim_celery_task_succeeded_totalCounterTasks completed successfullyname, queue_name, team
gim_celery_task_failed_totalCounterTasks that failedname, exception, queue_name, team
gim_celery_task_retried_totalCounterTasks retriedname, queue_name, team
gim_celery_task_queue_time_bucketHistogramTime spent waiting in queuename, queue_name, team
gim_celery_task_runtime_bucketHistogramTask execution durationname, queue_name, team

HTTP requests

MetricTypeDescriptionDimensions
gim_http_request_started_totalCounterHTTP requests initiatedapi, method, view_name
gim_http_request_success_totalCounterSuccessful HTTP requestsapi, method, view_name
gim_http_request_failure_totalCounterFailed HTTP requestsapi, method, status_code, view_name
gim_http_request_exception_totalCounterHTTP requests that raised an exceptionapi, method, view_name, exception
gim_http_request_view_duration_secondsHistogramHTTP request duration per viewapi, method, view_name

Health checks

MetricTypeDescriptionDimensions
gim_health_check_result_countGaugeHealth check resultsservice_name, status
gim_outdated_health_check_countGaugeHealth checks older than the periodic rangeservice_name
gim_health_check_skipped_totalCounterHealth checks skippedreason, service_name
gim_health_check_duration_metricHistogramHealth check execution durationservice_name

Periodic tasks

MetricTypeDescriptionDimensions
gim_periodic_task_period_secondsGaugeExpected periodicity of a tasktask_name, queue_name
gim_periodic_task_not_run_for_secondsGaugeTime since a task was last runtask_name, queue_name

Public API

MetricTypeDescriptionDimensions
gim_public_api_quota_totalGaugeMaximum allowed API usageAccount
gim_public_api_usage_totalGaugeCurrent API usageAccount
gim_public_api_token_totalGaugeActive API tokensAccount, Type
System health
MetricWhat to watch for
gim_celery_queue_lengthQueue backlog growing over time is the first sign of system saturation.
gim_celery_active_consumer_countDrop in workers signals availability issues.
gim_postgres_used_disk_bytesMonitor disk pressure before it becomes critical.
gim_redis_used_memory_bytes / gim_redis_available_memory_bytesHigh ratio indicates cache memory pressure.
gim_periodic_task_not_run_for_secondsCompare against gim_periodic_task_period_seconds to detect stalled tasks.
API and integrations
MetricWhat to watch for
gim_http_request_failure_totalFilter by status_code to spot error rate spikes (especially 5xx).
gim_http_request_view_duration_secondsTrack API latency (P95/P99) to detect slowdowns.
gim_health_check_result_countFilter by status=not_ok to detect broken integrations.
Example PromQL queries
# 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
Example alerting rules

Below are starter Prometheus alerting rules you can adapt to your environment:

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
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:

  1. Add your Prometheus server as a Grafana data source.
  2. Create panels using the PromQL queries above.
  3. Organize panels into rows: System health (queues, Redis, Postgres, periodic tasks) and API & Integrations (error rates, health checks).

Enable or disable Application metrics

Applicative metrics are deactivated by default. Two steps are needed to activate Application Metrics:

  • authorize collection of metrics by the application
  • activate Prometheus export

Authorize metrics collection

To authorize the metrics collection, you should go to the Preferences section in the Admin Area, check the prometheus_metrics_active feature flag and save settings.

Activate Applicative Metrics

To disable it, you should uncheck this parameter and save settings.

Install Prometheus Operator

Metrics are collected by Prometheus using the Prometheus Operator.

For Existing Clusters, you should manually install it (installation documentation).

Activate Prometheus export using KOTS

To create exporter resources and allow automatic discovery, you should go in the KOTS Admin Console and check the Activate Prometheus Exporter checkbox in the Prometheus section of the configuration section.

Activate Applicative Metrics

Then save the configuration, and Deploy the application to apply the new configuration.

To disable it, you should uncheck this parameter, save configuration, and apply it through a new deployment.

Activate Prometheus export using Helm

Applicative metrics exporter can be enabled by setting observability.exporters.webAppExporter.enabled=true in values file.

observability:
exporters:
webAppExporter:
enabled: true

Please note that Helm application also features a Celery Exporter allowing to monitor several Celery metrics like "count of active tasks by queue". The full list of metrics is available here.

You can activate Celery Exporter in your values file:

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

If you use Prometheus Operator, you may want to use the Service Monitor provided for automatic discovery of the exporter by Prometheus:

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

Otherwise, you can manually scrape exporters.

  • Applicative metrics can be scrapped from the app-exporter service at: http://app-exporter:9808/metrics
  • Celery metrics can be scrapped from the celery-exporter service at: http://celery-exporter:9808/metrics

How to collect metrics

On Existing Clusters, Prometheus must be installed and configured manually. If the Kube-Prometheus Operator is used, all the applicative metrics will be automatically listed thanks to the Discovery service of Kube-Prometheus Operator.

Otherwise, a manual configuration may be needed. Applicative metrics discovery is possible through the app-monitoring headless service. This service exposes an exporter pod serving metrics at http://exporter-xxxxx-xxxxx:9808/metrics

Usage data

GitGuardian collects usage data to improve the user experience and support. It can be easily deactivated by adjusting the custom_telemetry_active setting found in the preferences section in the Admin area.

info

Why keep usage data enable?

  • Continuous Product Improvement: usage data greatly helps us understand how our application is used in various environments. This allows us to specifically target areas needing improvements and direct our testing efforts. This ensures that our product evolves to meet our users' needs effectively while contributing to better quality and stability.

  • Targeted and Efficient Support: in case of technical problems, usage data enables GitGuardian to identify and resolve issues much more quickly. This means reduced downtime for you and a better overall user experience.

  • Security and Privacy: we want to reassure you that data privacy and security are our top priority. We do not collect any personal or sensitive data. Our goal is solely to improve user experience and the performance of our product.

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.
  • 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