Help us learn about your current experience with the documentation. Take the survey.

日志系统

  • 层级(Tier): Free, Premium, Ultimate
  • 提供方式(Offering): GitLab 自托管

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

该日志系统:

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

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

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

日志级别

每条日志消息都有一个分配的日志级别,表示其重要性和详细程度。每个记录器都有一个分配的最小日志级别。只有当日志级别等于或高于最小日志级别时,记录器才会发出日志消息。

支持以下日志级别:

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

GitLab 记录器默认设置为 DEBUG,因此会发出所有日志消息。

覆盖默认日志级别

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

示例:

GITLAB_LOG_LEVEL=info

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

服务 日志级别 环境变量
GitLab Cleanup INFO DEBUG
GitLab Doctor INFO VERBOSE
GitLab Export INFO EXPORT_DEBUG
GitLab Import INFO IMPORT_DEBUG
GitLab QA Runtime INFO QA_LOG_LEVEL
GitLab Product Usage Data INFO
Google APIs INFO
Rack Timeout ERROR
Snowplow Tracker FATAL
gRPC Client (Gitaly) WARN GRPC_LOG_LEVEL
LLM INFO LLM_DEBUG

日志轮转

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

  • logrotate
  • svlogdrunit 的服务日志守护进程)
  • logrotatesvlogd
  • 或完全不进行管理

下表包含有关各服务日志管理和轮转责任的信息。由 svlogd 管理的日志 会写入一个名为 current 的文件。内置于 GitLab 的 logrotate 服务会 管理所有日志,除了被 runit 捕获的那些。

日志类型 由 logrotate 管理 由 svlogd/runit 管理
Alertmanager 日志 dotted-circle check-circle
crond 日志 dotted-circle check-circle
Gitaly check-circle check-circle
Linux 包安装的 GitLab Exporter dotted-circle check-circle
GitLab Pages 日志 check-circle check-circle
GitLab Rails check-circle dotted-circle
GitLab Shell 日志 check-circle dotted-circle
Grafana 日志 dotted-circle check-circle
LogRotate 日志 dotted-circle check-circle
Mailroom check-circle check-circle
NGINX check-circle check-circle
Patroni 日志 dotted-circle check-circle
PgBouncer 日志 dotted-circle check-circle
PostgreSQL 日志 dotted-circle check-circle
Praefect 日志 dotted-circle check-circle
Prometheus 日志 dotted-circle check-circle
Puma check-circle check-circle
Redis 日志 dotted-circle check-circle
Registry 日志 dotted-circle check-circle
Sentinel 日志 dotted-circle check-circle
Workhorse 日志 check-circle check-circle

在 Helm Chart 安装中访问日志

在 Helm Chart 安装中,GitLab 组件会将日志发送到 stdout,可通过 kubectl logs 访问。日志也会在 Pod 的生命周期内在 /var/log/gitlab 中可用。

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

一些 Pod 包含标识特定日志类型的 subcomponent 字段:

# Web服务 Pod 日志(Rails 应用)
kubectl logs -l app=webservice -c webservice | jq 'select(."subcomponent"=="<subcomponent-key>")'

# Sidekiq Pod 日志(后台任务)
kubectl logs -l app=sidekiq | jq 'select(."subcomponent"=="<subcomponent-key>")'

以下日志章节指明了适用的 Pod 和子组件键(如果适用)。

其他 Pod

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

要查找可用的 Pod 选择器:

# 列出所有使用的唯一 app 标签
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.labels.app}{"\n"}{end}' | grep -v '^$' | sort | uniq

# 对于带有 app 标签的 Pod
kubectl logs -l app=<pod-selector>

# 对于特定的 Pod(当 app 标签不可用时)
kubectl get pods
kubectl 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图表安装中,位于Web服务Pod下的 subcomponent="production_json" 键下。

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

每行包含JSON,可被Elasticsearch和Splunk等服务摄取。示例中添加了换行以提高可读性:

{
  "method":"GET",
  "path":"/gitlab/gitlab-foss/issues/1234",
  "format":"html",
  "controller":"Projects::IssuesController",
  "action":"show",
  "status":200,
  "time":"2017-08-08T20:15:54.821Z",
  "params":[{"key":"param_key","value":"param_value"}],
  "remote_ip":"18.245.0.1",
  "user_id":1,
  "username":"admin",
  "queue_duration_s":0.0,
  "gitaly_calls":16,
  "gitaly_duration_s":0.16,
  "redis_calls":115,
  "redis_duration_s":0.13,
  "redis_read_bytes":1507378,
  "redis_write_bytes":2920,
  "correlation_id":"O1SdybnnIq7",
  "cpu_s":17.50,
  "db_duration_s":0.08,
  "view_duration_s":2.39,
  "duration_s":20.54,
  "pid": 81836,
  "worker_id":"puma_0"
}

此示例是对特定问题的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_call_duration_s,分别对应:

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

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

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

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

{
  "method": "GET",
  "path": "/admin",
  "format": "html",
  "controller": "Admin::DashboardController",
  "action": "index",
  "status": 500,
  "time": "2019-11-14T13:12:46.156Z",
  "params": [],
  "remote_ip": "127.0.0.1",
  "user_id": 1,
  "username": "root",

{ “ua”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:70.0) Gecko/20100101 Firefox/70.0”, “queue_duration”: 274.35, “correlation_id”: “KjDVUhNvvV3”, “queue_duration_s”: 0.0, “gitaly_calls”: 16, “gitaly_duration_s”: 0.16, “redis_calls”: 115, “redis_duration_s”: 0.13, “correlation_id”: “O1SdybnnIq7”, “cpu_s”: 17.50, “db_duration_s”: 0.08, “view_duration_s”: 2.39, “duration_s”: 20.54, “pid”: 81836, “worker_id”: “puma_0”, “exception.class”: “NameError”, “exception.message”: “未定义的局部变量或方法 `adsf’,针对 #<管理::仪表板控制器:0x00007ff3c9648588>”, “exception.backtrace”: [ “app/controllers/admin/dashboard_controller.rb:11 中 index 方法”, “ee/app/controllers/ee/admin/dashboard_controller.rb:14 中 index 方法”, “ee/lib/gitlab/ip_address_state.rb:10 中 with 方法”, “ee/app/controllers/ee/application_controller.rb:43 中 set_current_ip_address 方法”, “lib/gitlab/session.rb:11 中 with_session 方法”, “app/controllers/application_controller.rb:450 中 set_session_storage 方法”, “app/controllers/application_controller.rb:444 中 set_locale 方法”, “ee/lib/gitlab/jira/middleware.rb:19 中 call 方法” ] }

production.log

此日志位于:

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

它包含有关所有执行请求的信息。你可以看到请求的 URL 和类型、IP 地址,以及处理此特定请求所涉及哪些代码部分。同时,你还可以看到所有执行的 SQL 查询及其耗时。此日志对 GitLab 贡献者和开发者更有用。报告问题时请使用此日志的一部分。例如:

Started GET "/gitlabhq/yaml_db/tree/master" for 168.111.56.1 at 2015-02-12 19:34:53 +0200
Processing by Projects::TreeController#show as HTML
  Parameters: {"project_id"=>"gitlabhq/yaml_db", "id"=>"master"}

  ... [CUT OUT]

  Namespaces"."created_at" DESC, "namespaces"."id" DESC LIMIT 1 [["id", 26]]
  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"]]
  CACHE (0.0ms) SELECT  "members".* FROM "members"  WHERE "members"."source_type" = 'Project' AND "members".
  (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]]
  Rendered layouts/nav/_project.html.haml (28.0ms)
  Rendered layouts/_collapse_button.html.haml (0.2ms)
  Rendered layouts/_flash.html.haml (0.1ms)
  Rendered layouts/_page.html.haml (32.9ms)
Completed 200 OK in 166ms (Views: 117.4ms | ActiveRecord: 27.2ms)

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

api_json.log

此日志位于:

  • 在 Linux 包安装中位于 /var/log/gitlab/gitlab-rails/api_json.log 文件。
  • 在自编译安装中位于 /home/git/gitlab/log/api_json.log 文件。
  • 在 Helm chart 安装中位于 Web 服务 Pod 下 subcomponent="api_json" 键对应的位置。

它帮助你查看直接发送到 API 的请求。例如:

{
  "time":"2018-10-29T12:49:42.123Z",
  "severity":"INFO",
  "duration":709.08,
  "db":14.59,
  "view":694.49,
  "status":200,
  "method":"GET",
  "path":"/api/v4/projects",
  "params":[{"key":"action","value":"git-upload-pack"},{"key":"changes","value":"_any"},{"key":"key_id","value":"secret"},{"key":"secret_token","value":"[FILTERED]"}],
  "host":"localhost",
  "remote_ip":"::1",
  "ua":"Ruby",
  "route":"/api/:version/projects",
  "user_id":1,
  "username":"root",
  "queue_duration":100.31,
  "gitaly_calls":30,
  "gitaly_duration":5.36,
  "pid": 81836,
  "worker_id": "puma_0",
  ...
}

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

  • duration:检索请求的总耗时(毫秒)
  • queue_duration:请求在 GitLab Workhorse 中排队等待的总耗时(毫秒)
  • method:发起请求使用的 HTTP 方法
  • path:查询的相对路径
  • params:以键值对形式传递的查询字符串或 HTTP 主体参数(敏感参数如密码和令牌会被过滤)
  • ua:请求者的 User-Agent

Grape Logging v1.8.4 版本起,view_duration_s 是通过 duration_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 日志的较少结构化版本,示例如下:

October 06, 2014 11:56: 用户 "Administrator" ([email protected]) 已创建
October 06, 2014 11:56: Documentcloud 创建了新项目 "Documentcloud / Underscore"
October 06, 2014 11:56: Gitlab Org 创建了新项目 "Gitlab Org / Gitlab Ce"
October 07, 2014 11:25: 用户 "Claudie Hodkiewicz" ([email protected]) 已移除
October 07, 2014 11:25: 项目 "project133" 已移除
## `application_json.log`

该日志位于:

- **Linux 包安装**:`/var/log/gitlab/gitlab-rails/application_json.log` 文件  
- **自编译安装**:`/home/git/gitlab/log/application_json.log` 文件  
- **Helm 图表安装**:Sidekiq 和 Webservice Pod 中,`subcomponent="application_json"` 键下  

它能帮你发现实例内发生的事件,如用户创建和项目删除。例如:

```json
{
  "severity":"INFO",
  "time":"2020-01-14T13:35:15.466Z",
  "correlation_id":"3823a1550b64417f9c9ed8ee0f48087e",
  "message":"用户 \"Administrator\" (admin@example.com) 已被创建"
}
{
  "severity":"INFO",
  "time":"2020-01-14T13:35:15.466Z",
  "correlation_id":"78e3df10c9a18745243d524540bd5be4",
  "message":"项目 \"project133\" 已被移除"
}

integrations_json.log

该日志位于:

  • Linux 包安装/var/log/gitlab/gitlab-rails/integrations_json.log 文件
  • 自编译安装/home/git/gitlab/log/integrations_json.log 文件
  • Helm 图表安装:Sidekiq 和 Webservice Pod 中,subcomponent="integrations_json" 键下

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

{
  "severity":"ERROR",
  "time":"2018-09-06T14:56:20.439Z",
  "service_class":"Integrations::Jira",
  "project_id":8,
  "project_path":"h5bp/html5-boilerplate",
  "message":"发送消息时出错",
  "client_url":"http://jira.gitlab.com:8080",
  "error":"执行超时"
}
{
  "severity":"INFO",
  "time":"2018-09-06T17:15:16.365Z",
  "service_class":"Integrations::Jira",
  "project_id":3,
  "project_path":"namespace2/project2",
  "message":"成功发布",
  "client_url":"http://jira.example.com"
}

kubernetes.log(已弃用)

该日志位于:

  • Linux 包安装/var/log/gitlab/gitlab-rails/kubernetes.log 文件
  • 自编译安装/home/git/gitlab/log/kubernetes.log 文件
  • Helm 图表安装: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 图表安装:Sidekiq Pod 中,subcomponent="git_json" 键下

GitLab 需要与 Git 仓库交互,但在极少数情况下可能出现问题。若发生此类情况,你需要确切了解发生了什么。此日志文件包含 GitLab 向 Git 仓库发出的所有失败请求。大多数情况下,该文件仅对开发者有用。例如:

{
   "severity":"ERROR",
   "time":"2019-07-19T22:16:12.528Z",
   "correlation_id":"FeGxww5Hj64",
   "message":"命令失败 [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: 无法推送一些引用到 '/Users/vsizov/gitlab-development-kit/repositories/gitlabhq/gitlab_git.git'"
}

audit_json.log

  • 层级:Free、Premium、Ultimate
  • 提供:GitLab 自托管、GitLab 专用

GitLab Free 仅跟踪少量不同审计事件。
GitLab Premium 跟踪更多事件。

该日志位于:

  • Linux 包安装/var/log/gitlab/gitlab-rails/audit_json.log 文件
  • 自编译安装/home/git/gitlab/log/audit_json.log 文件
  • Helm 图表安装:Sidekiq 和 Webservice Pod 中,subcomponent="audit_json" 键下

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

{
  "severity":"INFO",
  "time":"2018-10-17T17:38:22.523Z",
  "author_id":3,
  "entity_id":2,
  "entity_type":"Project",
  "change":"visibility",
  "from":"Private",
  "to":"Public",
  "author_name":"John Doe4",
  "target_id":2,
  "target_type":"Project",
  "target_details":"namespace2/project2"
}

Sidekiq 日志

对于 Linux 包安装,部分 Sidekiq 日志位于 /var/log/gitlab/sidekiq/current 及以下位置。


### `sidekiq.log`

该日志位于: - Linux 包安装中的 `/var/log/gitlab/sidekiq/current` 文件。 - 自编译安装中的 `/home/git/gitlab/log/sidekiq.log` 文件。 GitLab 使用后台任务来处理可能耗时较长的任务。所有关于这些任务处理的信息都会写入此文件。例如: ```json { "severity":"INFO", "time":"2018-04-03T22:57:22.071Z", "queue":"cronjob:update_all_mirrors", "args":[], "class":"UpdateAllMirrorsWorker", "retry":false, "queue_namespace":"cronjob", "jid":"06aeaa3b0aadacf9981f368e", "created_at":"2018-04-03T22:57:21.930Z", "enqueued_at":"2018-04-03T22:57:21.931Z", "pid":10077, "worker_id":"sidekiq_0", "message":"UpdateAllMirrorsWorker JID-06aeaa3b0aadacf9981f368e: done: 0.139 sec", "job_status":"done", "duration":0.139, "completed_at":"2018-04-03T22:57:22.071Z", "db_duration":0.05, "db_duration_s":0.0005, "gitaly_duration":0, "gitaly_calls":0 }

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

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

对于 Linux 包安装,添加以下配置选项:

sidekiq['log_format'] = 'text'

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

  ## 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 安装中 Web 服务 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 的示例日志条目:

{
  "duration_ms": 74.104,
  "level": "info",
  "method": "POST",
  "msg": "Finished HTTP request",
  "time": "2020-04-17T20:28:46Z",
  "url": "http://127.0.0.1:8080/api/v4/internal/allowed"
}
{
  "command": "git-upload-pack",
  "git_protocol": "",
  "gl_project_path": "root/example",
  "gl_repository": "project-1",
  "level": "info",
  "msg": "executing git command",
  "time": "2020-04-17T20:28:46Z",
  "user_id": "user-1",
  "username": "root"
}

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

{
  "method": "POST",
  "url": "http://127.0.0.1:8080/api/v4/internal/allowed",
  "duration": 0.058012959,
  "gitaly_embedded": true,
  "pid": 16636,
  "level": "info",
  "msg": "finished HTTP request",
  "time": "2020-04-17T20:29:08+00:00"
}
{
  "method": "POST",
  "url": "http://127.0.0.1:8080/api/v4/internal/pre_receive",
  "duration": 0.031022552,
  "gitaly_embedded": true,
  "pid": 16636,
  "level": "info",
  "msg": "finished HTTP request",
  "time": "2020-04-17T20:29:08+00:00"
}

Gitaly 日志

该文件位于 /var/log/gitlab/gitaly/current,由 runit 生成。runit 随 Linux 软件包一起打包,其用途的简要说明可在 Linux 软件包文档 中找到。日志文件会被轮转,以 Unix 时间戳格式重命名,并使用 gzip 压缩(例如 @1584057562.s)。

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 文件。

每当对项目运行 仓库检查 时,它会记录信息。

importer.log

此日志的位置:

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

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

exporter.log

此日志的位置:

  • 在 Linux 软件包安装中,位于 /var/log/gitlab/gitlab-rails/exporter.log 文件。
  • 在自编译安装中,位于 /home/git/gitlab/log/exporter.log 文件。
  • 在 Helm 图表安装中,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 图表安装中,Sidekiq 和 Webservice Pod 下带有 subcomponent="features_json" 键的位置。

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

{"severity":"INFO","time":"2020-11-24T02:30:59.860Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"true"}
{"severity":"INFO","time":"2020-11-24T02:31:29.108Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"true"}
{"severity":"INFO","time":"2020-11-24T02:31:29.129Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable","extra.thing":"false"}
{"severity":"INFO","time":"2020-11-24T02:31:29.177Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"Project:1"}
{"severity":"INFO","time":"2020-11-24T02:31:29.183Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable","extra.thing":"Project:1"}
{"severity":"INFO","time":"2020-11-24T02:31:29.188Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable_percentage_of_time","extra.percentage":"50"}
{"severity":"INFO","time":"2020-11-24T02:31:29.193Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable_percentage_of_time"}
{"severity":"INFO","time":"2020-11-24T02:31:29.198Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable_percentage_of_actors","extra.percentage":"50"}
{"severity":"INFO","time":"2020-11-24T02:31:29.203Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable_percentage_of_actors"}
{"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图表安装中,位于带有 subcomponent="ci_resource_groups_json" 键的 Sidekiq 和 Webservice pod 下。

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

{"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图表安装中,位于带有 subcomponent="auth_json" 键的 Sidekiq 和 Webservice pod 下。

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

{
    "severity":"ERROR",
    "time":"2023-04-19T22:14:25.893Z",
    "correlation_id":"01GYDSAKAN2SPZPAMJNRWW5H8S",
    "message":"Rack_Attack",
    "env":"blocklist",
    "remote_ip":"x.x.x.x",
    "request_method":"GET",
    "path":"/group/project.git/info/refs?service=git-upload-pack"
}

graphql_json.log

此日志位于:

  • 在Linux包安装中,位于 /var/log/gitlab/gitlab-rails/graphql_json.log 文件。
  • 在自编译安装中,位于 /home/git/gitlab/log/graphql_json.log 文件。
  • 在Helm图表安装中,位于带有 subcomponent="graphql_json" 键的 Sidekiq 和 Webservice pod 下。

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

{"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 文件。
  • 在Helm图表安装中,位于带有 subcomponent="clickhouse" 键的 Sidekiq 和 Webservice pod 下。

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 的回退、禁用和重新启用事件会记录在此文件中。例如:

{"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

  • 层级:Premium、Ultimate
  • 版本:GitLab Self-Managed

包含 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

  • 层级:Premium、Ultimate
  • 版本:GitLab Self-Managed

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

此日志位于:

  • Linux 包安装中:/var/log/gitlab/gitlab-rails/zoekt.log 文件。
  • 自编译安装中:/home/git/gitlab/log/zoekt.log 文件。
  • Helm Chart 安装中:Sidekiq 和 Webservice Pod 下 subcomponent="zoekt" 键对应的位置。

elasticsearch.log

  • 层级:Premium、Ultimate
  • 版本:GitLab Self-Managed

此文件记录与 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。以下示例行为清晰起见添加了换行:

{
  "severity":"DEBUG",
  "time":"2019-10-17T06:23:13.227Z",
  "correlation_id":null,
  "message":"redacted_search_result",
  "class_name":"Milestone",
  "id":2,
  "ability":"read_milestone",
  "current_user_id":2,
  "query":"project"
}

exceptions_json.log

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

该日志位于:

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

每行包含可被Elasticsearch摄取的JSON。例如:

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

service_measurement.log

该日志位于:

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

它仅包含每个服务执行的单个结构化日志,包含诸如SQL调用次数、execution_timegc_stats内存使用量等测量数据。

例如:

{ "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

  • 层级:Premium, Ultimate
  • 提供:GitLab 自托管

该日志位于:

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

此文件包含有关Geo尝试同步仓库和文件的信息。文件中的每一行都包含一个独立的JSON条目,可以导入(例如,Elasticsearch或Splunk)。

例如:

{"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 图表安装中,Sidekiq Pod 的 subcomponent="update_mirror_service_json" 键下。

此文件包含项目镜像过程中发生的 LFS 错误信息。 在我们努力将其他项目镜像错误移至此日志的同时,也可以使用 通用日志

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

llm.log

  • 层级: Premium, Ultimate
  • 提供: GitLab.com, GitLab 自托管, GitLab Dedicated

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

LLM 输入和输出日志

此功能的可用性由功能标志控制。 有关更多信息,请参阅历史记录。 此功能可用于测试,但尚未准备好用于生产环境。

要记录 LLM 提示词输入和响应输出,需启用 expanded_ai_logging 功能标志。此标志仅适用于 GitLab.com,不适用于 GitLab 自托管实例。

该标志默认禁用,只能在以下情况下启用:

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

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

该日志文件位于:

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

epic_work_item_sync.log

  • 层级: Premium, Ultimate
  • 提供: GitLab.com, GitLab Dedicated

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

该日志位于:

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

secret_push_protection.log

  • 层级: Ultimate
  • 提供: GitLab.com, GitLab Dedicated

secret_push_protection.log 文件记录与 Secret Push Protection 功能相关的信息。

该日志位于:

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

active_context.log

  • 层级:Premium, Ultimate
  • 提供:GitLab.com, GitLab Self-Managed

active_context.log 文件记录与通过 ActiveContext 嵌入管道相关的信息。

GitLab 支持 ActiveContext 代码嵌入。
此管道负责项目代码文件的嵌入生成。
更多信息请参阅 架构设计

该日志位于:

  • Linux 包安装中 /var/log/gitlab/gitlab-rails/active_context.log 文件。
  • 自编译安装中 /home/git/gitlab/log/active_context.log 文件。
  • Helm 图表安装中 Sidekiq Pod 下 subcomponent="activecontext" 键下。

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 访问日志格式:

'$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

例如:

{
  "level": "info",
  "msg": "GitLab Pages Daemon",
  "revision": "52b2899",
  "time": "2020-04-22T17:53:12Z",
  "version": "1.17.0"
}
{
  "level": "info",
  "msg": "URL: https://gitlab.com/gitlab-org/gitlab-pages",
  "time": "2020-04-22T17:53:12Z"
}
{
  "gid": 998,
  "in-place": false,
  "level": "info",
  "msg": "running the daemon as unprivileged user",
  "time": "2020-04-22T17:53:12Z",
  "uid": 998
}

产品使用数据日志

我们不建议使用原始日志来分析功能使用情况,因为数据质量尚未经过准确性认证。

事件列表可能会在每个版本中发生变化,这取决于新功能或现有功能的变更。在数据准备好进行分析后,会提供经过认证的产品采用报告。

该日志位于以下位置:

  • 在 Linux 包安装的 /var/log/gitlab/gitlab-rails/product_usage_data.log 文件中。
  • 在自编译安装的 /home/git/gitlab/log/product_usage_data.log 文件中。
  • 在 Helm 图表安装的 Web 服务 Pod 下,键为 subcomponent="product_usage_data" 的位置。

它包含通过 Snowplow 跟踪的产品使用事件的 JSON 格式日志。文件中的每一行都包含一个独立的 JSON 条目,可被 Elasticsearch 或 Splunk 等服务摄取。示例中添加了换行以提高可读性:

{
  "severity":"INFO",
  "time":"2025-04-09T13:43:40.254Z",
  "message":"sending event",
  "payload":"{
  \"e\":\"se\",
  \"se_ca\":\"projects:merge_requests:diffs\",
  \"se_ac\":\"i_code_review_user_searches_diff\",
  \"cx\":\"eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0xIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uZ2l0bGFiL2dpdGxhYl9zdGFuZGFyZC9qc29uc2NoZW1hLzEtMS0xIiwiZGF0YSI6eyJlbnZpcm9ubWVudCI6ImRldmVsb3BtZW50Iiwic291cmNlIjoiZ2l0bGFiLXJhaWxzIiwiY29ycmVsYXRpb25faWQiOiJlNDk2NzNjNWI2MGQ5ODc0M2U4YWI0MjZiMTZmMTkxMiIsInBsYW4iOiJkZWZhdWx0IiwiZXh0cmEiOnt9LCJ1c2VyX2lkIjpudWxsLCJnbG9iYWxfdXNlcl9pZCI6bnVsbCwiaXNfZ2l0bGFiX3RlYW1fbWVtYmVyIjpudWxsLCJuYW1lc3BhY2VfaWQiOjMxLCJwcm9qZWN0X2lkIjo2LCJmZWF0dXJlX2VuYWJsZWRfYnlfbmFtZXNwYWNlX2lkcyI6bnVsbCwicmVhbG0iOiJzZWxmLW1hbmFnZWQiLCJpbnN0YW5jZV9pZCI6IjJkMDg1NzBkLWNmZGItNDFmMy1iODllLWM3MTM5YmFjZTI3NSIsImhvc3RfbmFtZSI6ImpsYXJzZW4tLTIwMjIxMjE0LVBWWTY5IiwiaW5zdGFuY2VfdmVyc2lvbiI6IjE3LjExLjAiLCJjb250ZXh0X2dlbmVyYXRlZF9hdCI6IjIwMjUtMDQtMDkgMTM6NDM6NDAgVVRDIn19LHsic2NoZW1hIjoiaWdsdTpjb20uZ2l0bGFiL2dpdGxhYl9zZXJ2aWNlX3BpbmcvanNvbnNjaGVtYS8xLTAtMSIsImRhdGEiOnsiZGF0YV9zb3VyY2UiOiJyZWRpc19obGwiLCJldmVudF9uYW1lIjoiaV9jb2RlX3Jldmlld191c2VyX3NlYXJjaGVzX2RpZmYifX1dfQ==\",
  \"p\":\"srv\",
  \"dtm\":\"1744206220253\",
  \"tna\":\"gl\",
  \"tv\":\"rb-0.8.0\",
  \"eid\":\"4f067989-d10d-40b0-9312-ad9d7355be7f\"
}

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

gitlab-rake "product_usage_data:format[log/product_usage_data.log]"

# 或直接管道传输日志
cat log/product_usage_data.log | gitlab-rake product_usage_data:format

# 或实时追踪日志
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

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 导出器

对于 Linux 包安装,GitLab 导出器的日志位于 /var/log/gitlab/gitlab-exporter/current

GitLab 用于 Kubernetes 的代理服务器

对于 Linux 包安装,GitLab 用于 Kubernetes 的代理服务器的日志位于 /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 图表安装中,备份日志存储在工具箱 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 图表安装中,位于 Sidekiq Pod 下,键名为 subcomponent="performance_bar_json"

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

{"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"}

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

收集日志

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

GitLab 支持团队经常索要其中之一,并维护所需的工具。

简要查看主日志

如果错误或缺陷易于重现,请在重现问题时几次将主要 GitLab 日志 保存到文件

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。