ログシステム

GitLabにはすべてが記録される高度なログシステムがあり、様々なシステムログファイルを使ってインスタンスを分析することができます。ログシステムは監査イベントに似ています。

システムログファイルは通常、標準的なログファイル形式のプレーンテキストです。このガイドでは、これらのシステムログファイルの読み方と使い方について説明します。

ログシステムとログの使用についての詳細をお読みください:

ログレベル

各ログ メッセージには、その重要性と冗長性を示すログ レベルが割り当てられます。各ロガーには、割り当てられた最小ログ レベルがあります。ロガーは、そのログ レベルが最小ログ レベルと等しいか、それ以上の場合にのみログ メッセージを発行します。

以下のログレベルがサポートされています:

レベル名前
0DEBUG
1INFO
2WARN
3ERROR
4FATAL
5UNKNOWN

GitLab ロガーはデフォルトでDEBUG に設定されているため、すべてのログメッセージを出力します。

デフォルトのログレベルを上書き

GITLAB_LOG_LEVEL 環境変数を使って、GitLab ロガーの最小ログレベルを上書きすることができます。有効な値は0 から5 の値か、ログレベルの名前です。

使用例:

GITLAB_LOG_LEVEL=info

サービスによっては、この設定の影響を受けない他のログレベルが設定されています。これらのサービスには、ログレベルを上書きする独自の環境変数があります。例えば

サービスログレベル環境変数
GitLab APIINFO 
GitLabクリーンアップINFODEBUG
GitLabドクターINFOVERBOSE
GitLabエクスポートINFOEXPORT_DEBUG
GitLab GeoINFO 
GitLab インポートINFOIMPORT_DEBUG
GitLab QAランタイムINFOQA_LOG_LEVEL
Google APIINFO 
ラックのタイムアウトERROR 
Sidekiq(サーバー)INFO 
除雪車トラッカーFATAL 
gRPCクライアント(Gitaly)WARNGRPC_LOG_LEVEL
LLMINFOLLM_DEBUG

ログローテーション

指定されたサービスのログは、以下の方法で管理され、ローテーションされます:

  • logrotate
  • svlogd (runit のサービスログデーモン)
  • logrotatesvlogd
  • または全く

以下の表は、含まれるサービスのログの管理とローテーションを担当するものについての情報を含んでいます。svlogd](https://docs.gitlab.com/omnibus/settings/logs.html#runit-logs) によって管理されるログ[はcurrent というファイルに書き込まれます。GitLabに組み込まれたlogrotate サービスは、runitによって取得されたログ以外のすべてのログを管理します。

ログの種類logrotateで管理svlogd/runitによる管理
アラートマネージャのログ {点線円}いいえ {チェックサークル}はい
ログ {点線円}いいえ {チェックサークル}はい
Gitaly {チェックサークル}はい {チェックサークル}はい
Linux パッケージインストール用 GitLab Exporter {点線円}いいえ {チェックサークル}はい
GitLab Pagesのログ {チェックサークル}はい {チェックサークル}はい
GitLab Rails {チェックサークル}はい {点線円}いいえ
GitLab Shell ログ {チェックサークル}はい {点線円}いいえ
Grafanaログ {点線円}いいえ {チェックサークル}はい
ログの回転 {点線円}いいえ {チェックサークル}はい
メールルーム {チェックサークル}はい {チェックサークル}はい
NGINX {チェックサークル}はい {チェックサークル}はい
PgBouncerのログ {点線円}いいえ {チェックサークル}はい
PostgreSQLログ {点線円}いいえ {チェックサークル}はい
Praefectログ {点線丸印}あり {チェックサークル}はい
プロメテウスのログ {点線円}いいえ {チェックサークル}はい
Puma {チェックサークル}はい {チェックサークル}はい
Redisのログ {点線円}いいえ {チェックサークル}はい
レジストリログ {点線円}いいえ {チェックサークル}はい
Workhorse ログ {チェックサークル}はい {チェックサークル}はい

production_json.log

このファイルは

  • /var/log/gitlab/gitlab-rails/production_json.log Linux パッケージインストール時。
  • /home/git/gitlab/log/production_json.log セルフコンパイルインストールの場合。

Logrageのおかげで、GitLabから受け取ったRailsコントローラのリクエストの構造化ログが含まれています。APIからのリクエストはapi_json.log の別のファイルに記録されます。

各行には Elasticsearch や Splunk などのサービスで取り込める JSON が含まれています。見やすくするために、例に改行を加えました:

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

この例は、特定のイシューに対する GET リクエストです。各行には、秒単位のパフォーマンスデータも含まれています:

  • duration_s:リクエストの取得にかかった合計時間
  • queue_duration_s:GitLab Workhorse内でリクエストがキューに入れられた合計時間
  • view_duration_s:Rails ビューの内部での合計時間
  • db_duration_s:PostgreSQLからのデータ取得にかかる合計時間
  • cpu_s:CPUの総使用時間
  • gitaly_duration_s:Gitaly呼び出しによる合計時間
  • gitaly_calls:Gitalyとの通話の合計回数
  • redis_calls:Redisへのコール総数
  • redis_cross_slot_calls:Redisへのクロススロットコール総数
  • redis_allowed_cross_slot_calls:Redisに対して許可されたクロススロットコールの総数。
  • redis_duration_s:Redisからデータを取得するための合計時間
  • redis_read_bytes:Redisから読み込んだ総バイト数
  • redis_write_bytes:Redisへの総書き込みバイト数
  • redis_<instance>_calls:Redisインスタンスへのコール総数
  • redis_<instance>_cross_slot_calls:Redisインスタンスへのクロススロットコール総数
  • redis_<instance>_allowed_cross_slot_calls:Redisインスタンスに対して許可されたクロススロットコールの総数。
  • redis_<instance>_duration_s:Redisインスタンスからデータを取得するための合計時間
  • redis_<instance>_read_bytes:Redisインスタンスから読み込んだ総バイト数
  • redis_<instance>_write_bytes:Redisインスタンスへの総書き込みバイト数
  • pid:ワーカーの Linux プロセス ID (ワーカーが再起動すると変更されます)
  • worker_id:ワーカーの論理 ID (ワーカーが再起動しても変わりません)

HTTP トランスポートを使ったユーザークローンとフェッチのアクティビティはaction: git_upload_pack としてログに表示されます。

さらに、ログには発信元IPアドレス(remote_ip)、ユーザーID(user_id)、ユーザー名(username)が含まれます。

一部のエンドポイント(/search など)は、高度な検索を使用している場合、Elasticsearch にリクエストを行うことがあります。これらはさらにelasticsearch_callselasticsearch_call_duration_sのログを記録します:

  • elasticsearch_calls:Elasticsearch への総コール数
  • elasticsearch_duration_s:Elasticsearchの呼び出しにかかった時間の合計
  • elasticsearch_timed_out_count:Elasticsearchの呼び出しがタイムアウトし、部分的な結果が返された回数の合計

ActionCableの接続イベントとサブスクリプションイベントもこのファイルに記録され、前述のフォーマットに従います。method,path,format フィールドは適用されず、常に空です。ActionCable 接続またはチャネルクラスは、controllerとして使用されます。

{
  "method":null,
  "path":null,
  "format":null,
  "controller":"IssuesChannel",
  "action":"subscribe",
  "status":200,
  "time":"2020-05-14T19:46:22.008Z",
  "params":[{"key":"project_path","value":"gitlab/gitlab-foss"},{"key":"iid","value":"1"}],
  "remote_ip":"127.0.0.1",
  "user_id":1,
  "username":"admin",
  "ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0",
  "correlation_id":"jSOIEynHCUa",
  "duration_s":0.32566
}
note
GitLab 12.5からは、エラーが発生した場合、class,message,backtraceと共にexception フィールドが含まれます。以前のバージョンでは、exception.classexception.messageの代わりにerror フィールドが含まれていました。例えば
{
  "method": "GET",
  "path": "/admin",
  "format": "html",
  "controller": "Admin::DashboardController",
  "action": "index",
  "status": 500,
  "time": "2019-11-14T13:12:46.156Z",
  "params": [],
  "remote_ip": "127.0.0.1",
  "user_id": 1,
  "username": "root",
  "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:70.0) Gecko/20100101 Firefox/70.0",
  "queue_duration": 274.35,
  "correlation_id": "KjDVUhNvvV3",
  "queue_duration_s":0.0,
  "gitaly_calls":16,
  "gitaly_duration_s":0.16,
  "redis_calls":115,
  "redis_duration_s":0.13,
  "correlation_id":"O1SdybnnIq7",
  "cpu_s":17.50,
  "db_duration_s":0.08,
  "view_duration_s":2.39,
  "duration_s":20.54,
  "pid": 81836,
  "worker_id": "puma_0",
  "exception.class": "NameError",
  "exception.message": "undefined local variable or method `adsf' for #<Admin::DashboardController:0x00007ff3c9648588>",
  "exception.backtrace": [
    "app/controllers/admin/dashboard_controller.rb:11:in `index'",
    "ee/app/controllers/ee/admin/dashboard_controller.rb:14:in `index'",
    "ee/lib/gitlab/ip_address_state.rb:10:in `with'",
    "ee/app/controllers/ee/application_controller.rb:43:in `set_current_ip_address'",
    "lib/gitlab/session.rb:11:in `with_session'",
    "app/controllers/application_controller.rb:450:in `set_session_storage'",
    "app/controllers/application_controller.rb:444:in `set_locale'",
    "ee/lib/gitlab/jira/middleware.rb:19:in `call'"
  ]
}

production.log

このファイルは

  • /var/log/gitlab/gitlab-rails/production.log Linux パッケージインストール時。
  • /home/git/gitlab/log/production.log セルフコンパイルインストールの場合。

実行されたすべてのリクエストに関する情報が含まれています。リクエストの URL やタイプ、IP アドレス、特定のリクエストに関連するコードのパーツを見ることができます。また、実行されたすべての SQL リクエストと、それぞれにかかった時間もわかります。この作業は、GitLab の貢献者や開発者にとってはより便利なものです。バグをレポーターとして報告する際には、このログファイルの一部を使ってください。たとえば

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

  ... [CUT OUT]

  Namespaces"."created_at" DESC, "namespaces"."id" DESC LIMIT 1 [["id", 26]]
  CACHE (0.0ms) SELECT  "members".* FROM "members"  WHERE "members"."source_type" = 'Project' AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $1 AND "members"."source_type" = $2 AND "members"."user_id" = 1  ORDER BY "members"."created_at" DESC, "members"."id" DESC LIMIT 1  [["source_id", 18], ["source_type", "Project"]]
  CACHE (0.0ms) SELECT  "members".* FROM "members"  WHERE "members"."source_type" = 'Project' AND "members".
  (1.4ms) SELECT COUNT(*) FROM "merge_requests"  WHERE "merge_requests"."target_project_id" = $1 AND ("merge_requests"."state" IN ('opened','reopened')) [["target_project_id", 18]]
  Rendered layouts/nav/_project.html.haml (28.0ms)
  Rendered layouts/_collapse_button.html.haml (0.2ms)
  Rendered layouts/_flash.html.haml (0.1ms)
  Rendered layouts/_page.html.haml (32.9ms)
Completed 200 OK in 166ms (Views: 117.4ms | ActiveRecord: 27.2ms)

この例では、サーバーは IP168.111.56.1 から URL/gitlabhq/yaml_db/tree/master の HTTP リクエストを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:リクエスト元のユーザーエージェント。
note
Grape Logging v1.8.4 以降、view_duration_sduration_s - db_duration_sによって計算されます。そのため、](https://github.com/aserafin/grape_logging) はシリアライズ処理だけでなく、Redis での読み書き処理や外部 HTTP など、複数の異なる要因によって影響を受ける可能性があります。

application.log (非推奨)

GitLab 15.10 で非推奨

このファイルは

  • /var/log/gitlab/gitlab-rails/application.log Linux パッケージインストール時。
  • /home/git/gitlab/log/application.log セルフコンパイルインストールの場合。

application_json.log のログの構造化されていないバージョンが含まれています:

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

GitLab 12.7から導入されました

このファイルは

  • /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"
}

kubernetes.log (非推奨)

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 バージョン 12.2 以降、このファイルはgithost.log からgit_json.log にリネームされ、JSON フォーマットで保存されるようになりました。

GitLabはGitリポジトリとやりとりしなければなりませんが、まれに何かがうまくいかないことがあります。その場合、何が起こったのかを正確に知る必要があります。このログファイルには、GitLabから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

note
GitLab Freeは少数の異なる監査イベントを追跡します。GitLab Premiumはさらに多くのイベントをトラッキングします。

このファイルは

  • /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

GitLab16.0以降では、Helmチャートインストールのデフォルトのログフォーマットがtext からjson に変更されました。

このファイルは

  • /var/log/gitlab/sidekiq/current Linux パッケージインストール時。
  • /home/git/gitlab/log/sidekiq.log セルフコンパイルインストールの場合。

GitLabは長時間かかるタスクの処理にバックグラウンドジョブを使用します。これらのジョブの処理に関するすべての情報はこのファイルに書き込まれます。例えば

{
  "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 を編集し、Sidekiqlog_format 設定オプションを設定します:

  ## Sidekiq
  sidekiq:
    log_format: text

sidekiq_client.log

GitLab 12.9で導入されました

このファイルは

  • /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 のログエントリー例 :

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

/var/log/gitlab/gitaly/current のログエントリー例 :

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

Gitalyログ

このファイルは/var/log/gitlab/gitaly/current にあり、runitによって生成されます。runit はLinuxパッケージに同梱されており、その目的についての簡単な説明はLinuxパッケージのドキュメントにあります。ログファイルはローテーションされ、Unixタイムスタンプ形式でリネームされ、gzip-圧縮されます(@1584057562.sのように)。

grpc.log

このファイルは Linux パッケージのインストールでは/var/log/gitlab/gitlab-rails/grpc.log にあります。Gitalyによって使用されるネイティブgRPCロギング。

gitaly_hooks.log

このファイルは/var/log/gitlab/gitaly/gitaly_hooks.log にあり、gitaly-hooks コマンドによって生成されます。また、GitLab APIからのレスポンスの処理中に受け取った失敗に関する記録も含まれています。

Puma ログ

puma_stdout.log

このファイルは

  • /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

GitLab 13.1 で導入されました。

このファイルは

  • /var/log/gitlab/gitlab-rails/exporter.log Linux パッケージインストール時。
  • /home/git/gitlab/log/exporter.log セルフコンパイルインストールの場合。

エクスポート処理の進行状況をログに記録します。

features_json.log

GitLab 13.7 で導入されました

このファイルは

  • /var/log/gitlab/gitlab-rails/features_json.log Linux パッケージインストール時。
  • /home/git/gitlab/log/features_json.log セルフコンパイルインストールの場合。

GitLabの開発における機能フラグからの変更イベントはこのファイルに記録されます。例えば

{"severity":"INFO","time":"2020-11-24T02:30:59.860Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"true"}
{"severity":"INFO","time":"2020-11-24T02:31:29.108Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"true"}
{"severity":"INFO","time":"2020-11-24T02:31:29.129Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable","extra.thing":"false"}
{"severity":"INFO","time":"2020-11-24T02:31:29.177Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable","extra.thing":"Project:1"}
{"severity":"INFO","time":"2020-11-24T02:31:29.183Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable","extra.thing":"Project:1"}
{"severity":"INFO","time":"2020-11-24T02:31:29.188Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable_percentage_of_time","extra.percentage":"50"}
{"severity":"INFO","time":"2020-11-24T02:31:29.193Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable_percentage_of_time"}
{"severity":"INFO","time":"2020-11-24T02:31:29.198Z","correlation_id":null,"key":"cd_auto_rollback","action":"enable_percentage_of_actors","extra.percentage":"50"}
{"severity":"INFO","time":"2020-11-24T02:31:29.203Z","correlation_id":null,"key":"cd_auto_rollback","action":"disable_percentage_of_actors"}
{"severity":"INFO","time":"2020-11-24T02:31:29.329Z","correlation_id":null,"key":"cd_auto_rollback","action":"remove"}

ci_resource_groups_json.log

GitLab 15.9 で導入されました

このファイルは

  • /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_idprocessable_idmessagesuccess フィールドを示しています。

auth.log

GitLab 12.0 で導入されました。

このファイルは

  • /var/log/gitlab/gitlab-rails/auth.log Linux パッケージインストール時。
  • /home/git/gitlab/log/auth.log セルフコンパイルインストールの場合。

このログには

  • 未加工のエンドポイントでのレート制限を超えるリクエスト。
  • 保護されたパスの悪用リクエスト。
  • GitLabバージョン12.3以降では、ユーザーIDとユーザー名(もしあれば)。

auth_json.log

このファイルは

  • /var/log/gitlab/gitlab-rails/auth_json.log Linux パッケージインストール時。
  • /home/git/gitlab/log/auth_json.log セルフコンパイルインストールの場合。

このファイルには、auth.log のログのJSONバージョンが含まれます:

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

graphql_json.log

GitLab 12.0から導入されました

このファイルは

  • /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

GitLab 12.3 で導入されました。

このファイルは

  • /var/log/gitlab/gitlab-rails/migrations.log Linux パッケージインストール時。
  • /home/git/gitlab/log/migrations.log セルフコンパイルインストールの場合。

このファイルはデータベースのマイグレーションの進行状況を記録します。

mail_room_json.log (デフォルト)

GitLab 12.6 で導入されました

このファイルは

  • /var/log/gitlab/mailroom/current Linux パッケージインストール時。
  • /home/git/gitlab/log/mail_room_json.log セルフコンパイルインストールの場合。

この構造化ログファイルはmail_room gem の内部アクティビティを記録します。名前とパスは設定可能なので、上記と一致しない場合があります。

web_hooks.log

GitLab 16.3で導入されました。

このファイルは

  • /var/log/gitlab/gitlab-rails/web_hooks.log Linux パッケージインストール時。
  • /home/git/gitlab/log/web_hooks.log セルフコンパイルインストールの場合。

Webhook のバックオフ、無効化、再有効化イベントはこのファイルに記録されます。例えば

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

ログの再設定

Reconfigure ログファイルは、Linux パッケージインストールの場合、/var/log/gitlab/reconfigure にあります。セルフコンパイルインストールには reconfigure ログがありません。手動で、あるいはアップグレードの一部としてgitlab-ctl reconfigure を実行すると、必ず reconfigure ログが作成されます。

リコンフィギュア・ログ・ファイルは、リコンフィギュアが開始された UNIX タイムスタンプに従って命名されます。1509705644.log

sidekiq_exporter.logweb_exporter.log

PrometheusメトリクスとSidekiq Exporterの両方が有効な場合、SidekiqはWebサーバーを起動し、定義されたポート(デフォルト:8082 )をリッスンします。デフォルトでは、Sidekiq Exporterのアクセスログは無効になっていますが、有効にすることもできます:

  • Linuxパッケージインストールでは、/etc/gitlab/gitlab.rbsidekiq['exporter_log_enabled'] = true オプションを使用します。
  • セルフコンパイルによるインストールでは、gitlab.ymlsidekiq_exporter.log_enabled オプションを使用してください。

有効にすると、インストール方法に応じて、このファイルは次の場所に置かれます:

  • /var/log/gitlab/gitlab-rails/sidekiq_exporter.log Linux パッケージインストール時。
  • /home/git/gitlab/log/sidekiq_exporter.log セルフコンパイルインストールの場合。

Prometheus メトリクスと Web Exporter の両方が有効な場合、Puma は Web サーバーを起動し、定義されたポート (デフォルト:8083) をリッスンし、インストール方法に基づいた場所にアクセスログが生成されます:

  • /var/log/gitlab/gitlab-rails/web_exporter.log Linux パッケージインストール時。
  • /home/git/gitlab/log/web_exporter.log セルフコンパイルインストールの場合。

database_load_balancing.log

GitLab 12.3 で導入されました

GitLabDatabase Load Balancingの詳細がコンテナで含まれています。このファイルは

  • /var/log/gitlab/gitlab-rails/database_load_balancing.log Linux パッケージインストール時。
  • /home/git/gitlab/log/database_load_balancing.log セルフコンパイルインストールの場合。

zoekt.log

GitLab 15.9 で導入されました

このファイルはZoektを利用した正確なコード検索機能に関連する情報を記録します。

このファイルは

  • /var/log/gitlab/gitlab-rails/zoekt.log Linux パッケージインストール時。
  • /home/git/gitlab/log/zoekt.log セルフコンパイルインストールの場合。

elasticsearch.log

GitLab 12.6 で導入されました。

このファイルは Elasticsearch インテグレーションに関連する情報を記録します。Elasticsearch のインデックス作成や検索時のエラーも記録します。このファイルは

  • /var/log/gitlab/gitlab-rails/elasticsearch.log Linux パッケージインストール時。
  • /home/git/gitlab/log/elasticsearch.log セルフコンパイルインストールの場合。

各行には、Elasticsearch や Splunk などのサービスで取り込むことができる JSON が含まれています。わかりやすくするために、以下の例の行に改行を追加しました:

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

exceptions_json.log

GitLab 12.6 で導入されました

このファイルは、Gitlab::ErrorTracking によって追跡されている例外に関する情報をログに記録し、救出された例外の標準的で一貫した処理方法を提供します。このファイルは

  • /var/log/gitlab/gitlab-rails/exceptions_json.log Linux パッケージインストール時。
  • /home/git/gitlab/log/exceptions_json.log セルフコンパイルインストールの場合。

各行には Elasticsearch が取り込むことのできる JSON が含まれています。例えば

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

service_measurement.log

GitLab 13.0で導入されました。

このファイルは

  • /var/log/gitlab/gitlab-rails/service_measurement.log Linux パッケージインストール時。
  • /home/git/gitlab/log/service_measurement.log セルフコンパイルインストールの場合。

このログには、各サービス実行の計測値を含む単一の構造化ログのみが含まれます。このログには、SQL 呼び出し回数、execution_timegc_statsmemory 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 がリポジトリとファイルの同期を試みたときの情報がコンテナで格納されています。ファイルの各行には、(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

このファイルは

  • /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

GitLab 16.0 で導入されました

llm.log ファイルはAI機能に関連する情報を記録します。

このファイルは

  • /var/log/gitlab/gitlab-rails/llm.log Linux パッケージインストール時。
  • /home/git/gitlab/log/llm.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 のデフォルトのアクセスログフォーマットです:

'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'

$request$http_referer は、シークレットトークンのような機密性の高いクエリ文字列パラメータ用にフィルタリングされています。

ページのログ

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 にあります。

アラートマネージャーのログ

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 モニターのログ

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 では、Promefect の Prometheus メトリクスも追跡しています。

バックアップログ

GitLab 14.1 で導入されました

Linux パッケージインストールでは、バックアップログは/var/log/gitlab/gitlab-rails/backup_json.log にあります。

このログはGitLabのバックアップが作成されたときに出力されます。このログを使って、バックアップ処理がどのように行われたかを理解することができます。

パフォーマンスバーの統計

GitLab 13.7 で導入されました

このファイルは

  • /var/log/gitlab/gitlab-rails/performance_bar_json.log Linux パッケージインストール時。
  • /home/git/gitlab/log/performance_bar_json.log セルフコンパイルインストールの場合。

パフォーマンス・バーの統計(現在は SQL クエリの継続時間のみ)がこのファイルに記録されます。例えば

{"severity":"INFO","time":"2020-12-04T09:29:44.592Z","correlation_id":"33680b1490ccd35981b03639c406a697","filename":"app/models/ci/pipeline.rb","method_path":"app/models/ci/pipeline.rb:each_with_object","request_id":"rYHomD0VJS4","duration_ms":26.889,"count":2,"query_type": "active-record"}

これらの統計は .com でのみ記録され、自己デプロイでは無効になります。

ログの収集

先に挙げたコンポーネントのどれかに限定されないイシューをトラブルシューティングするときは、GitLabインスタンスから複数のログや統計情報を同時に収集するのが便利です。

note
GitLabサポートはしばしばこれらのいずれかを要求し、必要なツールをメンテナーします。

主なログを簡単に説明します。

バグやエラーがすぐに再現できる場合は、GitLabのメインログをファイルに保存し、何度か問題を再現してみましょう:

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

Control +Cでログ収集を終了します。

GitLabSOS

先に挙げたGitLabコンポーネントのいずれかに容易に起因することができないパフォーマンス低下やカスケードエラーが発生した場合、GitLabSOSはGitLabインスタンスの広い視野を提供することができます。詳細と実行手順については、GitLabSOSのドキュメントをお読みください。

Fast-stats

Fast-statsは GitLab のログからパフォーマンスの統計情報を作成・比較するツールです。詳細と実行方法については、fast-statsのドキュメントを読んでください。

相関IDで関連するログエントリを検索

ほとんどのリクエストには、関連するログエントリを見つけるために使用できるログIDがあります。