日志系统
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
极狐GitLab 中的日志系统提供了全面的日志记录和监控功能,用于分析您的极狐GitLab 实例。您可以使用日志来识别系统问题、调查安全事件以及分析应用程序性能。每个操作都有一个日志条目,因此当出现问题时,这些日志提供了快速诊断和解决问题所需的数据。
日志系统:
- 在结构化日志文件中跟踪极狐GitLab 组件的所有应用程序活动。
- 以标准化格式记录性能指标、错误和安全事件。
- 通过 JSON 日志与 Elasticsearch 和 Splunk 等日志分析工具集成。
- 为不同的极狐GitLab 服务和组件维护单独的日志文件。
- 包含关联 ID,以便在整个系统中跟踪请求。
系统日志文件通常是标准日志文件格式的纯文本。
日志系统类似于 审计事件。有关更多信息,请参见:
日志级别
每个日志消息都有一个指示其重要性和详细程度的日志级别。每个记录器都有一个分配的最低日志级别。记录器仅在其日志级别等于或高于最低日志级别时才发出日志消息。
支持以下日志级别:
Level | Name |
---|---|
0 | DEBUG |
1 | INFO |
2 | WARN |
3 | ERROR |
4 | FATAL |
5 | UNKNOWN |
极狐GitLab 记录器会发出所有日志消息,因为它们默认设置为 DEBUG。
覆盖默认日志级别
您可以使用 GITLAB_LOG_LEVEL 环境变量覆盖极狐GitLab 记录器的最低日志级别。有效值为 0 到 5 的值或日志级别的名称。
示例:
shellGITLAB_LOG_LEVEL=info
对于某些服务,存在其他日志级别不受此设置影响。这些服务中的一些有自己的环境变量来覆盖日志级别。例如:
Service | Log level | Environment variable |
---|---|---|
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 |
Google APIs | INFO | |
Rack Timeout | ERROR | |
Snowplow Tracker | FATAL | |
gRPC Client (Gitaly) | WARN | GRPC_LOG_LEVEL |
LLM | INFO | LLM_DEBUG |
日志轮换
给定服务的日志可以通过以下方式管理和轮换:
- logrotate
- svlogd (runit 的服务日志守护程序)
- logrotate 和 svlogd
- 或者根本不进行管理
下表包括有关负责管理和轮换所包含服务日志的信息。由 svlogd 管理的日志 被写入名为 current 的文件。极狐GitLab 内置的 logrotate 服务管理所有日志,但 runit 捕获的日志除外。
Log type | Managed by logrotate | Managed 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。为了可读性,示例中添加了换行符:
json1{ 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_calls 和 elasticsearch_call_duration_s,它们对应于:
- elasticsearch_calls: 对 Elasticsearch 的总调用次数
- elasticsearch_duration_s: Elasticsearch 调用所用的总时间
- elasticsearch_timed_out_count: 对 Elasticsearch 的调用总数,其中超时并因此返回部分结果
ActionCable 连接和订阅事件也记录在此文件中,并遵循之前的格式。method、path 和 format 字段不适用,并且始终为空。ActionCable 连接或通道类用作 controller。
json1{ 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 字段将包含 class、message 和 backtrace。以前的版本中包含一个 error 字段,而不是 exception.class 和 exception.message。例如:
json1{ 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 贡献者和开发人员更有用。在报告错误时,请使用此日志文件的一部分。例如:
plaintext1Started 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.1 在 2015-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 发出的请求。例如:
json1{ 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 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(已弃用)
History
- 在极狐GitLab 15.10 中弃用。
此文件位于:
- /var/log/gitlab/gitlab-rails/application.log 在 Linux 软件包安装上。
- /home/git/gitlab/log/application.log 在自编译安装上。
它包含日志的较不结构化版本,如 application_json.log 中的示例:
plaintextOctober 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 在自编译安装上。
它帮助您发现实例中发生的事件,例如用户创建和项目删除。例如:
json1{ 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 格式,如以下示例:
json1{ 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 仓库的所有失败请求。在大多数情况下,此文件仅对开发人员有用。例如:
json1{ 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) 的更改会记录到此文件。例如:
json1{ 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 使用后台作业来处理可能需要很长时间的任务。关于处理这些作业的所有信息都会写入此文件。例如:
json1{ 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 生成文本日志。例如:
plaintext12023-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 软件包安装,添加配置选项:
rubysidekiq['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 的示例日志条目:
json1{ 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 的示例日志条目:
json1{ 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 开发中的功能标志的修改事件记录在此文件中。例如:
json1{"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_id、processable_id、message 和 success 字段。
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 版本,例如:
json1{ 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.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
- 层级:专业版,旗舰版
- 提供:极狐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。为了清晰起见,以下示例行已添加换行符:
json1{ 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。例如:
json1{ 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_time、gc_stats 和 memory 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 日志:
shellkubectl 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 错误的信息。我们正在努力将其他项目镜像错误移至此日志中,可以使用通用日志。
json1{ 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。
例如:
json1{ 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 日志保存到文件:
shellsudo gitlab-ctl tail | tee /tmp/<case-ID-and-keywords>.log
使用 Control + C 结束日志收集。
GitLabSOS
如果出现无法轻易归因于列出的某个极狐GitLab 组件的性能下降或级联错误,GitLabSOS 可以提供极狐GitLab 实例的更广泛视角。
Fast-stats
Fast-stats 是一种从极狐GitLab 日志中创建和比较性能统计的工具。
使用关联 ID 查找相关日志条目
大多数请求都有一个日志 ID,可用于查找相关日志条目。