GitLab
Collect GitLab operation data and report it to TrueWatch in the form of metrics.
Configuration¶
Collector Configuration¶
First, you need to open the data collection function of GitLab service and set the white list. See the following sections for specific operations.
After the GitLab setup is complete, configure the DataKit. Note that the data collected may vary depending on the GitLab version and configuration.
Go to the conf.d/samples directory under the DataKit installation directory, copy gitlab.conf.sample and name it gitlab.conf. Examples are as follows:
[[inputs.gitlab]]
## set true if you need to collect metric from url below
enable_collect = true
## param type: string - default: http://127.0.0.1:80/-/metrics
prometheus_url = "http://127.0.0.1:80/-/metrics"
## param type: string - optional: time units are "ms", "s", "m", "h" - default: 10s
interval = "10s"
## datakit can listen to gitlab ci data at /v1/gitlab when enabled
enable_ci_visibility = true
## Set true to enable election
election = true
## Bearer token file for authentication
bearer_token_file = ""
## HTTP headers
[inputs.gitlab.http_headers]
# X-Custom-Header = "custom-value"
## TLS configuration
# tls_ca = "/path/to/ca.pem"
# tls_cert = "/path/to/cert.pem"
# tls_key = "/path/to/key.pem"
# insecure_skip_verify = false
## extra tags for gitlab-ci data.
## these tags will not overwrite existing tags.
[inputs.gitlab.ci_extra_tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
## extra tags for gitlab metrics
[inputs.gitlab.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
Once configured, restart DataKit.
The collector can now be turned on by ConfigMap injection collector configuration.
GitLab Turns on Data Collection¶
GitLab needs to turn on the Prometheus data collection function as follows (taking English page as an example):
- Log in to your GitLab page as an administrator account
- Go to
Admin Area>Settings>Metrics and profiling - Select
Metrics - Prometheus, clickEnable Prometheus Metricsandsave change - Restart the GitLab service
See official configuration doc.
Configure Data Access Whitelist¶
It is not enough to turn on the data collection function. GitLab is very strict with data management, so it is necessary to configure the white list on the access side. The opening mode is as follows:
- Modify the GitLab configuration file
/etc/gitlab/gitlab.rb, findgitlab_rails['monitoring_whitelist'] = ['::1/128']and add the access IP of the DataKit to the array (typically the IP of the host where the DataKit resides, if the GitLab is running in a container, depending on the actual situation) - Restart the GitLab service
See official configuration doc.
Turn on GitLab CI Visualization¶
By configuring GitLab Webhook, GitLab CI visualization can be achieved. On DataKit, the default URL for receiving GitLab Webhook is http://DataKit-IP:9529/v1/gitlab.
In the left sidebar of GitLab, go to Settings ➔ Webhooks, configure the URL as the address above, check the Job events and Pipeline events options in Trigger configuration, and click Add webhook to confirm addition.
Metric¶
For all of the following data collections, the global election tags will added automatically, we can add extra tags in [inputs.gitlab.tags] if needed:
We can specify additional tags for Gitlab CI data in the configuration by [inputs.gitlab.ci_extra_tags]:
Note: To ensure that GitLab CI functions properly, the extra tags specified for GitLab CI data do not overwrite tags already in its data (see below for a list of GitLab CI tags).
gitlab¶
GitLab runtime metrics
| Tags & Fields | Description |
|---|---|
| action ( tag) |
Action |
| class ( tag) |
Database connection class |
| controller ( tag) |
Controller |
| feature_category ( tag) |
Feature category |
| host ( tag) |
Database host |
| operation ( tag) |
Cache operation type (read/write) |
| pid ( tag) |
Process ID |
| port ( tag) |
Database port |
| storage ( tag) |
Storage |
| banzai_cacheless_render_real_duration_seconds_count | The count of duration of rendering Markdown into HTML when cached output exists Type: float | (histogram) Unit: count |
| banzai_cacheless_render_real_duration_seconds_sum | The sum of duration of rendering Markdown into HTML when cached output exists Type: float | (histogram) Unit: time,s |
| cache_misses_total | The cache read miss count Type: float | (count) Unit: count |
| cache_operation_duration_seconds_count | The count of cache access time Type: float | (histogram) Unit: count |
| cache_operation_duration_seconds_sum | The sum of cache access time Type: float | (histogram) Unit: time,s |
| cache_operations_total | The count of cache access time Type: float | (count) Unit: count |
| database_connection_pool_busy | Number of busy database connections Type: float | (gauge) Unit: count |
| database_connection_pool_connections | Total number of database connections Type: float | (gauge) Unit: count |
| database_connection_pool_dead | Number of dead database connections Type: float | (gauge) Unit: count |
| database_connection_pool_idle | Number of idle database connections Type: float | (gauge) Unit: count |
| database_connection_pool_size | Size of database connection pool Type: float | (gauge) Unit: count |
| database_connection_pool_waiting | Number of waiting database connections Type: float | (gauge) Unit: count |
| rack_requests_total | The rack request count Type: float | (count) Unit: count |
| redis_client_requests_duration_seconds_count | The count of redis request latency, excluding blocking commands Type: float | (histogram) Unit: count |
| redis_client_requests_duration_seconds_sum | The sum of redis request latency, excluding blocking commands Type: float | (histogram) Unit: time,s |
| redis_client_requests_total | Number of Redis client requests Type: float | (count) Unit: count |
| sql_duration_seconds_count | The total SQL execution time, excluding SCHEMA operations and BEGIN / COMMIT Type: float | (histogram) Unit: count |
| sql_duration_seconds_sum | The sum of SQL execution time, excluding SCHEMA operations and BEGIN / COMMIT Type: float | (histogram) Unit: time,s |
| transaction_cache_read_hit_count_total | The counter for cache hits for Rails cache calls Type: float | (count) Unit: count |
| transaction_cache_read_miss_count_total | The counter for cache misses for Rails cache calls Type: float | (count) Unit: count |
| transaction_db_cached_count_total | The counter for db cache Type: float | (count) Unit: count |
| transaction_db_count_total | The counter for db Type: float | (count) Unit: count |
| transaction_duration_seconds_count | The count of duration for all transactions (gitlab_transaction_* metrics) Type: float | (histogram) Unit: count |
| transaction_duration_seconds_sum | The sum of duration for all transactions (gitlab_transaction_* metrics) Type: float | (histogram) Unit: time,s |
| transaction_new_redis_connections_total | The counter for new Redis connections Type: float | (count) Unit: count |
| transaction_rails_queue_duration_total | Total queue latency in seconds between GitLab Workhorse forwarding requests and Rails receiving them. Type: float | (count) Unit: time,s |
| transaction_view_duration_total | The duration for views Type: float | (count) Unit: time,s |
gitlab_base¶
GitLab programming language level metrics
| Tags & Fields | Description |
|---|---|
| pid ( tag) |
Process ID |
| thread_name ( tag) |
Thread name |
| uses_db_connection ( tag) |
Whether thread uses DB connection (yes/no) |
| version ( tag) |
GitLab version |
| deployments | Number of deployments Type: float | (gauge) Unit: count |
| rails_queue_duration_seconds_count | The counter for latency between GitLab Workhorse forwarding a request to Rails Type: float | (histogram) Unit: count |
| rails_queue_duration_seconds_sum | The sum for latency between GitLab Workhorse forwarding a request to Rails Type: float | (histogram) Unit: time,s |
| ruby_file_descriptors | Number of file descriptors Type: float | (gauge) Unit: count |
| ruby_gc_duration_seconds_count | The count of time spent by Ruby in GC Type: float | (histogram) Unit: count |
| ruby_gc_duration_seconds_sum | The sum of time spent by Ruby in GC Type: float | (histogram) Unit: time,s |
| ruby_process_cpu_seconds_total | Total CPU time used by Ruby process Type: float | (gauge) Unit: time,s |
| ruby_process_max_fds | Maximum file descriptors Type: float | (gauge) Unit: count |
| ruby_process_proportional_memory_bytes | Proportional memory usage in bytes Type: float | (gauge) Unit: digital,B |
| ruby_process_resident_memory_bytes | Resident memory usage in bytes Type: float | (gauge) Unit: digital,B |
| ruby_process_start_time_seconds | Process start time in seconds Type: float | (gauge) Unit: timeStamp,sec |
| ruby_process_unique_memory_bytes | Unique memory usage in bytes Type: float | (gauge) Unit: digital,B |
| ruby_sampler_duration_seconds_total | The time spent collecting stats Type: float | (count) Unit: time,s |
| ruby_threads_max_expected_threads | Maximum expected threads per Puma process Type: float | (gauge) Unit: count |
| ruby_threads_running_threads | Number of running threads Type: float | (gauge) Unit: count |
gitlab_http¶
GitLab HTTP metrics
| Tags & Fields | Description |
|---|---|
| feature_category ( tag) |
Feature category |
| method ( tag) |
HTTP method |
| status ( tag) |
HTTP status code |
| http_health_requests_total | Number of health requests Type: float | (count) Unit: count |
| http_request_duration_seconds_count | The counter for request duration Type: float | (histogram) Unit: count |
| http_request_duration_seconds_sum | The sum for request duration Type: float | (histogram) Unit: time,s |
| http_requests_total | Total HTTP requests Type: float | (count) Unit: count |
Logging¶
gitlab_pipeline¶
GitLab Pipeline event metrics
| Tags & Fields | Description |
|---|---|
| author_email ( tag) |
Author email |
| ci_status ( tag) |
CI type |
| commit_sha ( tag) |
The commit SHA of the most recent commit of the code that triggered the Pipeline |
| object_kind ( tag) |
Event type, in this case Pipeline |
| operation_name ( tag) |
Operation name |
| pipeline_name ( tag) |
Pipeline name |
| pipeline_source ( tag) |
Sources of Pipeline triggers |
| pipeline_url ( tag) |
Pipeline URL |
| ref ( tag) |
Branches involved |
| repository_url ( tag) |
Repository URL |
| resource ( tag) |
Project name |
| commit_message | Commit message for the most recent commit that triggered the pipeline. Type: string Unit: N/A |
| created_at | Millisecond timestamp of Pipeline creation Type: int Unit: timeStamp,msec |
| duration | Pipeline duration (microseconds) Type: int Unit: time,μs |
| event_raw | The raw JSON body of the webhook event Type: string Unit: N/A |
| finished_at | Millisecond timestamp of the end of the Pipeline Type: int Unit: timeStamp,msec |
| message | The message attached to the most recent commit of the code that triggered the Pipeline. Same as commit_message Type: string Unit: N/A |
| pipeline_id | GitLab pipeline identifier from the webhook event. Type: string Unit: N/A |
| queued_duration | Pipeline queued duration Type: int Unit: time,ms |
gitlab_job¶
GitLab Job Event metrics
| Tags & Fields | Description |
|---|---|
| build_commit_sha ( tag) |
The commit SHA corresponding to build |
| build_failure_reason ( tag) |
Build failure reason |
| build_name ( tag) |
Build name |
| build_repo_name ( tag) |
Repository name corresponding to build |
| build_stage ( tag) |
Build stage |
| build_status ( tag) |
Build status |
| object_kind ( tag) |
Event type, in this case Job |
| project_name ( tag) |
Project name |
| sha ( tag) |
The commit SHA corresponding to build |
| user_email ( tag) |
User email |
| build_commit_message | Commit message for the most recent commit that triggered the job build. Type: string Unit: N/A |
| build_duration | Build duration (microseconds) Type: int Unit: time,μs |
| build_finished_at | Millisecond timestamp of the end of build Type: int Unit: timeStamp,msec |
| build_id | GitLab job build identifier from the webhook event. Type: string Unit: N/A |
| build_started_at | Millisecond timestamp of the start of build Type: int Unit: timeStamp,msec |
| event_raw | The raw JSON body of the webhook event Type: string Unit: N/A |
| message | Commit message for the most recent commit that triggered the job build. Same value as build_commit_message. Type: string Unit: N/A |
| pipeline_id | GitLab pipeline identifier associated with this job build. Type: string Unit: N/A |
| project_id | GitLab project identifier associated with this job build. Type: string Unit: N/A |
| queued_duration | Job queued duration Type: int Unit: time,ms |
| runner_id | GitLab runner identifier that executed this job build. Type: string Unit: N/A |