{"id":30356632,"url":"https://github.com/helvethink/gitlab-ci-exporter","last_synced_at":"2026-02-02T16:09:16.977Z","repository":{"id":309210279,"uuid":"992572604","full_name":"Helvethink/gitlab-ci-exporter","owner":"Helvethink","description":"A golang prometheus exporter for gitlab-ci metrics","archived":false,"fork":false,"pushed_at":"2025-08-10T14:38:18.000Z","size":448,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-10T16:22:59.722Z","etag":null,"topics":["gitlab-ci","gitlab-ci-cd","gitlab-ci-pipeline","golang","prometheus-exporter","prometheus-metrics"],"latest_commit_sha":null,"homepage":"https://www.helvethink.ch","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Helvethink.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["Helvethink"]}},"created_at":"2025-05-29T11:23:26.000Z","updated_at":"2025-08-10T14:31:02.000Z","dependencies_parsed_at":"2025-08-10T16:23:08.485Z","dependency_job_id":"5ba03a79-e18f-4902-811b-8fba820808a8","html_url":"https://github.com/Helvethink/gitlab-ci-exporter","commit_stats":null,"previous_names":["helvethink/gitlab-ci-exporter"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/Helvethink/gitlab-ci-exporter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Helvethink%2Fgitlab-ci-exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Helvethink%2Fgitlab-ci-exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Helvethink%2Fgitlab-ci-exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Helvethink%2Fgitlab-ci-exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Helvethink","download_url":"https://codeload.github.com/Helvethink/gitlab-ci-exporter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Helvethink%2Fgitlab-ci-exporter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271114029,"owners_count":24701615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gitlab-ci","gitlab-ci-cd","gitlab-ci-pipeline","golang","prometheus-exporter","prometheus-metrics"],"created_at":"2025-08-19T06:39:17.489Z","updated_at":"2025-10-23T22:33:05.856Z","avatar_url":"https://github.com/Helvethink.png","language":"Go","funding_links":["https://github.com/sponsors/Helvethink"],"categories":[],"sub_categories":[],"readme":"# Gitlab-CI-Exporter\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/Helvethink/gitlab-ci-exporter)](https://pkg.go.dev/mod/github.com/Helvethink/gitlab-ci-exporter)\n[![Go Report Card](https://goreportcard.com/badge/github.com/Helvethink/gitlab-ci-exporter)](https://goreportcard.com/report/github.com/Helvethink/gitlab-ci-exporter)\n[![Docker Pulls](https://badgen.net/docker/pulls/helvethink/gitlab-ci-exporter?icon=docker\u0026label=pulls)](https://hub.docker.com/r/helvethink/gitlab-ci-exporter/)\n[![Docker Stars](https://badgen.net/docker/stars/helvethink/gitlab-ci-exporter?icon=docker\u0026label=stars)](https://hub.docker.com/r/helvethink/gitlab-ci-exporter/)\n[![test](https://github.com/Helvethink/gitlab-ci-exporter/actions/workflows/go-test.yml/badge.svg)](https://github.com/Helvethink/gitlab-ci-exporter/actions/workflows/go-test.yml)\n[![Coverage Status](https://coveralls.io/repos/github/Helvethink/gitlab-ci-exporter/badge.svg?branch=main)](https://coveralls.io/github/Helvethink/gitlab-ci-exporter?branch=main)\n[![release](https://github.com/Helvethink/gitlab-ci-exporter/actions/workflows/release.yml/badge.svg)](https://github.com/Helvethink/gitlab-ci-exporter/actions/workflows/release.yml)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://coveralls.io/github/Helvethink/gitlab-ci-exporter/blob/main/LICENSE)\n\n## Introduction\n\nThis exporter gathers various GitLab CI metrics and exposes them in a Prometheus-compatible format, enabling comprehensive monitoring of your CI pipelines.\n\n## How to\n\n### GitLab CI Exporter - Metrics\n\n#### Metrics\n\n| Metric name | Description | Labels | Configuration                                                    |\n|---|---|---|------------------------------------------------------------------|\n| `gcpe_currently_queued_tasks_count` | Number of tasks in the queue || *available by default*                                           |\n| `gcpe_environments_count` | Number of GitLab environments being exported || *available by default*                                           |\n| `gcpe_executed_tasks_count` | Number of tasks executed || *available by default*                                           |\n| `gcpe_gitlab_api_requests_count` | GitLab API requests count || *available by default*                                           |\n| `gcpe_gitlab_api_requests_remaining` | GitLab API requests remaining in the API Limit || *available by default*                                           |\n| `gcpe_gitlab_api_requests_limit` | GitLab API requests available in the API Limit || *available by default*                                           |\n| `gcpe_metrics_count` | Number of GitLab pipelines metrics being exported || *available by default*                                           |\n| `gcpe_projects_count` | Number of GitLab projects being exported || *available by default*                                           |\n| `gcpe_refs_count` | Number of GitLab refs being exported || *available by default*                                           |\n| `gcpe_runners_count` | Number of Runners being exported || *available by default*                                           |\n| `gitlab_ci_runners` | Informations about runners | [active], [instance], [is_shared], [job], [online], [project], [runner_description], [runner_groups], [runner_id], [runner_projects], [tag_list] | `project_defaults.pull.runners.enabled`                            |\n| `gitlab_ci_environment_behind_commits_count` | Number of commits the environment is behind given its last deployment | [project], [environment] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_environment_behind_duration_seconds` | Duration in seconds the environment is behind the most recent commit given its last deployment | [project], [environment] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_environment_deployment_count` |Number of deployments for an environment | [project], [environment] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_environment_deployment_duration_seconds` | Duration in seconds of the most recent deployment of the environment | [project], [environment] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_environment_deployment_job_id` | ID of the most recent deployment job for an environment | [project], [environment] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_environment_deployment_status` | Status of the most recent deployment of the environment | [project], [environment], [status] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_environment_deployment_timestamp` | Creation date of the most recent deployment of the environment | [project], [environment] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_environment_information` | Information about the environment | [project], [environment], [environment_id], [external_url], [kind], [ref], [latest_commit_short_id], [current_commit_short_id], [available], [username] | `project_defaults.pull.environments.enabled`                     |\n| `gitlab_ci_pipeline_coverage` | Coverage of the most recent pipeline | [project], [topics], [ref], [kind], [source], [variables] | *available by default*                                           |\n| `gitlab_ci_pipeline_duration_seconds` | Duration in seconds of the most recent pipeline | [project], [topics], [ref], [kind], [source], [variables] | *available by default*                                           |\n| `gitlab_ci_pipeline_id` | ID of the most recent pipeline | [project], [topics], [ref], [kind], [source], [variables] | *available by default*                                           |\n| `gitlab_ci_pipeline_job_artifact_size_bytes` | Artifact size in bytes (sum of all of them) of the most recent job | [project], [topics], [ref], [runner_description], [kind], [source], [variables], [stage], [job_name], [tag_list], [failure_reason] | `project_defaults.pull.pipeline.jobs.enabled`                    |\n| `gitlab_ci_pipeline_job_duration_seconds` | Duration in seconds of the most recent job | [project], [topics], [ref], [runner_description], [kind], [source], [variables], [stage], [job_name], [tag_list], [failure_reason] | `project_defaults.pull.pipeline.jobs.enabled`                    |\n| `gitlab_ci_pipeline_job_id` | ID of the most recent job | [project], [topics], [ref], [runner_description], [kind], [source], [variables], [stage], [job_name], [tag_list], [failure_reason] | `project_defaults.pull.pipeline.jobs.enabled`                    |\n| `gitlab_ci_pipeline_job_queued_duration_seconds` | Duration in seconds the most recent job has been queued before starting | [project], [topics], [ref], [runner_description], [kind], [source], [variables], [stage], [job_name], [tag_list], [failure_reason] | `project_defaults.pull.pipeline.jobs.enabled`                    |\n| `gitlab_ci_pipeline_job_run_count` | Number of executions of a job | [project], [topics], [ref], [runner_description], [kind], [source], [variables], [stage], [job_name], [tag_list], [failure_reason] | `project_defaults.pull.pipeline.jobs.enabled`                    |\n| `gitlab_ci_pipeline_job_status` | Status of the most recent job | [project], [topics], [ref], [runner_description], [kind], [source], [variables], [stage], [job_name], [tag_list], [status], [failure_reason] | `project_defaults.pull.pipeline.jobs.enabled`                    |\n| `gitlab_ci_pipeline_job_timestamp` | Creation date timestamp of the the most recent job | [project], [topics], [ref], [runner_description], [kind], [source], [variables], [stage], [job_name], [tag_list], [failure_reason] | `project_defaults.pull.pipeline.jobs.enabled`                    |\n| `gitlab_ci_pipeline_queued_duration_seconds` | Duration in seconds the most recent pipeline has been queued before starting | [project], [topics], [ref], [kind], [source], [variables] | *available by default*                                           |\n| `gitlab_ci_pipeline_run_count` | Number of executions of a pipeline | [project], [topics], [ref], [kind], [source], [variables] | *available by default*                                           |\n| `gitlab_ci_pipeline_status` | Status of the most recent pipeline | [project], [topics], [ref], [kind], [source], [variables], [status] | *available by default*                                           |\n| `gitlab_ci_pipeline_timestamp` | Timestamp of the last update of the most recent pipeline | [project], [topics], [ref], [kind], [source], [variables] | *available by default*                                           |\n| `gitlab_ci_pipeline_test_report_total_time` | Duration in seconds of all the tests in the most recently finished pipeline | [project], [topics], [ref], [kind], [source], [variables] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_report_total_count` | Number of total tests in the most recently finished pipeline | [project], [topics], [ref], [kind], [source], [variables] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_report_success_count` | Number of successful tests in the most recently finished pipeline | [project], [topics], [ref], [kind], [source], [variables] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_report_failed_count` | Number of failed tests in the most recently finished pipeline | [project], [topics], [ref], [kind], [source], [variables] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_report_skipped_count` | Number of skipped tests in the most recently finished pipeline | [project], [topics], [ref], [kind], [source], [variables] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_report_error_count` | Number of errored tests in the most recently finished pipeline | [project], [topics], [ref], [kind], [source], [variables] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_suite_total_time` | Duration in seconds for the test suite | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_suite_total_count` | Number of total tests for the test suite | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_suite_success_count` | Number of successful tests for the test suite | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_suite_failed_count` | Number of failed tests for the test suite | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_suite_skipped_count` | Number of skipped tests for the test suite | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_suite_error_count` | Duration in errored tests for the test suite | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name] | `project_defaults.pull.pipeline.test_reports.enabled`            |\n| `gitlab_ci_pipeline_test_case_execution_time` | Duration in seconds for the test case | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name], [test_case_name], [test_case_classname] | `project_defaults.pull.pipeline.test_reports.test_cases.enabled` |\n| `gitlab_ci_pipeline_test_case_status` | Status of the most recent test case | [project], [topics], [ref], [kind], [source], [variables], [test_suite_name], [test_case_name], [test_case_classname], [status] | `project_defaults.pull.pipeline.test_reports.test_cases.enabled` |\n\n### Labels\n\n#### Project\n\nPath with namespace of the project\n\n#### Topics\n\nTopics configured on the project\n\n#### Ref Name\n\nName of the ref (branch, tag or merge request) used by the pipeline\n\n#### Runner Description\n\nDescription of the runner on which the most recent job ran\n\n#### Ref Kind\n\nType of the ref used by the pipeline. Can be either **branch**, **tag** or **merge_request**\n\n#### Source\n\nThe reason the pipeline exists.\n\n#### Variables\n\nUser defined variables for the pipelines.\nThose are not fetched by default, you need to set `project_defaults.pull.pipeline.variables.enabled` to **true**\n\n#### Test Suite Name\n\nName of the test suite.\nThis is not fetched by default, you need to set `project_default.pull.pipeline.test_reports.enabled` to **true**\n\n#### Test Case Name\n\nName of the test case.\nThis is not fetched by default, you need to set `project_default.pull.pipeline.test_reports.test_cases.enabled` to **true**\n\n#### Test Case ClassName\n\nName of the test case classname.\nThis is not fetched by default, you need to set `project_default.pull.pipeline.test_reports.test_cases.enabled` to **true**\n\n#### Environment\n\nName of the environment\n\n#### Available\n\nWhether the environment is available or not\n\n#### External URL\n\nExternal URL of the environment\n\n#### Latest commit short ID\n\nMost recent commit short ID on the ref which was last used to deploy to the environment\n\n#### Current commit short ID\n\nCurrently deployed commit short ID on the environment\n\n#### Username\n\nGitLab username of the person which triggered the most recent deployment of the environment\n\n#### Status\n\nStatus of the pipeline, deployment or test case\n\n#### Stage\n\nStage of the job\n\n#### Job name\n\nName of the job\n\n#### Tag list\n\nTag list of the job\n\n#### Environment ID\n\nID of the environment\n\n#### Sparse status metrics\n\nIf the amount of status metrics generated by fetching jobs becomes a problem, you can enable `output_sparse_status_metrics` on a global, per-project or per-wildcard basis. When enabled, only labels matching the previous pipeline or job status will be submitted (with value `1`) rather than all label combinations submitted but with `0` value where the status does not match the previous run, for example:\n\n```bash\n# output_sparse_status_metrics: false\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"canceled\",topics=\"\"} 0\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"failed\",topics=\"\"} 0\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"manual\",topics=\"\"} 0\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"pending\",topics=\"\"} 0\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"running\",topics=\"\"} 0\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"skipped\",topics=\"\"} 0\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"success\",topics=\"\"} 1\n\n# output_sparse_status_metrics: true\ngitlab_ci_pipeline_last_job_run_status{job=\"test\",project=\"bar/project\",ref=\"main\",stage=\"test\",status=\"success\",topics=\"\"} 1\n```\n\nThis flag affect every `_status$` metrics:\n\n- `gitlab_ci_pipeline_environment_deployment_status`\n- `gitlab_ci_pipeline_job_status`\n- `gitlab_ci_pipeline_status`\n- `gitlab_ci_pipeline_test_case_status`\n\n[available]: #available\n[current_commit_short_id]: #current-commit-short-id\n[environment]: #environment\n[environment_id]: #environment-id\n[external_url]: #external-url\n[job_name]: #job-name\n[tag_list]: #tag-list\n[kind]: #ref-kind\n[latest_commit_short_id]: #latest-commit-short-id\n[project]: #project\n[ref]: #ref-name\n[runner_description]: #runner-description\n[stage]: #stage\n[status]: #status\n[topics]: #topics\n[username]: #username\n[source]: #source\n[variables]: #variables\n[test_suite_name]: #test-suite-name\n[test_case_name]: #test-case-name\n[test_case_classname]: #test-case-classname\n\n\n### Configuration Syntax\n\n```yaml \n# Log configuration\nlog:\n  # Set the logging level\n  # allowed values: trace, debug, info, warning, error, fatal or panic\n  # (optional, default: info)\n  level: info\n\n  # Set the logging format\n  # allowed values: text or json\n  # (optional, default: text)\n  format: text\n\n# OpenTelemetry configuration (currently supports tracing only)\nopentelemetry:\n  # Configure the OpenTelemetry collector gRPC endpoint in order to enable tracing\n  # (optional, default: \"\")\n  grpc_endpoint:\n\n# Exporter HTTP servers configuration\nserver:\n  # [address:port] to make the process listen\n  # upon (optional, default: :8080)\n  listen_address: :8080\n  \n  # Enable profiling pages\n  # at /debug/pprof (optional, default: false)\n  enable_pprof: false\n  \n  metrics:\n    # Enable /metrics endpoint (optional, default: true)\n    enabled: true\n  \n    # Enable OpenMetrics content encoding in\n    # prometheus HTTP handler (optional, default: false)\n    # see: https://godoc.org/github.com/prometheus/client_golang/prometheus/promhttp#HandlerOpts\n    enable_openmetrics_encoding: true\n\n  webhook:\n    # Enable /webhook endpoint to\n    # support GitLab requests (optional, default: false)\n    enabled: false\n\n    # Secret token to authenticate legitimate webhook\n    # requests coming from the GitLab server\n    # (required if enabled but can also be configured using\n    # the --webhook-secret-token flag or $GCPE_WEBHOOK_SECRET_TOKEN\n    # environment variable)\n    secret_token: 063f51ec-09a4-11eb-adc1-0242ac120002\n\n# Redis configuration, optional and solely useful for an HA setup.\n# By default the data is held in memory of the exporter\nredis:\n  # URL used to connect onto the redis endpoint\n  # format: redis[s]://[:password@]host[:port][/db-number][?option=value])\n  # (required to use the feature but can also be configured using\n  # the --redis-url flag or $GCPE_REDIS_URL\n  # environment variable)\n  url: redis://foo:bar@redis.example.net:6379\n\n# URL and Token with sufficient permissions to access\n# your GitLab's projects pipelines informations (optional)\ngitlab:\n  # URL of your GitLab instance (optional, default: https://gitlab.com)\n  url: https://gitlab.com\n\n  # Token to use to authenticate against the GitLab API\n  # it requires api and read_repository permissions\n  # (required but can also be configured using the --gitlab-token\n  # flag or the $GCPE_GITLAB_TOKEN environment variable)\n  token: xrN14n9-ywvAFxxxxxx\n\n  # Alternative URL for determining health of\n  # GitLab API for the readiness probe (optional, default: https://gitlab.com)\n  # it can also be defined using the --gitlab-health-url flag or $GCPE_GITLAB_HEALTH_URL\n  # environment variable\n  health_url: https://gitlab.example.com/-/health\n  \n  # Enable verification of readiness for target\n  # GitLab instance calling `health_url` (optional, default: true)\n  enable_health_check: true\n\n  # Enable TLS validation for target\n  # GitLab instance (handy when self-hosting) (optional, default: true)\n  enable_tls_verify: true\n\n  # Maximum limit for the GitLab API requests/sec\n  # (optional, default: 1)\n  maximum_requests_per_second: 1\n\n  # Rate limit for the GitLab API requests/sec\n  # (optional, default: 5)\n  burstable_requests_per_second: 5\n\n  # Maximum amount of jobs to keep queue, if this limit is reached\n  # newly created ones will get dropped. As a best practice you should not change this value.\n  # Workarounds to avoid hitting the limit are:\n  # - increase polling intervals\n  # - increase API rate limit\n  # - reduce the amount of projects, refs, environments or metrics you are looking into\n  # - leverage webhooks instead of polling schedules\n  #\n  # (optional, default: 1000)\n  maximum_jobs_queue_size: 1000\n\npull:\n  projects_from_wildcards:\n    # Whether to trigger a discovery or not when the\n    # exporter starts (optional, default: true)\n    on_init: true\n\n    # Whether to attempt retrieving new projects from wildcards\n    # on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to discover projects\n    # from wildcards (optional, default: 1800)\n    interval_seconds: 1800\n\n  environments_from_projects:\n    # Whether to trigger a discovery of project environments when\n    # exporter starts (optional, default: true)\n    on_init: true\n\n    # Whether to attempt retrieving project environments\n    # on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to discover project environments\n    # (optional, default: 300)\n    interval_seconds: 300\n\n  refs_from_projects:\n    # Whether to trigger a discovery of project refs from\n    # branches, tags and merge requests when the\n    # exporter starts (optional, default: true)\n    # nb: merge requests refs discovery needs to be\n    # additionally enabled on a per project basis\n    on_init: true\n\n    # Whether to attempt retrieving project refs from branches,\n    # tags \u0026 merge requests on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to discover refs\n    # from projects branches and tags (optional, default: 300)\n    interval_seconds: 300\n\n  metrics:\n    # Whether or not to trigger a pull of the metrics when the\n    # exporter starts (optional, default: true)\n    on_init: true\n\n    # Whether or not to attempt refreshing the metrics\n    # on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to pull metrics from\n    # discovered project refs (optional, default: 30)\n    interval_seconds: 30\n\ngarbage_collect:\n  projects:\n    # Whether or not to trigger a garbage collection of the\n    # projects when the exporter starts (optional, default: false)\n    on_init: false\n\n    # Whether or not to attempt garbage collecting the projects\n    # on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to garbage collect projects\n    # (optional, default: 14400)\n    interval_seconds: 14400\n\n  environments:\n    # Whether or not to trigger a garbage collection of the\n    # environments when the exporter starts (optional, default: false)\n    on_init: false\n\n    # Whether or not to attempt garbage collecting the environments\n    # on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to garbage collect environments\n    # (optional, default: 14400)\n    interval_seconds: 14400\n\n  refs:\n    # Whether or not to trigger a garbage collection of the\n    # projects refs when the exporter starts (optional, default: false)\n    on_init: false\n\n    # Whether or not to attempt garbage collecting the projects refs\n    # on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to garbage collect projects refs\n    # from projects branches and tags (optional, default: 1800)\n    interval_seconds: 1800\n\n  metrics:\n    # Whether or not to trigger a garbage collection of the\n    # metrics when the exporter starts (optional, default: false)\n    on_init: false\n\n    # Whether or not to attempt garbage collecting the metrics\n    # on a regular basis (optional, default: true)\n    scheduled: true\n\n    # Interval in seconds to garbage collect metrics\n    # (optional, default: 600)\n    interval_seconds: 600\n\n# Default settings which can be overridden at the project\n# or wildcard level (optional)\nproject_defaults:\n  # Whether to output sparse job and pipeline status metrics.\n  # When enabled, only the status label matching the last run\n  # of a pipeline or job will be submitted (optional, default: true)\n  output_sparse_status_metrics: true\n\n  pull:\n    environments:\n      # Whether or not to pull project environments \u0026 their deployments\n      # (optional, default: false)\n      enabled: false\n\n      # Filter out by name environments to include\n      # (optional, default: \".*\")\n      regexp: \".*\"\n\n      # Do not export metrics for stopped environments\n      # (optional, default: true)\n      exclude_stopped: true\n\n    refs:\n      branches:\n        # Monitor pipelines related to project branches \n        # (optional, default: true)\n        enabled: true\n\n        # Filter for branches to include\n        # (optional, default: \"^(?:main|master)$\" -- main/master branches)\n        regexp: \"^(?:main|master)$\"\n        \n        # Only keep most 'n' recently updated branches\n        # (optional, default: 0 -- disabled/keep every branch matching the regexp)\"\n        most_recent: 0\n\n        # If the age of the most recently updated pipeline for the branch is greater than\n        # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n        max_age_seconds: 0\n\n        # If set to false, it will continue to export metrics for the branch even\n        # if it has been deleted (optional, default: true)\n        exclude_deleted: true\n\n      tags:\n        # Monitor pipelines related to project tags\n        # (optional, default: true)\n        enabled: true\n\n        # Filter for tags to include\n        # (optional, default: \".*\" -- all tags)\n        regexp: \".*\"\n\n        # Only keep most 'n' recently updated tags\n        # (optional, default: 0 -- disabled/keep every tag matching the regexp)\"\n        most_recent: 0\n\n        # If the age of the most recently updated pipeline for the tag is greater than\n        # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n        max_age_seconds: 0\n\n        # If set to false, it will continue to export metrics for the tag even\n        # if it has been deleted (optional, default: true)\n        exclude_deleted: true\n\n      merge_requests:\n        # Monitor pipelines related to project merge requests\n        # (optional, default: false)\n        enabled: false\n\n        # Only keep most 'n' recently updated merge requests\n        # (optional, default: 0 -- disabled/keep every merge request)\n        most_recent: 0\n\n        # If the age of the most recently updated pipeline for the merge request is greater than\n        # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n        max_age_seconds: 0\n\n    pipeline:\n      jobs:\n        # Whether to attempt retrieving job level metrics from pipelines.\n        # Increases the number of outputed metrics significantly!\n        # (optional, default: false)\n        enabled: false\n\n        from_child_pipelines:\n          # Collect jobs from subsequent child/downstream pipelines\n          # (optional, default: true)\n          enabled: true\n        \n        runner_description:\n          # Export the description of the runner which ran the job\n          # (optional, default: true)\n          enabled: true\n\n          # Whenever the description of a runner will match this regexp\n          # The regexp will be used as the value of the runner description instead\n          # (optional, default: \"shared-runners-manager-(\\d*)\\.gitlab\\.com\")\n          aggregation_regexp: shared-runners-manager-(\\d*)\\.gitlab\\.com\n\n      variables:\n        # Fetch pipeline variables in a separate metric (optional, default: false)\n        enabled: false\n\n        # Filter pipelines variables to include\n        # (optional, default: \".*\", all variables)\n        regexp: \".*\"\n      \n      test_reports:\n        # Fetch test reports in a separate metric (optiona, default: false)\n        enabled: false\n\n        test_cases:\n        # Fetch test cases reports in a separate metric (optional, default: false)\n          enabled: false\n\n# The list of the projects you want to monitor (optional)\nprojects:\n  - # Name of the project (actually path with namespace) to fetch\n    # (required)\n    name: foo/bar\n\n    # Here are all the project parameters which can be overriden (optional)\n    pull:\n      environments:\n        # Whether or not to pull project environments \u0026 their deployments\n        # (optional, default: false)\n        enabled: false\n\n        # Filter out by name environments to include\n        # (optional, default: \".*\")\n        regexp: \".*\"\n\n        # Do not export metrics for stopped environments\n        # (optional, default: true)\n        exclude_stopped: true\n\n      refs:\n        branches:\n          # Monitor pipelines related to project branches \n          # (optional, default: true)\n          enabled: true\n\n          # Filter for branches to include\n          # (optional, default: \"^(?:main|master)$\" -- main/master branches)\n          regexp: \"^(?:main|master)$\"\n          \n          # Only keep most 'n' recently updated branches\n          # (optional, default: 0 -- disabled/keep every branch matching the regexp)\"\n          most_recent: 0\n\n          # If the age of the most recently updated pipeline for the branch is greater than\n          # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n          max_age_seconds: 0\n\n          # If set to false, it will continue to export metrics for the branch even\n          # if it has been deleted (optional, default: true)\n          exclude_deleted: true\n\n        tags:\n          # Monitor pipelines related to project tags\n          # (optional, default: true)\n          enabled: true\n\n          # Filter for tags to include\n          # (optional, default: \".*\" -- all tags)\n          regexp: \".*\"\n\n          # Only keep most 'n' recently updated tags\n          # (optional, default: 0 -- disabled/keep every tag matching the regexp)\"\n          most_recent: 0\n\n          # If the age of the most recently updated pipeline for the tag is greater than\n          # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n          max_age_seconds: 0\n\n          # If set to false, it will continue to export metrics for the tag even\n          # if it has been deleted (optional, default: true)\n          exclude_deleted: true\n\n        merge_requests:\n          # Monitor pipelines related to project merge requests\n          # (optional, default: false)\n          enabled: false\n\n          # Only keep most 'n' recently updated merge requests\n          # (optional, default: 0 -- disabled/keep every merge request)\n          most_recent: 0\n\n          # If the age of the most recently updated pipeline for the merge request is greater than\n          # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n          max_age_seconds: 0\n\n      pipeline:\n        jobs:\n          # Whether to attempt retrieving job level metrics from pipelines.\n          # Increases the number of outputed metrics significantly!\n          # (optional, default: false)\n          enabled: false\n\n          from_child_pipelines:\n            # Collect jobs from subsequent child/downstream pipelines\n            # (optional, default: true)\n            enabled: true\n\n          runner_description:\n            # Export the description of the runner which ran the job\n            # (optional, default: true)\n            enabled: true\n\n            # Whenever the description of a runner will match this regexp\n            # The regexp will be used as the value of the runner description instead\n            # (optional, default: \"shared-runners-manager-(\\d*)\\.gitlab\\.com\")\n            aggregation_regexp: shared-runners-manager-(\\d*)\\.gitlab\\.com\n\n        variables:\n          # Fetch pipeline variables in a separate metric (optional, default: false)\n          enabled: false\n\n          # Filter pipelines variables to include\n          # (optional, default: \".*\", all variables)\n          regexp: \".*\"\n          \n        test_reports:\n          # Fetch test reports in a separate metric (optiona, default: false)\n          enabled: false\n\n          test_cases:\n          # Fetch test cases reports in a separate metric (optional, default: false)\n            enabled: false\n        \n        # How many per ref pipelines values (default 1)\n        PerRef: 1\n\n# Dynamically fetch projects to monitor using a wildcard (optional)\nwildcards:\n  - # Define the owner of the projects we want to look for (optional)\n    owner:\n      # Name of the owner (required)\n      name: foo\n\n      # Owner kind: can be either 'group' or 'user' (required)\n      kind: group\n\n      # if owner kind is 'group', whether to include subgroups\n      # or not (optional, default: false)\n      include_subgroups: false\n\n    # Search expression to filter out projects\n    # (optional, default: '' -- no filter/all projects)\n    search: ''\n\n    # Including archived projects or not\n    # (optional, default: false)\n    archived: false\n\n    # Here are all the project parameters which can be overriden (optional)\n    pull:\n      environments:\n        # Whether or not to pull project environments \u0026 their deployments\n        # (optional, default: false)\n        enabled: false\n\n        # Filter out by name environments to include\n        # (optional, default: \".*\")\n        regexp: \".*\"\n\n        # Do not export metrics for stopped environments\n        # (optional, default: true)\n        exclude_stopped: true\n\n      refs:\n        branches:\n          # Monitor pipelines related to project branches \n          # (optional, default: true)\n          enabled: true\n\n          # Filter for branches to include\n          # (optional, default: \"^(?:main|master)$\" -- main/master branches)\n          regexp: \"^(?:main|master)$\"\n          \n          # Only keep most 'n' recently updated branches\n          # (optional, default: 0 -- disabled/keep every branch matching the regexp)\"\n          most_recent: 0\n\n          # If the age of the most recently updated pipeline for the branch is greater than\n          # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n          max_age_seconds: 0\n\n          # If set to false, it will continue to export metrics for the branch even\n          # if it has been deleted (optional, default: true)\n          exclude_deleted: true\n\n        tags:\n          # Monitor pipelines related to project tags\n          # (optional, default: true)\n          enabled: true\n\n          # Filter for tags to include\n          # (optional, default: \".*\" -- all tags)\n          regexp: \".*\"\n\n          # Only keep most 'n' recently updated tags\n          # (optional, default: 0 -- disabled/keep every tag matching the regexp)\"\n          most_recent: 0\n\n          # If the age of the most recently updated pipeline for the tag is greater than\n          # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n          max_age_seconds: 0\n\n          # If set to false, it will continue to export metrics for the tag even\n          # if it has been deleted (optional, default: true)\n          exclude_deleted: true\n\n        merge_requests:\n          # Monitor pipelines related to project merge requests\n          # (optional, default: false)\n          enabled: false\n\n          # Only keep most 'n' recently updated merge requests\n          # (optional, default: 0 -- disabled/keep every merge request)\n          most_recent: 0\n\n          # If the age of the most recently updated pipeline for the merge request is greater than\n          # this value, the pipeline metrics won't get exported (optional, default: 0 (disabled))\n          max_age_seconds: 0\n\n      pipeline:\n        jobs:\n          # Whether to attempt retrieving job level metrics from pipelines.\n          # Increases the number of outputed metrics significantly!\n          # (optional, default: false)\n          enabled: false\n\n          from_child_pipelines:\n            # Collect jobs from subsequent child/downstream pipelines\n            # (optional, default: true)\n            enabled: true\n\n          runner_description:\n            # Export the description of the runner which ran the job\n            # (optional, default: true)\n            enabled: true\n\n            # Whenever the description of a runner will match this regexp\n            # The regexp will be used as the value of the runner description instead\n            # (optional, default: \"shared-runners-manager-(\\d*)\\.gitlab\\.com\")\n            aggregation_regexp: shared-runners-manager-(\\d*)\\.gitlab\\.com\n\n        variables:\n          # Fetch pipeline variables in a separate metric (optional, default: false)\n          enabled: false\n\n          # Filter pipelines variables to include\n          # (optional, default: \".*\", all variables)\n          regexp: \".*\"\n          \n        test_reports:\n          # Fetch test reports in a separate metric (optiona, default: false)\n          enabled: false\n          \n          from_child_pipelines:\n            # Combines test reports from subsequent child/downstream pipelines\n            # (optional, default: false)\n            enabled: false\n\n          test_cases:\n          # Fetch test cases reports in a separate metric (optional, default: false)\n            enabled: false\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelvethink%2Fgitlab-ci-exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhelvethink%2Fgitlab-ci-exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelvethink%2Fgitlab-ci-exporter/lists"}