日志系统

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署

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

日志系统:

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

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

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

日志级别#

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

支持以下日志级别:

LevelName
0DEBUG
1INFO
2WARN
3ERROR
4FATAL
5UNKNOWN

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

覆盖默认日志级别#

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

示例:

shell
GITLAB_LOG_LEVEL=info

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

ServiceLog levelEnvironment variable
GitLab CleanupINFODEBUG
GitLab DoctorINFOVERBOSE
GitLab ExportINFOEXPORT_DEBUG
GitLab ImportINFOIMPORT_DEBUG
GitLab QA RuntimeINFOQA_LOG_LEVEL
Google APIsINFO
Rack TimeoutERROR
Snowplow TrackerFATAL
gRPC Client (Gitaly)WARNGRPC_LOG_LEVEL
LLMINFOLLM_DEBUG

日志轮换#

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

  • logrotate
  • svlogd (runit 的服务日志守护程序)
  • logrotatesvlogd
  • 或者根本不进行管理

下表包括有关负责管理和轮换所包含服务日志的信息。svlogd 管理的日志 被写入名为 current 的文件。极狐GitLab 内置的 logrotate 服务管理所有日志,但 runit 捕获的日志除外。

Log typeManaged by logrotateManaged by svlogd/runit
Alertmanager logs No Yes
crond logs No Yes
Gitaly Yes Yes
GitLab Exporter for Linux package installations No Yes
GitLab Pages logs Yes Yes
GitLab Rails Yes No
GitLab Shell logs Yes No
Grafana logs No Yes
LogRotate logs No Yes
Mailroom Yes Yes
NGINX Yes Yes
PgBouncer logs No Yes
PostgreSQL logs No Yes
Praefect logs Yes Yes
Prometheus logs No Yes
Puma Yes Yes
Redis logs No Yes
Registry logs No Yes
Workhorse logs Yes Yes

production_json.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/production_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/production_json.log 在自编译安装上。

它包含来自极狐GitLab 的 Rails 控制器请求的结构化日志。来自 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_call_duration_s,它们对应于:

  • elasticsearch_calls: 对 Elasticsearch 的总调用次数
  • elasticsearch_duration_s: Elasticsearch 调用所用的总时间
  • elasticsearch_timed_out_count: 对 Elasticsearch 的调用总数,其中超时并因此返回部分结果

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#

此文件位于:

  • /var/log/gitlab/gitlab-rails/production.log 在 Linux 软件包安装上。
  • /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)

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

api_json.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/api_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/api_json.log 在自编译安装上。

它帮助您查看直接向 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_s 是通过 duration_s - db_duration_s 计算得出的。因此,view_duration_s 可能会受到多种不同因素的影响,例如 Redis 上的读写过程或外部 HTTP,而不仅仅是序列化过程。

application.log(已弃用)#

History
    • 在极狐GitLab 15.10 中弃用。

此文件位于:

  • /var/log/gitlab/gitlab-rails/application.log 在 Linux 软件包安装上。
  • /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#

此文件位于:

  • /var/log/gitlab/gitlab-rails/application_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/application_json.log 在自编译安装上。

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

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#

此文件位于:

  • /var/log/gitlab/gitlab-rails/integrations_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/integrations_json.log 在自编译安装上。

它包含有关集成活动的信息,例如 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(已弃用)#

History
    • 在极狐GitLab 14.5 中弃用。

此文件位于:

  • /var/log/gitlab/gitlab-rails/kubernetes.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/kubernetes.log 在自编译安装上。

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

git_json.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/git_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/git_json.log 在自编译安装上。

极狐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: Free, Premium, Ultimate
  • Offering: JihuLab.com, GitLab Self-Managed, GitLab Dedicated

极狐GitLab 基础版跟踪的审计事件类型较少。极狐GitLab 专业版跟踪的类型更多。

此文件位于:

  • /var/log/gitlab/gitlab-rails/audit_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/audit_json.log 在自编译安装上。

对群组或项目设置和成员资格 (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#

History
    • 在极狐GitLab 16.0 及更高版本中,Helm 图安装的默认日志格式从 text 更改为 json

此文件位于:

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

极狐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#

此文件位于:

  • /var/log/gitlab/gitlab-rails/sidekiq_client.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/sidekiq_client.log 在自编译安装上。

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

此日志文件遵循与 sidekiq.log 相同的结构,因此如果您为 Sidekiq 配置了此日志文件,如上所述,则它是 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 软件包文档中提供了其目的的简要说明。日志文件会被轮换,按 Unix 时间戳格式重命名,并使用 gzip 压缩(如 @1584057562.s)。

grpc.log#

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

gitaly_hooks.log#

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

Puma 日志#

puma_stdout.log#

此文件位于:

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

puma_stderr.log#

此文件位于:

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

repocheck.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/repocheck.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/repocheck.log 在自编译安装上。

它记录了在项目上运行仓库检查时的信息。

importer.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/importer.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/importer.log 在自编译安装上。

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

exporter.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/exporter.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/exporter.log 在自编译安装上。

它记录了导出过程的进度。

features_json.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/features_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/features_json.log 在自编译安装上。

来自极狐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#

History
    • 在极狐GitLab 15.9 中引入。

此文件位于:

  • /var/log/gitlab/gitlab-rails/ci_resource_group_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/ci_resource_group_json.log 在自编译安装上。

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

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#

此文件位于:

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

此日志记录:

auth_json.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/auth_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/auth_json.log 在自编译安装上。

此文件包含 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#

此文件位于:

  • /var/log/gitlab/gitlab-rails/graphql_json.log 在 Linux 软件包安装上。
  • /home/git/gitlab/log/graphql_json.log 在自编译安装上。

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#

History
    • 在极狐GitLab 16.5 中引入。

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

migrations.log#

此文件位于:

  • /var/log/gitlab/gitlab-rails/migrations.log 在 Linux 软件包安装上。
  • /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#

History
    • 在极狐GitLab 16.3 中引入。

此文件位于:

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

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#

  • 层级:专业版,旗舰版
  • 提供:极狐GitLab私有化部署

包含极狐GitLab 数据库负载均衡 的详细信息。此文件位于:

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

zoekt.log#

  • 层级:专业版,旗舰版
  • 提供:极狐GitLab私有化部署
History
    • 在极狐GitLab 15.9 中引入。

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

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

elasticsearch.log#

  • 层级:专业版,旗舰版
  • 提供:极狐GitLab私有化部署

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

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

每行包含可以被 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

每行包含可以被 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

它仅包含每个服务执行的测量结果的单个结构化日志。它包含诸如 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#

  • 层级:专业版,旗舰版
  • 提供:私有化部署

Geo 将结构化日志消息存储在 geo.log 文件中。对于 Linux 软件包安装,此文件位于 /var/log/gitlab/gitlab-rails/geo.log

对于 Helm chart 安装,它存储在 Sidekiq pod 中,位于 /var/log/gitlab/geo.log。可以通过直接访问文件,或者使用 kubectl 获取 Sidekiq 日志,然后通过 "subcomponent"=="geo" 过滤结果来读取。下面的示例使用 jq 仅获取 Geo 日志:

shell
kubectl logs -l app=sidekiq --max-log-requests=50 | jq 'select(."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

此文件包含在项目镜像过程中发生的 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#

  • 层级:专业版,旗舰版
  • 提供:JihuLab.com、私有化部署
History
    • 在极狐GitLab 16.0 中引入。

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

LLM 输入和输出日志#

History
    • 在极狐GitLab 17.2 中引入,使用名为 expanded_ai_logging功能标志。默认禁用。

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

通过启用 expanded_ai_logging 功能标志,可以记录 LLM 提示输入和响应输出。默认情况下,此标志被禁用。

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

日志文件位于:

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

epic_work_item_sync.log#

  • 层级:专业版,旗舰版
  • 提供:JihuLab.com、极狐GitLab私有化部署、极狐GitLab专用
History
    • 在极狐GitLab 16.9 中引入。

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

secret_push_protection.log#

  • 层级:旗舰版
  • 提供:JihuLab.com、极狐GitLab专用
History
    • 在极狐GitLab 16.7 中引入。

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

此文件位于:

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

注册表日志#

对于 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://jihulab.com/gitlab-cn/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}

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

PgBouncer 日志#

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

PostgreSQL 日志#

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

Prometheus 日志#

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

Redis 日志#

对于 Linux 软件包安装,Redis 日志位于 /var/log/gitlab/redis/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 Exporter#

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

极狐GitLab 代理服务器#

对于 Linux 软件包安装,极狐GitLab 代理服务器日志位于 /var/log/gitlab/gitlab-kas/current

Praefect 日志#

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

极狐GitLab 还跟踪 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

性能栏统计(目前仅为 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"}

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

收集日志#

故障排除未局限于列出的某个组件的问题时,最好同时从极狐GitLab 实例中收集多个日志和统计数据。

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

简要查看主要日志#

如果 bug 或错误易于重现,则在重现问题几次的同时,将主要的极狐GitLab 日志保存到文件

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

使用 Control + C 结束日志收集。

GitLabSOS#

如果出现无法轻易归因于列出的某个极狐GitLab 组件的性能下降或级联错误,GitLabSOS 可以提供极狐GitLab 实例的更广泛视角。

Fast-stats#

Fast-stats 是一种从极狐GitLab 日志中创建和比较性能统计的工具。

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

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