日志系统
- 层级(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 记录器的最小日志级别。有效值可以是 0 到 5 之间的数值,也可以是日志级别的名称。
示例:
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 |
日志轮转
给定服务的日志可以通过以下方式管理和轮转:
logrotatesvlogd(runit的服务日志守护进程)logrotate和svlogd- 或完全不进行管理
下表包含有关各服务日志管理和轮转责任的信息。由 svlogd 管理的日志 会写入一个名为 current 的文件。内置于 GitLab 的 logrotate 服务会 管理所有日志,除了被 runit 捕获的那些。
| 日志类型 | 由 logrotate 管理 | 由 svlogd/runit 管理 |
|---|---|---|
| Alertmanager 日志 | 否 | 是 |
| crond 日志 | 否 | 是 |
| Gitaly | 是 | 是 |
| Linux 包安装的 GitLab Exporter | 否 | 是 |
| GitLab Pages 日志 | 是 | 是 |
| GitLab Rails | 是 | 否 |
| GitLab Shell 日志 | 是 | 否 |
| Grafana 日志 | 否 | 是 |
| LogRotate 日志 | 否 | 是 |
| Mailroom | 是 | 是 |
| NGINX | 是 | 是 |
| Patroni 日志 | 否 | 是 |
| PgBouncer 日志 | 否 | 是 |
| PostgreSQL 日志 | 否 | 是 |
| Praefect 日志 | 是 | 是 |
| Prometheus 日志 | 否 | 是 |
| Puma | 是 | 是 |
| Redis 日志 | 否 | 是 |
| Registry 日志 | 否 | 是 |
| Sentinel 日志 | 否 | 是 |
| Workhorse 日志 | 是 | 是 |
在 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_calls和elasticsearch_call_duration_s,分别对应:
elasticsearch_calls:对Elasticsearch的总调用次数elasticsearch_duration_s:Elasticsearch调用所花费的总时间elasticsearch_timed_out_count:因超时而返回部分结果的Elasticsearch调用总次数
ActionCable连接和订阅事件也会记录到此文件中,并遵循之前的格式。method、path和format字段不适用,始终为空。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字段,其中包含class、message和backtrace。早期版本包含一个error字段,而不是exception.class和exception.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 fetch 或 git 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: textsidekiq_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_id、processable_id、message 和 success 字段。
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.log 和 web_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_time、gc_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。