Перейти к содержанию

Система логирования

Платформа обладает развитой системой логирования, что при необходимости позволяет анализировать различные аспекты ее работы.

Системные логи обычно представляют собой файлы в обычном текстовом формате.

Уровни логов

Каждое сообщение имеет свой уровень, который указывает на его важность подробность. Каждому регистратору соответствует минимальный уровень логов. Регистратор генерирует сообщение только в том случае, если его минимальный уровень соответствует или превышает минимальный уровень лога.

Поддерживаются следующие уровни логов:

Уровень Название
0 DEBUG
1 INFO
2 WARN
3 ERROR
4 FATAL
5 UNKNOWN

Регистраторы системы генерируют все сообщения логов, поскольку для них установлен уровень логирования DEBUG.

Переопределение уровня логов по умолчанию

Предусмотрена возможность переопределения уровня логов для регистраторов Системы с помощью переменной среды GITLAB_LOG_LEVEL. Валидными являются значения от 0 до 5 или соответствующие названия уровней.

Например:

GITLAB_LOG_LEVEL=info

Для некоторых сервисов предусмотрены другие уровни логов, на которые данные настройки не оказывают влияния. Для некоторых этих сервисов предусмотрены свои переменные среды, позволяющие переопределить уровень логов. Например:

Сервис Уровень логов Переменная среды
AppSec.Code API INFO  
AppSec.Code Cleanup INFO DEBUG
AppSec.Code Doctor INFO VERBOSE
AppSec.Code Export INFO EXPORT_DEBUG
AppSec.Code Geo INFO  
AppSec.Code Import INFO IMPORT_DEBUG
AppSec.Code QA Runtime INFO QA_LOG_LEVEL
Google APIs INFO  
Rack Timeout ERROR  
Sidekiq (server) INFO  
Snowplow Tracker FATAL  
gRPC Client (Gitaly) WARN GRPC_LOG_LEVEL
LLM INFO LLM_DEBUG

Ротация логов

Логирование и обеспечение ротации логов для данных сервисов может осуществляться следующими сервисами:

  • logrotate;
  • svlogd (сервис ведения логов runit);
  • logrotate и svlogd;
  • или никаким.

В следующей таблице приведена информация о том, кто отвечает за ведение и ротацию логов для включенных сервисов. Логи, управляемые svlogd, записываются в файл под названием current. Встроенный сервис logrotate управляет всеми логами, кроме тех, которые перехватывает runit.

Тип логов Управляется
logrotate
Управляется
svlogd/runit
Alertmanager logs Нет Да
crond logs Нет Да
Gitaly Да Да
AppSec.Code Exporter for Linux package installations Нет Да
AppSec.Code Pages logs Да Да
AppSec.Code Rails Да Нет
AppSec.Code Shell logs Да Нет
Grafana logs Нет Да
LogRotate logs Нет Да
Mailroom Да Да
NGINX Да Да
PgBouncer logs Нет Да
PostgreSQL logs Нет Да
Praefect logs Да Да
Prometheus logs Нет Да
Puma Да Да
Redis logs Нет Да
Registry logs Нет Да
Workhorse logs Да Да

production_json.log

Расположение:

  • /var/log/gitlab/gitlab-rails/production_json.log при установке с помощью Linux-пакета.
  • /home/git/gitlab/log/production_json.log на самокомпилирующихся установках.

Он содержит структурированный лог запросов к контроллеру 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-запрос определенной Issue. Каждая строка также содержит данные о производительности с указанием времени в секундах:

  • duration_s: общее время извлечения запроса;
  • queue_duration_s: общее время нахождения запроса в очереди GitLab Workhorse;
  • view_duration_s: общее время работы с представлениями в Rails;
  • db_duration_s: общее время извлечения запроса из PostgreSQL;
  • cpu_s: общие затраты процессорного времени;
  • 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 (изменяется при перезапуске рабочего процесса).

Действия пользователя по клонированию (clone) и выборке (fetch) с использованием HTTP-транспорта отображаются в логе как действие: git_upload_pack.

Кроме того, в логе указывается IP-адрес источника (remote_ip), идентификатор пользователя (us-er_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 не применяются — они всегда остаются пустыми. В качестве controller используется класс соединения или канала ActionCable.

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

production.log

Данный файл располагается в директории:

  • /var/log/gitlab/gitlab-rails/production.log при установке в качестве пакета Linux.
  • /home/git/gitlab/log/production.log на самокомпилирующихся установках.

Он содержит информацию о все выполненных запросах. Можно просмотреть URL и тип запроса, IP-address и какие части кода были задействованы для обслуживания конкретного запроса. Кроме этого, можно просмотреть все выполненные SQL-запросы и какое время ушло на обработку каждого из них. Эта задача более полезна для разработчиков. Используйте часть этого лог-файла при формировании отчета об ошибках, например:

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)

В этом примере сервер обрабатывает HTTP-запрос с URL /gitlabhq/yaml_db/tree/master с IP-адреса 168.111.56.1 в 2015-02-12 19:34:53 +0200. Запрос был обработан Projects::TreeController.

api_json.log

Данный файл располагается в директории:

  • /var/log/gitlab/gitlab-rails/api_json.log при установке в качестве пакета Linux.
  • /home/git/gitlab/log/api_json.log на самокомпилирующихся установках.

Помогает просмотреть запросы, сделанные непосредственно к 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 запросчика.

application_json.log

Файл располагается в директории:

  • /var/log/gitlab/gitlab-rails/application_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/application_json.log при самокомпилирующихся установках.

Помогает отследить события, происходящие в вашем инстансе, например, создание пользователя и удаление проекта. Например:

{
    "severity":"INFO",
    "time":"2020-01-14T13:35:15.466Z",
    "correlation_id":"3823a1550b64417f9c9ed8ee0f48087e",
    "message":"User \\"Administrator\\" (<admin@example.com>) was created"
}

{
    "severity":"INFO",
    "time":"2020-01-14T13:35:15.466Z",
    "correlation_id":"78e3df10c9a18745243d524540bd5be4",
    "message":"Project \\"project133\\" was removed"
}

integrations_json.log

Расположение:

  • /var/log/gitlab/gitlab-rails/integrations_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/integrations_json.log при самокомпилирующихся установках.

Он содержит информацию об активностях, связанных с интеграциями, например с сервисами 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":"Error sending message",
    "client_url":"<http://jira.gitlap.com:8080>",
    "error":"execution expired"
}

{
    "severity":"INFO",
    "time":"2018-09-06T17:15:16.365Z",
    "service_class":"Integrations::Jira",
    "project_id":3,
    "project_path":"namespace2/project2",
    "message":"Successfully posted",
    "client_url":"<http://jira.example.com>"
}

git_json.log

Расположение:

  • /var/log/gitlab/gitlab-rails/git_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/git_json.log при самокомпилирующихся установках.

Система взаимодействует с Git-репозиториями, но в редких случаях возможны сбои. В этом случае необходимо точно знать причину их возникновения. Этот лог-файл содержит все ошибочные запросы от Системы к Git-репозиториям. В большинстве случаев файл может быть полезен только разработчикам. Например:

{
    "severity":"ERROR",
    "time":"2019-07-19T22:16:12.528Z",
    "correlation_id":"FeGxww5Hj64",
    "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'"
}

audit_json.log

Расположение:

  • /var/log/gitlab/gitlab-rails/audit_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/audit_json.log при самокомпилирующихся установках.

В этот файл регистрируются изменения в группах или проектах, а также изменение информации об их участниках (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

Основной формат лога для Helm chart установок изменен с text на json.

Расположение:

  • /var/log/gitlab/sidekiq/current при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/sidekiq.log при самокомпилирующихся установках.

Система использует фоновые задания для обработки долговременных задач. Вся информация об этих задачах записывается в этот файл. Например:

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

Вместо JSON можно выбрать генерацию логов Sidekiq в текстовом формате, например:

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

Для установки в качестве Linux-пакета добавьте в конфигурацию следующую опцию:

sidekiq['log_format'] = 'text'

Для самокомпилирующихся установок отредактируйте gitlab.yml и установите для Sidekiq log_format следующую опцию:

## Sidekiq
sidekiq:
    log_format: text

sidekiq_client.log

Расположение:

  • /var/log/gitlab/gitlab-rails/sidekiq_client.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/sidekiq_client.log при самокомпилирующихся установках.

Файл содержит информацию о заданиях, прежде чем Sidekiq начнет обрабатывать их, например, перед постановкой в очередь.

Структура этого файла аналогична sidekiq.log — он представляет собой JSON-файл, если Sidekiq сконфигурирован указанным выше образом.

gitlab-shell.log

GitLab Shell используется Системой для выполнения команд Git, а также обеспечивает доступ к Git-репозиториям через SSH.

Информация, содержащая запросы git-{upload-pack,receive-pack}, располагается в директории /var/log/gitlab/gitlab-shell/gitlab-shell.log. Информация о хуках к GitLab Shell из Gitaly располагается в директории /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, который является частью Linux-пакета. Реализована ротация логов, их переименование в формате временных меток Unix и gzip-сжатие (например, @1584057562.s).

gitaly_hooks.log

Данный файл располагается в директории /var/log/gitlab/gitaly/gitaly_hooks.log и генерируется командами gitaly-hooks. Он также содержит записи о сбоях, полученных при обработке ответов от GitLab API.

Puma logs

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 при самокомпилирующихся установках.

В этом файле записываются события модификации от Feature-флагов при разработке системы. Например:

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

Расположение:

  • /var/log/gitlab/gitlab-rails/ci_resource_group_json.log при установке в качестве Linux-пакета.
  • /home/git/gitlab/log/ci_resource_group_json.log при самокомпилирующихся установках.

Содержит информацию о приобретении групповых ресурсов. Например:

{"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 при самокомпилирующихся установках.

В логе регистрируются:

  • Запросы, превышающие лимит на необработанных методах.
  • Идентификатор (ID) и имя пользователя (при наличии).

auth_json.log

Расположение:

  • /var/log/gitlab/gitlab-rails/auth_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/auth_json.log при самокомпилирующихся установках.

Файл содержит JSON-версию логов auth.log, например:

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

Расположение:

  • /var/log/gitlab/gitlab-rails/graphql_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/graphql_json.log при самокомпилирующихся установках.

Содержит запросы GraphQL, записанные в файл, например:

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

migrations.log

Расположение:

  • /var/log/gitlab/gitlab-rails/migrations.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/migrations.log при самокомпилирующихся установках.

В данном файле регистрируется ход миграции базы данных.

mail_room_json.log (default)

Расположение:

  • /var/log/gitlab/mailroom/current при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/mail_room_json.log при самокомпилирующихся установках.

Структурированный лог-файл фиксирует внутреннюю активность в gem-библиотеке mail_room. Ее имя и файл настраиваются, поэтому могут отличаться от приведенных выше.

web_hooks.log

Расположение:

  • /var/log/gitlab/gitlab-rails/web_hooks.log при установке в качестве Linux-пакета.
  • /home/git/gitlab/log/web_hooks.log при самокомпилирующихся установках.

В файл записываются события, связанные с веб-хуками, например:

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

sidekiq_exporter.log и web_exporter.log

Если активированы и Prometheus metrics, и Sidekiq Exporter, Sidekiq запускает веб-сервер и прослушивает определенный порт (по умолчанию: 8082). По умолчанию логи доступа Sidekiq Exporter access отключены, но могут включаться:

  • Используйте опцию sidekiq['exporter_log_enabled'] = true в /etc/gitlab/gitlab.rb при установке в качестве Linux-пакета.
  • Используйте опцию sidekiq_exporter.log_enabled в gitlab.yml при самокомпилирующихся установках.

Если логирование включено, в зависимости от способа установки файл располагается в директории:

  • /var/log/gitlab/gitlab-rails/sidekiq_exporter.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/sidekiq_exporter.log при самокомпилирующихся установках.

Если активированы и Prometheus metrics, и Sidekiq Exporter, Puma запускает веб-сервер и прослушивает определенный порт (по умолчанию: 8083). Логи доступа генерируются зависящем от способа установки месте:

  • /var/log/gitlab/gitlab-rails/web_exporter.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/web_exporter.log при самокомпилирующихся установках.

database_load_balancing.log

Содержит подробную информацию о балансировке нагрузки базы данных Системы. Расположение:

  • /var/log/gitlab/gitlab-rails/database_load_balancing.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/database_load_balancing.log при самокомпилирующихся установках.

zoekt.log

В файле регистрируется информация, связанная с функцией поиска по точному коду, которая функционирует на базе Zoekt.

Расположение:

  • /var/log/gitlab/gitlab-rails/zoekt.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/zoekt.log при самокомпилирующихся установках.

elasticsearch.log

Этот лог-файл содержит информацию, имеющую отношение к интеграции с Elasticsearch, включая ошибки, возникающие в ходе индексации или выполнения поисковых запросов Elasticsearch. Расположение:

  • /var/log/gitlab/gitlab-rails/elasticsearch.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/elasticsearch.log при самокомпилирующихся установках.

Каждая строка содержит JSON, который может быть получен такими сервисами, как Elasticsearch и Splunk. Для наглядности в приведенном ниже примере добавлены разрывы строк:

{
    "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, который обеспечивает стандартный и последовательный способ обработки сохраненных исключений.

  • /var/log/gitlab/gitlab-rails/exceptions_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/exceptions_json.log при самокомпилирующихся установках.

Каждая строка содержит JSON, который может быть получен Elasticsearch, например:

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

Расположение:

  • /var/log/gitlab/gitlab-rails/service_measurement.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/service_measurement.log при самокомпилирующихся установках.

Файл содержит один структурированный лог с изменениями для каждого экземпляра сервиса. Он также содержит такие изменения, как количество SQL-запросов, execution_time, gc_stats и memory usage. Пример:

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

Файл содержит информацию о попытках 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

Расположение:

  • /var/log/gitlab/gitlab-rails/update_mirror_service_json.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/update_mirror_service_json.log при самокомпилирующихся установках.

Файл содержит информации об ошибках 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

Лог с информацией о функциональных возможностях, связанных с AI.

Расположение:

  • /var/log/gitlab/gitlab-rails/llm.log при установке в качестве Linux-пакета;
  • /home/git/gitlab/log/llm.log при самокомпилирующихся установках.

Логи NGINX

При установке в качестве пакета Linux логи NGINX располагаются в следующих директориях:

  • /var/log/gitlab/nginx/gitlab_access.log: лог запросов, сделанных Системой;
  • /var/log/gitlab/nginx/gitlab_error.log: лог ошибок NGINX для системы;
  • /var/log/gitlab/nginx/gitlab_pages_access.log: лог запросов, сделанных к статическим сайтам Pages;
  • /var/log/gitlab/nginx/gitlab_pages_error.log: лог ошибок NGINX для статических сайтов Pages;
  • /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: лог ошибок NGINX для Mattermost.

Ниже приводится формат лога 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
}

Логи 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 agent

При установке в качестве Linux-пакета логи сервера GitLab agent располагаются в директории /var/log/gitlab/gitlab-kas/current.

Логи Praefect

При установке в качестве Linux-пакета логи Praefect располагаются в директории /var/log/gitlab/praefect/.

Логи резервного копирования

При установке в качестве Linux-пакета логи резервного копирования располагаются в директории /var/log/gitlab/gitlab-rails/backup_json.log.

Данный лог пополняется при выполнении резервного копирования системы.