极狐 GitLab

日志系统

Tier: 基础版,专业版,旗舰版

Offering: 私有化部署

极狐GitLab 中的日志系统为分析您的极狐GitLab 实例提供了全面的日志记录和监控功能。 您可以使用日志来识别系统问题、调查安全事件和分析应用程序性能。 每个操作都有对应的日志条目,因此当问题发生时,这些日志提供了快速诊断和解决问题所需的数据。

日志系统:

  • 在结构化的日志文件中跟踪极狐GitLab 各组件中的所有应用程序活动。
  • 以标准化格式记录性能指标、错误和安全事件。
  • 通过 JSON 日志记录与 Elasticsearch 和 Splunk 等日志分析工具集成。
  • 为不同的极狐GitLab 服务和组件维护单独的日志文件。
  • 包含关联 ID,用于在整个系统中跟踪请求。

系统日志文件通常是标准日志文件格式的纯文本。

日志系统类似于审计事件。 更多信息,另请参阅:

日志级别#

每条日志消息都有一个指定的日志级别,表示其重要性和详细程度。 每个记录器都有一个指定的最低日志级别。 记录器仅在其日志级别等于或高于最低日志级别时才发出日志消息。

支持以下日志级别:

级别名称
0DEBUG
1INFO
2WARN
3ERROR
4FATAL
5UNKNOWN

极狐GitLab 记录器会发出所有日志消息,因为它们默认设置为 DEBUG

覆盖默认日志级别#

您可以使用 GITLAB_LOG_LEVEL 环境变量覆盖极狐GitLab 记录器的最低日志级别。 有效值是 05 之间的值,或日志级别的名称。

示例:

shell
GITLAB_LOG_LEVEL=info

对于某些服务,存在不受此设置影响的其他日志级别。 其中一些服务有自己的环境变量来覆盖日志级别。例如:

服务日志级别环境变量
GitLab CleanupINFODEBUG
GitLab DoctorINFOVERBOSE
GitLab ExportINFOEXPORT_DEBUG
GitLab ImportINFOIMPORT_DEBUG
GitLab QA RuntimeINFOQA_LOG_LEVEL
GitLab Product Usage DataINFO
Google APIsINFO
Rack TimeoutERROR
Snowplow TrackerFATAL
gRPC Client (Gitaly)WARNGRPC_LOG_LEVEL
LLMINFOLLM_DEBUG

日志轮转#

给定服务的日志可能由以下方式管理和轮转:

  • logrotate
  • svlogd (runit 的服务日志守护进程)
  • logrotatesvlogd
  • 或者根本不轮转

下表包含有关哪个守护进程负责管理和轮转所包含服务的日志的信息:

  • svlogd 管理的日志 写入名为 current 的文件。 其归档版本被压缩为 @<hexadecimal-ID>.s 文件。
  • 极狐GitLab 内置的 logrotate 服务 管理所有其他日志。 其归档版本被压缩为 <original-name>.<number>.gz 文件。

有关生成这些日志的服务的更多信息,请参阅 极狐GitLab 架构概述

访问 Helm chart 安装的日志#

在 Helm chart 安装中,极狐GitLab 组件将日志发送到 stdout,可以使用 kubectl logs 访问。 在 Pod 的生命周期内,日志也可在 Pod 的 /var/log/gitlab 路径下获取。

具有结构化日志的 Pod(子组件过滤)#

某些 Pod 包含一个 subcomponent 字段,用于标识特定的日志类型:

shell
# Webservice pod logs (Rails application) kubectl logs -l app=webservice -c webservice | jq 'select(."subcomponent"=="<subcomponent-key>")' # Sidekiq pod logs (background jobs) kubectl logs -l app=sidekiq | jq 'select(."subcomponent"=="<subcomponent-key>")'

以下日志部分在适用时指示适当的 Pod 和子组件键。

其他 Pod#

对于不使用带子组件的结构化日志的其他极狐GitLab 组件,您可以直接访问日志。

要查找可用的 Pod 选择器:

shell
1# List all unique app labels in use 2kubectl get pods -o jsonpath='{range .items[*]}{.metadata.labels.app}{"\n"}{end}' | grep -v '^$' | sort | uniq 3 4# For pods with app labels 5kubectl logs -l app=<pod-selector> 6 7# For specific pods (when app labels aren't available) 8kubectl get pods 9kubectl logs <pod-name>

有关更多 Kubernetes 故障排查命令,请参阅 Kubernetes 速查表

production_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/production_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/production_json.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="production_json" 键下。

它包含来自极狐GitLab 的 Rails 控制器请求的结构化日志,这得益于 Lograge。 来自 API 的请求记录在 api_json.log 的单独文件中。

每行包含可由 Elasticsearch 和 Splunk 等服务接收的 JSON。 为便于阅读,示例中添加了换行符:

json
1{ 2 "method":"GET", 3 "path":"/gitlab/gitlab-foss/issues/1234", 4 "format":"html", 5 "controller":"Projects::IssuesController", 6 "action":"show", 7 "status":200, 8 "time":"2017-08-08T20:15:54.821Z", 9 "params":[{"key":"param_key","value":"param_value"}], 10 "remote_ip":"18.245.0.1", 11 "user_id":1, 12 "username":"admin", 13 "queue_duration_s":0.0, 14 "gitaly_calls":16, 15 "gitaly_duration_s":0.16, 16 "redis_calls":115, 17 "redis_duration_s":0.13, 18 "redis_read_bytes":1507378, 19 "redis_write_bytes":2920, 20 "correlation_id":"O1SdybnnIq7", 21 "cpu_s":17.50, 22 "db_duration_s":0.08, 23 "view_duration_s":2.39, 24 "duration_s":20.54, 25 "pid": 81836, 26 "worker_id":"puma_0" 27}

此示例是针对特定议题的 GET 请求。 每行还包含性能数据,时间以秒为单位:

  • duration_s:检索请求的总时间
  • queue_duration_s:请求在 GitLab Workhorse 内部排队的总时间
  • view_duration_s:在 Rails 视图中花费的总时间
  • db_duration_s:从 PostgreSQL 检索数据的总时间
  • cpu_s:在 CPU 上花费的总时间
  • gitaly_duration_s:Gitaly 调用的总时间
  • gitaly_calls:对 Gitaly 发出的调用总数
  • redis_calls:对 Redis 发出的调用总数
  • redis_cross_slot_calls:对 Redis 发出的跨槽调用总数
  • redis_allowed_cross_slot_calls:对 Redis 发出的允许的跨槽调用总数
  • redis_duration_s:从 Redis 检索数据的总时间
  • redis_read_bytes:从 Redis 读取的总字节数
  • redis_write_bytes:写入 Redis 的总字节数
  • redis_<instance>_calls:对 Redis 实例发出的调用总数
  • redis_<instance>_cross_slot_calls:对 Redis 实例发出的跨槽调用总数
  • redis_<instance>_allowed_cross_slot_calls:对 Redis 实例发出的允许的跨槽调用总数
  • redis_<instance>_duration_s:从 Redis 实例检索数据的总时间
  • redis_<instance>_read_bytes:从 Redis 实例读取的总字节数
  • redis_<instance>_write_bytes:写入 Redis 实例的总字节数
  • pid:工作进程的 Linux 进程 ID(工作进程重启时更改)
  • worker_id:工作进程的逻辑 ID(工作进程重启时不更改)

使用 HTTP 传输的用户克隆和获取活动在日志中显示为 action: git_upload_pack

此外,日志包含发起请求的 IP 地址 (remote_ip)、用户 ID (user_id) 和用户名 (username)。

某些端点(例如 /search)如果使用高级搜索,可能会向 Elasticsearch 发出请求。这些请求还会记录 elasticsearch_callselasticsearch_duration_s,分别对应:

  • elasticsearch_calls:对 Elasticsearch 的调用总数
  • elasticsearch_duration_s:Elasticsearch 调用花费的总时间
  • elasticsearch_timed_out_count:超时并因此返回部分结果的 Elasticsearch 调用总数

使用 极狐GitLab Secrets Manager 读取或写入密钥的请求还会记录 openbao_callsopenbao_duration_s,分别对应:

  • openbao_calls:对 OpenBao 的调用总数
  • openbao_duration_s:OpenBao 调用花费的总时间

ActionCable 连接和订阅事件也会记录到此文件中,并遵循之前的格式。methodpathformat 字段不适用,并且始终为空。ActionCable 连接或频道类用作 controller

json
1{ 2 "method":null, 3 "path":null, 4 "format":null, 5 "controller":"IssuesChannel", 6 "action":"subscribe", 7 "status":200, 8 "time":"2020-05-14T19:46:22.008Z", 9 "params":[{"key":"project_path","value":"gitlab/gitlab-foss"},{"key":"iid","value":"1"}], 10 "remote_ip":"127.0.0.1", 11 "user_id":1, 12 "username":"admin", 13 "ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0", 14 "correlation_id":"jSOIEynHCUa", 15 "duration_s":0.32566 16}

如果发生错误,会包含一个 exception 字段,其中包含 classmessagebacktrace。以前的版本包含一个 error 字段,而不是 exception.classexception.message。例如:

json
1{ 2 "method": "GET", 3 "path": "/admin", 4 "format": "html", 5 "controller": "Admin::DashboardController", 6 "action": "index", 7 "status": 500, 8 "time": "2019-11-14T13:12:46.156Z", 9 "params": [], 10 "remote_ip": "127.0.0.1", 11 "user_id": 1, 12 "username": "root", 13 "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:70.0) Gecko/20100101 Firefox/70.0", 14 "queue_duration": 274.35, 15 "correlation_id": "KjDVUhNvvV3", 16 "queue_duration_s":0.0, 17 "gitaly_calls":16, 18 "gitaly_duration_s":0.16, 19 "redis_calls":115, 20 "redis_duration_s":0.13, 21 "correlation_id":"O1SdybnnIq7", 22 "cpu_s":17.50, 23 "db_duration_s":0.08, 24 "view_duration_s":2.39, 25 "duration_s":20.54, 26 "pid": 81836, 27 "worker_id": "puma_0", 28 "exception.class": "NameError", 29 "exception.message": "undefined local variable or method `adsf' for #<Admin::DashboardController:0x00007ff3c9648588>", 30 "exception.backtrace": [ 31 "app/controllers/admin/dashboard_controller.rb:11:in `index'", 32 "ee/app/controllers/ee/admin/dashboard_controller.rb:14:in `index'", 33 "ee/lib/gitlab/ip_address_state.rb:10:in `with'", 34 "ee/app/controllers/ee/application_controller.rb:43:in `set_current_ip_address'", 35 "lib/gitlab/session.rb:11:in `with_session'", 36 "app/controllers/application_controller.rb:450:in `set_session_storage'", 37 "app/controllers/application_controller.rb:444:in `set_locale'", 38 "ee/lib/gitlab/jira/middleware.rb:19:in `call'" 39 ] 40}

production.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/production.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/production.log 文件中。

它包含有关所有已执行请求的信息。您可以查看请求的 URL 和类型、IP 地址以及处理此特定请求所涉及的代码部分。此外,您还可以查看所有已执行的 SQL 请求以及每个请求花费的时间。此任务对极狐GitLab 贡献者和开发者更有用。报告错误时,请使用此日志文件的一部分。例如:

plaintext
1Started GET "/gitlabhq/yaml_db/tree/master" for 168.111.56.1 at 2015-02-12 19:34:53 +0200 2Processing by Projects::TreeController#show as HTML 3 Parameters: {"project_id"=>"gitlabhq/yaml_db", "id"=>"master"} 4 5 ... [CUT OUT] 6 7 Namespaces"."created_at" DESC, "namespaces"."id" DESC LIMIT 1 [["id", 26]] 8 CACHE (0.0ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = 'Project' AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $1 AND "members"."source_type" = $2 AND "members"."user_id" = 1 ORDER BY "members"."created_at" DESC, "members"."id" DESC LIMIT 1 [["source_id", 18], ["source_type", "Project"]] 9 CACHE (0.0ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = 'Project' AND "members". 10 (1.4ms) SELECT COUNT(*) FROM "merge_requests" WHERE "merge_requests"."target_project_id" = $1 AND ("merge_requests"."state" IN ('opened','reopened')) [["target_project_id", 18]] 11 Rendered layouts/nav/_project.html.haml (28.0ms) 12 Rendered layouts/_collapse_button.html.haml (0.2ms) 13 Rendered layouts/_flash.html.haml (0.1ms) 14 Rendered layouts/_page.html.haml (32.9ms) 15Completed 200 OK in 166ms (Views: 117.4ms | ActiveRecord: 27.2ms)

在此示例中,服务器处理了一个 URL 为 /gitlabhq/yaml_db/tree/master、来自 IP 168.111.56.1、时间为 2015-02-12 19:34:53 +0200 的 HTTP 请求。该请求由 Projects::TreeController 处理。

api_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/api_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/api_json.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="api_json" 键下。

它帮助您查看直接对 API 发出的请求。例如:

json
1{ 2 "time":"2018-10-29T12:49:42.123Z", 3 "severity":"INFO", 4 "duration":709.08, 5 "db":14.59, 6 "view":694.49, 7 "status":200, 8 "method":"GET", 9 "path":"/api/v4/projects", 10 "params":[{"key":"action","value":"git-upload-pack"},{"key":"changes","value":"_any"},{"key":"key_id","value":"secret"},{"key":"secret_token","value":"[FILTERED]"}], 11 "host":"localhost", 12 "remote_ip":"::1", 13 "ua":"Ruby", 14 "route":"/api/:version/projects", 15 "user_id":1, 16 "username":"root", 17 "queue_duration":100.31, 18 "gitaly_calls":30, 19 "gitaly_duration":5.36, 20 "pid": 81836, 21 "worker_id": "puma_0", 22 ... 23}

此条目显示了一个内部端点,用于检查关联的 SSH 密钥是否可以通过使用 git fetchgit clone 下载相关项目。在此示例中,我们看到:

  • duration:检索请求的总时间(毫秒)
  • queue_duration:请求在 GitLab Workhorse 内部排队的总时间(毫秒)
  • method:发出请求所使用的 HTTP 方法
  • path:查询的相对路径
  • params:在查询字符串或 HTTP 正文中传递的键值对(敏感参数,如密码和令牌,会被过滤掉)
  • ua:请求方的 User-Agent

Grape Logging v1.8.4 起, view_duration_sduration_s - db_duration_s 计算。 因此,view_duration_s 可能受到多种不同因素的影响,例如 Redis 上的读写进程或外部 HTTP,而不仅仅是序列化过程。

application.log(已弃用)#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/application.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/application.log 文件中。

它包含 application_json.log 中日志的结构化程度较低的版本,如下例所示:

plaintext
October 06, 2014 11:56: User "Administrator" (admin@example.com) was created October 06, 2014 11:56: Documentcloud created a new project "Documentcloud / Underscore" October 06, 2014 11:56: Gitlab Org created a new project "Gitlab Org / Gitlab Ce" October 07, 2014 11:25: User "Claudie Hodkiewicz" (nasir_stehr@olson.co.uk) was removed October 07, 2014 11:25: Project "project133" was removed

application_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/application_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/application_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="application_json" 键下。

它帮助您发现实例中发生的事件,例如用户创建和项目删除。例如:

json
1{ 2 "severity":"INFO", 3 "time":"2020-01-14T13:35:15.466Z", 4 "correlation_id":"3823a1550b64417f9c9ed8ee0f48087e", 5 "message":"User \"Administrator\" (admin@example.com) was created" 6} 7{ 8 "severity":"INFO", 9 "time":"2020-01-14T13:35:15.466Z", 10 "correlation_id":"78e3df10c9a18745243d524540bd5be4", 11 "message":"Project \"project133\" was removed" 12}

integrations_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/integrations_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/integrations_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="integrations_json" 键下。

它包含有关集成活动的信息,例如 Jira、Asana 和 irker 服务。它使用 JSON 格式,如下例所示:

json
1{ 2 "severity":"ERROR", 3 "time":"2018-09-06T14:56:20.439Z", 4 "service_class":"Integrations::Jira", 5 "project_id":8, 6 "project_path":"h5bp/html5-boilerplate", 7 "message":"Error sending message", 8 "client_url":"http://jira.gitlab.com:8080", 9 "error":"execution expired" 10} 11{ 12 "severity":"INFO", 13 "time":"2018-09-06T17:15:16.365Z", 14 "service_class":"Integrations::Jira", 15 "project_id":3, 16 "project_path":"namespace2/project2", 17 "message":"Successfully posted", 18 "client_url":"http://jira.example.com" 19}

kubernetes.log(已弃用)#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/kubernetes.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/kubernetes.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="kubernetes" 键下。

它记录与基于证书的集群相关的信息,例如连接错误。每行包含可由 Elasticsearch 和 Splunk 等服务接收的 JSON。

git_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/git_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/git_json.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="git_json" 键下。

极狐GitLab 必须与 Git 代码仓库交互,但在极少数情况下可能会出错。如果发生这种情况,您需要确切知道发生了什么。此日志文件包含从极狐GitLab 到 Git 代码仓库的所有失败请求。在大多数情况下,此文件仅对开发者有用。例如:

json
1{ 2 "severity":"ERROR", 3 "time":"2019-07-19T22:16:12.528Z", 4 "correlation_id":"FeGxww5Hj64", 5 "message":"Command failed [1]: /usr/bin/git --git-dir=/Users/vsizov/gitlab-development-kit/gitlab/tmp/tests/gitlab-satellites/group184/gitlabhq/.git --work-tree=/Users/vsizov/gitlab-development-kit/gitlab/tmp/tests/gitlab-satellites/group184/gitlabhq merge --no-ff -mMerge branch 'feature_conflict' into 'feature' source/feature_conflict\n\nerror: failed to push some refs to '/Users/vsizov/gitlab-development-kit/repositories/gitlabhq/gitlab_git.git'" 6}

audit_json.log#

Tier: 基础版,专业版,旗舰版

Offering: 私有化部署

极狐GitLab 基础版跟踪少量不同的审计事件。 极狐GitLab 专业版跟踪更多。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/audit_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/audit_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="audit_json" 键下。

对群组或项目设置和成员资格 (target_details) 的更改会记录到此文件中。例如:

json
1{ 2 "severity":"INFO", 3 "time":"2018-10-17T17:38:22.523Z", 4 "author_id":3, 5 "entity_id":2, 6 "entity_type":"Project", 7 "change":"visibility", 8 "from":"Private", 9 "to":"Public", 10 "author_name":"John Doe4", 11 "target_id":2, 12 "target_type":"Project", 13 "target_details":"namespace2/project2" 14}

Sidekiq 日志#

对于 Linux 软件包安装,某些 Sidekiq 日志位于 /var/log/gitlab/sidekiq/current,如下所述。

sidekiq.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/sidekiq/current 文件中。
  • 自编译安装的 /home/git/gitlab/log/sidekiq.log 文件中。

GitLab Helm chart 安装的默认日志格式是 json

极狐GitLab 使用后台作业来处理可能需要长时间的任务。有关处理这些作业的所有信息都会写入此文件。例如:

json
1{ 2 "severity":"INFO", 3 "time":"2018-04-03T22:57:22.071Z", 4 "queue":"cronjob:update_all_mirrors", 5 "args":[], 6 "class":"UpdateAllMirrorsWorker", 7 "retry":false, 8 "queue_namespace":"cronjob", 9 "jid":"06aeaa3b0aadacf9981f368e", 10 "created_at":"2018-04-03T22:57:21.930Z", 11 "enqueued_at":"2018-04-03T22:57:21.931Z", 12 "pid":10077, 13 "worker_id":"sidekiq_0", 14 "message":"UpdateAllMirrorsWorker JID-06aeaa3b0aadacf9981f368e: done: 0.139 sec", 15 "job_status":"done", 16 "duration":0.139, 17 "completed_at":"2018-04-03T22:57:22.071Z", 18 "db_duration":0.05, 19 "db_duration_s":0.0005, 20 "gitaly_duration":0, 21 "gitaly_calls":0 22}

除了 JSON 日志,您也可以选择为 Sidekiq 生成文本日志。例如:

plaintext
12023-05-16T16:08:55.272Z pid=82525 tid=23rl INFO: Initializing websocket 22023-05-16T16:08:55.279Z pid=82525 tid=23rl INFO: Booted Rails 6.1.7.2 application in production environment 32023-05-16T16:08:55.279Z pid=82525 tid=23rl INFO: Running in ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [arm64-darwin22] 42023-05-16T16:08:55.279Z pid=82525 tid=23rl INFO: See LICENSE and the LGPL-3.0 for licensing details. 52023-05-16T16:08:55.279Z pid=82525 tid=23rl INFO: Upgrade to Sidekiq Pro for more features and support: https://sidekiq.org 62023-05-16T16:08:55.286Z pid=82525 tid=7p4t INFO: Cleaning working queues 72023-05-16T16:09:06.043Z pid=82525 tid=7p7d class=ScheduleMergeRequestCleanupRefsWorker jid=efcc73f169c09a514b06da3f INFO: start 82023-05-16T16:09:06.050Z pid=82525 tid=7p7d class=ScheduleMergeRequestCleanupRefsWorker jid=efcc73f169c09a514b06da3f INFO: arguments: [] 92023-05-16T16:09:06.065Z pid=82525 tid=7p81 class=UserStatusCleanup::BatchWorker jid=e279aa6409ac33031a314822 INFO: start 102023-05-16T16:09:06.066Z pid=82525 tid=7p81 class=UserStatusCleanup::BatchWorker jid=e279aa6409ac33031a314822 INFO: arguments: []

对于 Linux 软件包安装,添加配置选项:

ruby
sidekiq['log_format'] = 'text'

对于自编译安装,编辑 gitlab.yml 并设置 Sidekiq 的 log_format 配置选项:

yaml
## Sidekiq sidekiq: log_format: text

sidekiq_client.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/sidekiq_client.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/sidekiq_client.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="sidekiq_client" 键下。

此文件包含 Sidekiq 开始处理作业之前(例如入队之前)的作业日志信息。

此日志文件遵循与 sidekiq.log 相同的结构,因此如果您如前所述为 Sidekiq 配置了 JSON 格式,它将是 JSON 结构。

gitlab-shell.log#

GitLab Shell 被极狐GitLab 用于执行 Git 命令并为 Git 代码仓库提供 SSH 访问。

包含 git-{upload-pack,receive-pack} 请求的信息位于 /var/log/gitlab/gitlab-shell/gitlab-shell.log。来自 Gitaly 的 GitLab Shell 钩子信息位于 /var/log/gitlab/gitaly/current

/var/log/gitlab/gitlab-shell/gitlab-shell.log 的示例日志条目:

json
1{ 2 "duration_ms": 74.104, 3 "level": "info", 4 "method": "POST", 5 "msg": "Finished HTTP request", 6 "time": "2020-04-17T20:28:46Z", 7 "url": "http://127.0.0.1:8080/api/v4/internal/allowed" 8} 9{ 10 "command": "git-upload-pack", 11 "git_protocol": "", 12 "gl_project_path": "root/example", 13 "gl_repository": "project-1", 14 "level": "info", 15 "msg": "executing git command", 16 "time": "2020-04-17T20:28:46Z", 17 "user_id": "user-1", 18 "username": "root" 19}

/var/log/gitlab/gitaly/current 的示例日志条目:

json
1{ 2 "method": "POST", 3 "url": "http://127.0.0.1:8080/api/v4/internal/allowed", 4 "duration": 0.058012959, 5 "gitaly_embedded": true, 6 "pid": 16636, 7 "level": "info", 8 "msg": "finished HTTP request", 9 "time": "2020-04-17T20:29:08+00:00" 10} 11{ 12 "method": "POST", 13 "url": "http://127.0.0.1:8080/api/v4/internal/pre_receive", 14 "duration": 0.031022552, 15 "gitaly_embedded": true, 16 "pid": 16636, 17 "level": "info", 18 "msg": "finished HTTP request", 19 "time": "2020-04-17T20:29:08+00:00" 20}

Gitaly 日志#

此文件位于 /var/log/gitlab/gitaly/current,由 runit 生成。runit 随 Linux 软件包一起打包,其用途的简要说明可在 Linux 软件包文档 中找到。

grpc.log#

对于 Linux 软件包安装,此文件位于 /var/log/gitlab/gitlab-rails/grpc.log。Gitaly 使用的原生 gRPC 日志记录。

gitaly_hooks.log#

此文件位于 /var/log/gitlab/gitaly/gitaly_hooks.log,由 gitaly-hooks 命令生成。它还包含处理极狐GitLab API 响应期间收到的失败记录。

Puma 日志#

puma_stdout.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/puma/puma_stdout.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/puma_stdout.log 文件中。

puma_stderr.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/puma/puma_stderr.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/puma_stderr.log 文件中。

repocheck.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/repocheck.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/repocheck.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="repocheck" 键下。

每当对项目执行代码仓库检查时,它都会记录信息。

importer.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/importer.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/importer.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="importer" 键下。

此文件记录项目导入和迁移的进度。

exporter.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/exporter.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/exporter.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="exporter" 键下。

它记录导出过程的进度。

features_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/features_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/features_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="features_json" 键下。

极狐GitLab 开发中功能标志的修改事件记录在此文件中。例如:

json
1{"severity":"INFO","time":"2020-11-24T02:30:59.860Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"true"} 2{"severity":"INFO","time":"2020-11-24T02:31:29.108Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"true"} 3{"severity":"INFO","time":"2020-11-24T02:31:29.129Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable","extra.thing":"false"} 4{"severity":"INFO","time":"2020-11-24T02:31:29.177Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"Project:1"} 5{"severity":"INFO","time":"2020-11-24T02:31:29.183Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable","extra.thing":"Project:1"} 6{"severity":"INFO","time":"2020-11-24T02:31:29.188Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable_percentage_of_time","extra.percentage":"50"} 7{"severity":"INFO","time":"2020-11-24T02:31:29.193Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable_percentage_of_time"} 8{"severity":"INFO","time":"2020-11-24T02:31:29.198Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable_percentage_of_actors","extra.percentage":"50"} 9{"severity":"INFO","time":"2020-11-24T02:31:29.203Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable_percentage_of_actors"} 10{"severity":"INFO","time":"2020-11-24T02:31:29.329Z","correlation_id":null,"key":"cd_auto_rollback","action":"remove"}

ci_resource_groups_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/ci_resource_groups_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/ci_resource_group_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="ci_resource_groups_json" 键下。

它包含有关资源组获取的信息。例如:

json
{"severity":"INFO","time":"2023-02-10T23:02:06.095Z","correlation_id":"01GRYS10C2DZQ9J1G12ZVAD4YD","resource_group_id":1,"processable_id":288,"message":"attempted to assign resource to processable","success":true} {"severity":"INFO","time":"2023-02-10T23:02:08.945Z","correlation_id":"01GRYS138MYEG32C0QEWMC4BDM","resource_group_id":1,"processable_id":288,"message":"attempted to release resource from processable","success":true}

示例显示了每个条目的 resource_group_idprocessable_idmessagesuccess 字段。

auth.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/auth.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/auth.log 文件中。

此日志记录:

auth_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/auth_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/auth_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="auth_json" 键下。

此文件包含 auth.log 中日志的 JSON 版本,例如:

json
1{ 2 "severity":"ERROR", 3 "time":"2023-04-19T22:14:25.893Z", 4 "correlation_id":"01GYDSAKAN2SPZPAMJNRWW5H8S", 5 "message":"Rack_Attack", 6 "env":"blocklist", 7 "remote_ip":"x.x.x.x", 8 "request_method":"GET", 9 "path":"/group/project.git/info/refs?service=git-upload-pack" 10}

graphql_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/graphql_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/graphql_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="graphql_json" 键下。

GraphQL 查询记录在此文件中。例如:

json
{"query_string":"query IntrospectionQuery{__schema {queryType { name },mutationType { name }}}...(etc)","variables":{"a":1,"b":2},"complexity":181,"depth":1,"duration_s":7}

clickhouse.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/clickhouse.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/clickhouse.log 文件中。
  • Sidekiq 和 Webservice Pod 上,位于 subcomponent="clickhouse" 键下。

clickhouse.log 文件记录与极狐GitLab 中 ClickHouse 数据库客户端 相关的信息。

migrations.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/migrations.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/migrations.log 文件中。

此文件记录数据库迁移的进度。

mail_room_json.log(默认)#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/mailroom/current 文件中。
  • 自编译安装的 /home/git/gitlab/log/mail_room_json.log 文件中。

此结构化日志文件记录 mail_room gem 中的内部活动。其名称和路径是可配置的,因此名称和路径可能与前面记录的此名称和路径不匹配。

web_hooks.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/web_hooks.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/web_hooks.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="web_hooks" 键下。

Webhook 的退避、禁用和重新启用事件记录在此文件中。例如:

json
{"severity":"INFO","time":"2020-11-24T02:30:59.860Z","hook_id":12,"action":"backoff","disabled_until":"2020-11-24T04:30:59.860Z","recent_failures":2} {"severity":"INFO","time":"2020-11-24T02:30:59.860Z","hook_id":12,"action":"disable","disabled_until":null,"recent_failures":100} {"severity":"INFO","time":"2020-11-24T02:30:59.860Z","hook_id":12,"action":"enable","disabled_until":null,"recent_failures":0}

重新配置日志#

对于 Linux 软件包安装,重新配置日志文件位于 /var/log/gitlab/reconfigure。自编译安装没有重新配置日志。每当手动运行 gitlab-ctl reconfigure 或作为升级的一部分运行时,都会生成重新配置日志。

重新配置日志文件根据重新配置启动时的 UNIX 时间戳命名,例如 1509705644.log

sidekiq_exporter.logweb_exporter.log#

如果同时启用 Prometheus 指标和 Sidekiq Exporter,Sidekiq 会启动一个 Web 服务器并监听定义的端口(默认:8082)。默认情况下,Sidekiq Exporter 访问日志是禁用的,但可以启用:

  • 在 Linux 软件包安装的 /etc/gitlab/gitlab.rb 中使用 sidekiq['exporter_log_enabled'] = true 选项。
  • 在自编译安装的 gitlab.yml 中使用 sidekiq_exporter.log_enabled 选项。

启用后,根据您的安装方法,此文件位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/sidekiq_exporter.log
  • 自编译安装的 /home/git/gitlab/log/sidekiq_exporter.log

如果同时启用 Prometheus 指标和 Web Exporter,Puma 会启动一个 Web 服务器并监听定义的端口(默认:8083),并根据您的安装方法在某个位置生成访问日志:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/web_exporter.log
  • 自编译安装的 /home/git/gitlab/log/web_exporter.log

database_load_balancing.log#

Tier: 专业版,旗舰版

Offering: 私有化部署

包含极狐GitLab 数据库负载均衡的详细信息。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/database_load_balancing.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/database_load_balancing.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="database_load_balancing" 键下。

zoekt.log#

Tier: 专业版,旗舰版

Offering: 私有化部署

此文件记录与精确代码搜索相关的信息。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/zoekt.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/zoekt.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="zoekt" 键下。

zoekt.log 字段#

来自周期性指标 cron 作业的条目通过 metric 字段(node_metricsindices_metrics)进行区分。每个请求的日志条目不携带 metric 字段,而是将下面记录的 Zoekt 字段附加到捕获它们的任何 Rails 请求或 Sidekiq 作业日志行中。

节点指标条目 (metric: node_metrics)#

这些条目由周期性指标 cron 作业为每个在线的 Zoekt 节点发出一次。

字段类型描述
enabled_namespaces_count整数在此节点上启用精确代码搜索的命名空间数量
indices_count整数此节点上的代码仓库索引数量
task_count_pending整数处于 pending 状态的索引任务数量
task_count_failed整数处于 failed 状态的索引任务数量
task_count_processing_queue整数准备好处理的索引任务数量(状态为 pendingprocessingperform_at <= now
task_count_orphaned整数处于 orphaned 状态的索引任务数量
task_count_done整数处于 done 状态的索引任务数量
meta对象节点元数据,包括节点 ID 和 URL

索引指标条目 (metric: indices_metrics)#

这些条目在每个指标收集周期发出一次。

meta.zoekt.with_stale_used_storage_bytes_updated_at 是一个带点的字面量扁平键名,不是嵌套对象路径。

字段类型描述
meta.zoekt.with_stale_used_storage_bytes_updated_at整数used_storage_bytes 值最近未更新的 Zoekt 索引数量

每个请求的字段#

这些字段出现在从 GitLab Rails 到 Zoekt 节点的每个 HTTP 请求发出的日志条目中。

字段类型描述
zoekt_calls整数在此 Rails 请求期间发出的 Zoekt HTTP 请求数量
zoekt_duration_s浮点数在此 Rails 请求期间等待 Zoekt 响应所花费的总时间(秒)

elasticsearch.log#

Tier: 专业版,旗舰版

Offering: 私有化部署

此文件记录与 Elasticsearch 集成相关的信息,包括索引或搜索 Elasticsearch 期间的错误。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/elasticsearch.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/elasticsearch.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="elasticsearch" 键下。

每行包含可由 Elasticsearch 和 Splunk 等服务接收的 JSON。为清晰起见,以下示例行中添加了换行符:

json
1{ 2 "severity":"DEBUG", 3 "time":"2019-10-17T06:23:13.227Z", 4 "correlation_id":null, 5 "message":"redacted_search_result", 6 "class_name":"Milestone", 7 "id":2, 8 "ability":"read_milestone", 9 "current_user_id":2, 10 "query":"project" 11}

exceptions_json.log#

此文件记录由 Gitlab::ErrorTracking 跟踪的异常信息,它提供了一种标准且一致的方式来处理被捕获的异常。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/exceptions_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/exceptions_json.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="exceptions_json" 键下。

每行包含可由 Elasticsearch 接收的 JSON。例如:

json
1{ 2 "severity": "ERROR", 3 "time": "2019-12-17T11:49:29.485Z", 4 "correlation_id": "AbDVUrrTvM1", 5 "extra.project_id": 55, 6 "extra.relation_key": "milestones", 7 "extra.relation_index": 1, 8 "exception.class": "NoMethodError", 9 "exception.message": "undefined method `strong_memoize' for #<Gitlab::ImportExport::RelationFactory:0x00007fb5d917c4b0>", 10 "exception.backtrace": [ 11 "lib/gitlab/import_export/relation_factory.rb:329:in `unique_relation?'", 12 "lib/gitlab/import_export/relation_factory.rb:345:in `find_or_create_object!'" 13 ] 14}

service_measurement.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/service_measurement.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/service_measurement.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="service_measurement" 键下。

它仅包含一个带有每次服务执行测量的结构化日志。它包含诸如 SQL 调用次数、execution_timegc_statsmemory usage 等测量值。

例如:

json
{ "severity":"INFO", "time":"2020-04-22T16:04:50.691Z","correlation_id":"04f1366e-57a1-45b8-88c1-b00b23dc3616","class":"Projects::ImportExport::ExportService","current_user":"John Doe","project_full_path":"group1/test-export","file_path":"/path/to/archive","gc_stats":{"count":{"before":127,"after":127,"diff":0},"heap_allocated_pages":{"before":10369,"after":10369,"diff":0},"heap_sorted_length":{"before":10369,"after":10369,"diff":0},"heap_allocatable_pages":{"before":0,"after":0,"diff":0},"heap_available_slots":{"before":4226409,"after":4226409,"diff":0},"heap_live_slots":{"before":2542709,"after":2641420,"diff":98711},"heap_free_slots":{"before":1683700,"after":1584989,"diff":-98711},"heap_final_slots":{"before":0,"after":0,"diff":0},"heap_marked_slots":{"before":2542704,"after":2542704,"diff":0},"heap_eden_pages":{"before":10369,"after":10369,"diff":0},"heap_tomb_pages":{"before":0,"after":0,"diff":0},"total_allocated_pages":{"before":10369,"after":10369,"diff":0},"total_freed_pages":{"before":0,"after":0,"diff":0},"total_allocated_objects":{"before":24896308,"after":24995019,"diff":98711},"total_freed_objects":{"before":22353599,"after":22353599,"diff":0},"malloc_increase_bytes":{"before":140032,"after":6650240,"diff":6510208},"malloc_increase_bytes_limit":{"before":25804104,"after":25804104,"diff":0},"minor_gc_count":{"before":94,"after":94,"diff":0},"major_gc_count":{"before":33,"after":33,"diff":0},"remembered_wb_unprotected_objects":{"before":34284,"after":34284,"diff":0},"remembered_wb_unprotected_objects_limit":{"before":68568,"after":68568,"diff":0},"old_objects":{"before":2404725,"after":2404725,"diff":0},"old_objects_limit":{"before":4809450,"after":4809450,"diff":0},"oldmalloc_increase_bytes":{"before":140032,"after":6650240,"diff":6510208},"oldmalloc_increase_bytes_limit":{"before":68537556,"after":68537556,"diff":0}},"time_to_finish":0.12298400001600385,"number_of_sql_calls":70,"memory_usage":"0.0 MiB","label":"process_48616"}

geo.log#

Tier: 专业版,旗舰版

Offering: 私有化部署

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/geo.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/geo.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="geo" 键下。

此文件包含有关 Geo 何时尝试同步代码仓库和文件的信息。文件中的每一行都包含一个单独的 JSON 条目,可以被(例如,Elasticsearch 或 Splunk)接收。

例如:

json
{"severity":"INFO","time":"2017-08-06T05:40:16.104Z","message":"Repository update","project_id":1,"source":"repository","resync_repository":true,"resync_wiki":true,"class":"Gitlab::Geo::LogCursor::Daemon","cursor_delay_s":0.038}

此消息显示 Geo 检测到项目 1 需要更新代码仓库。

update_mirror_service_json.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/update_mirror_service_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/update_mirror_service_json.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="update_mirror_service_json" 键下。

此文件包含项目镜像期间发生的 LFS 错误信息。在其他项目镜像错误迁移到此日志之前,可以使用通用日志

json
1{ 2 "severity":"ERROR", 3 "time":"2020-07-28T23:29:29.473Z", 4 "correlation_id":"5HgIkCJsO53", 5 "user_id":"x", 6 "project_id":"x", 7 "import_url":"https://mirror-source/group/project.git", 8 "error_message":"The LFS objects download list couldn't be imported. Error: Unauthorized" 9}

llm.log#

Tier: 专业版,旗舰版

Offering: JihuLab.com,私有化部署

llm.log 文件记录与 AI 功能 相关的信息。日志记录包括有关 AI 事件的信息。

LLM 输入和输出日志记录#

此功能的可用性由功能标志控制。 此功能可用于测试,但尚未准备好用于生产环境。

要记录 LLM 提示输入和响应输出,请启用 expanded_ai_logging 功能标志。此标志仅用于 JihuLab.com,不用于极狐GitLab 私有化部署实例。

此标志默认禁用,并且只能通过以下方式启用:

  • 对于 JihuLab.com,当您通过 GitLab 支持工单 提供同意时。

默认情况下,日志不包含 LLM 提示输入和响应输出,以支持 AI 功能数据的数据保留策略

日志文件位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/llm.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/llm.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="llm" 键下。

mcp.log#

Tier: 专业版,旗舰版

Offering: JihuLab.com,私有化部署

mcp.log 文件记录与 极狐GitLab MCP 服务器 相关的信息。日志记录包括 MCP 服务器可用性拒绝,并带有 denial_reason 字段,说明请求被拒绝的原因。

日志文件位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/mcp.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/mcp.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="mcp" 键下。

epic_work_item_sync.log#

Tier: 专业版,旗舰版

Offering: JihuLab.com,私有化部署

epic_work_item_sync.log 文件记录与将史诗作为工作项同步和迁移相关的信息。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/epic_work_item_sync.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/epic_work_item_sync.log 文件中。
  • Helm chart 安装的 Sidekiq 和 Webservice Pod 上,位于 subcomponent="epic_work_item_sync" 键下。

secret_push_protection.log#

Tier: 旗舰版

Offering: JihuLab.com

secret_push_protection.log 文件记录与密钥推送保护功能相关的信息。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/secret_push_protection.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/secret_push_protection.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="secret_push_protection" 键下。

active_context.log#

Tier: 专业版,旗舰版

Offering: JihuLab.com,私有化部署

active_context.log 文件记录通过 ActiveContext 嵌入流水线的相关信息。

极狐GitLab 支持 ActiveContext 代码嵌入。此流水线处理项目代码文件的嵌入生成。更多信息,请参阅架构设计

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/active_context.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/active_context.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="activecontext" 键下。

ai_catalog.log#

Tier: 专业版,旗舰版

Offering: JihuLab.com,私有化部署

ai_catalog.log 文件记录与 AI 目录 相关的信息,包括何时执行 AI 目录任务流和 Agent。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/ai_catalog.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/ai_catalog.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="ai_catalog" 键下。

user_experience_slis.log#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/user_experience_slis.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/user_experience_slis.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="user_experience_slis" 键下。

它包含与指标匹配的用户体验 SLI 的 JSON 结构化日志。

每行包含可由 Elasticsearch 等服务接收的 JSON。

示例:

json
1{ 2 "checkpoint": "start", 3 "component": "gitlab", 4 "correlation_id": "3823a1550b64417f9c9ed8ee0f48087e", 5 "covered_experience": "create_merge_request", 6 "elapsed_time_s": 0, 7 "environment": "gprd", 8 "feature_category": "code_review_workflow", 9 "logtag": "F", 10 "meta": { 11 "caller_id": "Projects::MergeRequests::CreationsController#create", 12 "client_id": "user/123", 13 "feature_category": "code_review_workflow", 14 "gl_user_id": 123, 15 "organization_id": 456, 16 "project": "project/path/here", 17 "remote_ip": "x.x.x.x", 18 "root_namespace": "project", 19 "subscription_plan": "ultimate", 20 "user": "a_username" 21 }, 22 "severity": "INFO", 23 "shard": "default", 24 "stage": "cny", 25 "start_time": "2025-10-31 15:21:40 UTC", 26 "subcomponent": "user_experience_slis", 27 "tag": "web-cny-rails.var.log.containers.gitlab-cny-webservice-web-123-abc_gitlab-cny_webservice-4567890.log", 28 "tier": "sv", 29 "time": "2025-10-31T15:21:40.333Z", 30 "type": "web", 31 "urgency": "async_fast", 32 "urgency_threshold_s": 15 33}

可用字段记录在用户体验 SLI 设计文档中。

Registry 日志#

对于 Linux 软件包安装,容器镜像仓库日志位于 /var/log/gitlab/registry/current

NGINX 日志#

对于 Linux 软件包安装,NGINX 日志位于:

  • /var/log/gitlab/nginx/gitlab_access.log:对极狐GitLab 发出的请求日志
  • /var/log/gitlab/nginx/gitlab_error.log:极狐GitLab 的 NGINX 错误日志
  • /var/log/gitlab/nginx/gitlab_pages_access.log:对 Pages 静态站点发出的请求日志
  • /var/log/gitlab/nginx/gitlab_pages_error.log:Pages 静态站点的 NGINX 错误日志
  • /var/log/gitlab/nginx/gitlab_registry_access.log:对容器镜像仓库发出的请求日志
  • /var/log/gitlab/nginx/gitlab_registry_error.log:容器镜像仓库的 NGINX 错误日志
  • /var/log/gitlab/nginx/gitlab_mattermost_access.log:对 Mattermost 发出的请求日志
  • /var/log/gitlab/nginx/gitlab_mattermost_error.log:Mattermost 的 NGINX 错误日志

以下是默认的极狐GitLab NGINX 访问日志格式:

plaintext
'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'

$request$http_referer过滤敏感的查询字符串参数,例如密钥令牌。

Pages 日志#

对于 Linux 软件包安装,Pages 日志位于 /var/log/gitlab/gitlab-pages/current

例如:

json
1{ 2 "level": "info", 3 "msg": "GitLab Pages Daemon", 4 "revision": "52b2899", 5 "time": "2020-04-22T17:53:12Z", 6 "version": "1.17.0" 7} 8{ 9 "level": "info", 10 "msg": "URL: https://gitlab.com/gitlab-org/gitlab-pages", 11 "time": "2020-04-22T17:53:12Z" 12} 13{ 14 "gid": 998, 15 "in-place": false, 16 "level": "info", 17 "msg": "running the daemon as unprivileged user", 18 "time": "2020-04-22T17:53:12Z", 19 "uid": 998 20}

产品使用数据日志#

不建议使用原始日志分析功能使用情况,因为数据质量尚未经过准确性认证。 事件列表可能因新功能或现有功能的更改而在每个版本中发生变化。经过认证的产品内采用报告将在数据准备好分析后提供。

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/product_usage_data.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/product_usage_data.log 文件中。
  • Helm chart 安装的 Webservice Pod 上,位于 subcomponent="product_usage_data" 键下。

它包含通过 Snowplow 跟踪的产品使用事件的 JSON 格式日志。文件中的每一行都包含一个单独的 JSON 条目,可以被 Elasticsearch 或 Splunk 等服务接收。为便于阅读,示例中添加了换行符:

json
1{ 2 "severity":"INFO", 3 "time":"2025-04-09T13:43:40.254Z", 4 "message":"sending event", 5 "payload":"{ 6 \"e\":\"se\", 7 \"se_ca\":\"projects:merge_requests:diffs\", 8 \"se_ac\":\"i_code_review_user_searches_diff\", 9 \"cx\":\"eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0xIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uZ2l0bGFiL2dpdGxhYl9zdGFuZGFyZC9qc29uc2NoZW1hLzEtMS0xIiwiZGF0YSI6eyJlbnZpcm9ubWVudCI6ImRldmVsb3BtZW50Iiwic291cmNlIjoiZ2l0bGFiLXJhaWxzIiwiY29ycmVsYXRpb25faWQiOiJlNDk2NzNjNWI2MGQ5ODc0M2U4YWI0MjZiMTZmMTkxMiIsInBsYW4iOiJkZWZhdWx0IiwiZXh0cmEiOnt9LCJ1c2VyX2lkIjpudWxsLCJnbG9iYWxfdXNlcl9pZCI6bnVsbCwiaXNfZ2l0bGFiX3RlYW1fbWVtYmVyIjpudWxsLCJuYW1lc3BhY2VfaWQiOjMxLCJwcm9qZWN0X2lkIjo2LCJmZWF0dXJlX2VuYWJsZWRfYnlfbmFtZXNwYWNlX2lkcyI6bnVsbCwicmVhbG0iOiJzZWxmLW1hbmFnZWQiLCJpbnN0YW5jZV9pZCI6IjJkMDg1NzBkLWNmZGItNDFmMy1iODllLWM3MTM5YmFjZTI3NSIsImhvc3RfbmFtZSI6ImpsYXJzZW4tLTIwMjIxMjE0LVBWWTY5IiwiaW5zdGFuY2VfdmVyc2lvbiI6IjE3LjExLjAiLCJjb250ZXh0X2dlbmVyYXRlZF9hdCI6IjIwMjUtMDQtMDkgMTM6NDM6NDAgVVRDIn19LHsic2NoZW1hIjoiaWdsdTpjb20uZ2l0bGFiL2dpdGxhYl9zZXJ2aWNlX3BpbmcvanNvbnNjaGVtYS8xLTAtMSIsImRhdGEiOnsiZGF0YV9zb3VyY2UiOiJyZWRpc19obGwiLCJldmVudF9uYW1lIjoiaV9jb2RlX3Jldmlld191c2VyX3NlYXJjaGVzX2RpZmYifX1dfQ==\", 10 \"p\":\"srv\", 11 \"dtm\":\"1744206220253\", 12 \"tna\":\"gl\", 13 \"tv\":\"rb-0.8.0\", 14 \"eid\":\"4f067989-d10d-40b0-9312-ad9d7355be7f\" 15}

要检查这些日志,您可以使用 Rake 任务 product_usage_data:format,它会格式化 JSON 输出并解码 base64 编码的上下文数据,以提高可读性:

shell
gitlab-rake "product_usage_data:format[log/product_usage_data.log]" # or pipe the logs directly cat log/product_usage_data.log | gitlab-rake product_usage_data:format # or tail the logs in real-time tail -f log/product_usage_data.log | gitlab-rake product_usage_data:format

您可以通过将 GITLAB_DISABLE_PRODUCT_USAGE_EVENT_LOGGING 环境变量设置为任意值来禁用此日志。

Let's Encrypt 日志#

对于 Linux 软件包安装,Let's Encrypt 自动续期 日志位于 /var/log/gitlab/lets-encrypt/

Mattermost 日志#

对于 Linux 软件包安装,Mattermost 日志位于以下位置:

  • /var/log/gitlab/mattermost/mattermost.log
  • /var/log/gitlab/mattermost/current

Workhorse 日志#

对于 Linux 软件包安装,Workhorse 日志位于 /var/log/gitlab/gitlab-workhorse/current

Patroni 日志#

对于 Linux 软件包安装,Patroni 日志位于 /var/log/gitlab/patroni/current

PgBouncer 日志#

对于 Linux 软件包安装,PgBouncer 日志位于 /var/log/gitlab/pgbouncer/current

PostgreSQL 日志#

对于 Linux 软件包安装,PostgreSQL 日志位于 /var/log/gitlab/postgresql/current

如果使用 Patroni,PostgreSQL 日志将存储在 Patroni 日志 中。

Prometheus 日志#

对于 Linux 软件包安装,Prometheus 日志位于 /var/log/gitlab/prometheus/current

Redis 日志#

对于 Linux 软件包安装,Redis 日志位于 /var/log/gitlab/redis/current

Sentinel 日志#

对于 Linux 软件包安装,Sentinel 日志位于 /var/log/gitlab/sentinel/current

Alertmanager 日志#

对于 Linux 软件包安装,Alertmanager 日志位于 /var/log/gitlab/alertmanager/current

Consul 日志#

对于 Linux 软件包安装,Consul 日志位于 /var/log/gitlab/consul/current

crond 日志#

对于 Linux 软件包安装,crond 日志位于 /var/log/gitlab/crond/

Grafana 日志#

对于 Linux 软件包安装,Grafana 日志位于 /var/log/gitlab/grafana/current

LogRotate 日志#

对于 Linux 软件包安装,logrotate 日志位于 /var/log/gitlab/logrotate/current

GitLab Monitor 日志#

对于 Linux 软件包安装,GitLab Monitor 日志位于 /var/log/gitlab/gitlab-monitor/

GitLab Exporter 日志#

对于 Linux 软件包安装,GitLab Exporter 日志位于 /var/log/gitlab/gitlab-exporter/current

用于 Kubernetes 的 GitLab agent server 日志#

对于 Linux 软件包安装,用于 Kubernetes 的 GitLab agent server 日志位于 /var/log/gitlab/gitlab-kas/current

Praefect 日志#

对于 Linux 软件包安装,Praefect 日志位于 /var/log/gitlab/praefect/

极狐GitLab 还跟踪 Gitaly 集群 (Praefect)的 Prometheus 指标

备份日志#

对于 Linux 软件包安装,备份日志位于 /var/log/gitlab/gitlab-rails/backup_json.log

在 Helm chart 安装中,备份日志存储在 Toolbox Pod 中,位于 /var/log/gitlab/backup_json.log

当创建极狐GitLab 备份时,会生成此日志。您可以使用此日志来了解备份过程的执行情况。

性能栏统计信息#

此日志位于:

  • Linux 软件包安装的 /var/log/gitlab/gitlab-rails/performance_bar_json.log 文件中。
  • 自编译安装的 /home/git/gitlab/log/performance_bar_json.log 文件中。
  • Helm chart 安装的 Sidekiq Pod 上,位于 subcomponent="performance_bar_json" 键下。

性能栏统计信息(目前仅限 SQL 查询的持续时间)记录在该文件中。例如:

json
{"severity":"INFO","time":"2020-12-04T09:29:44.592Z","correlation_id":"33680b1490ccd35981b03639c406a697","filename":"app/models/ci/pipeline.rb","method_path":"app/models/ci/pipeline.rb:each_with_object","request_id":"rYHomD0VJS4","duration_ms":26.889,"count":2,"query_type": "active-record"}

这些统计信息仅在 JihuLab.com 上记录,在私有化部署环境中禁用。

收集日志#

排查并非局限于前面所列组件之一的问题时,同时从极狐GitLab 实例收集多个日志和统计数据会很有帮助。

GitLab Support 通常会要求提供其中一种,并维护所需工具。

简要跟踪主要日志#

如果错误或缺陷易于复现,请在多次复现问题的同时,将主要极狐GitLab 日志保存到文件

shell
sudo gitlab-ctl tail | tee /tmp/<case-ID-and-keywords>.log

日志收集结束时,按 Control + C 结束。

收集 SOS 日志#

如果出现性能下降或级联错误,且无法轻易归因于前面所列的某个极狐GitLab 组件,请使用我们的 SOS 脚本

Fast-stats#

Fast-stats 是一个用于从极狐GitLab 日志创建和比较性能统计数据的工具。 有关更多详情和运行说明,请阅读 fast-stats 文档

使用关联 ID 查找相关日志条目#

大多数请求都有一个日志 ID,可用于查找相关日志条目