Gitalyリファレンス
GitalyはTOML設定ファイルによって設定されます。セルフ・コンパイル・インストールとは異なり、Linuxパッケージ・インストールでは、このファイルを直接編集することはありません。Linuxパッケージ・インストールの場合、デフォルトのファイルの場所は/var/opt/gitlab/gitaly/config.toml
です。
設定ファイルは、gitaly
実行ファイルへの引数として渡されます。これは通常、Linux パッケージ・インストールかinitスクリプトによって行われます。
設定ファイルの例はGitalyプロジェクトにあります。
フォーマット
トップレベルでは、config.toml
。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
socket_path | 文字列です。 | yes (listen_addr が設定されていない場合) | GitalyがUnixソケットを開くパス。 |
listen_addr | 文字列です。 | yes (socket_path が設定されていない場合) | GitalyがリッスンするTCPアドレス。 |
tls_listen_addr | 文字列です。 | いいえ | GitalyがリッスンするためのTCP over TLSアドレス。 |
bin_dir | 文字列です。 | yes | Gitalyの実行ファイルを含むディレクトリ。 |
prometheus_listen_addr | 文字列です。 | いいえ | Prometheus メトリクスの TCP リスナー・アドレス。設定されていない場合、Prometheus リスナーは起動されません。 |
使用例:
socket_path = "/home/git/gitlab/tmp/sockets/private/gitaly.socket"
listen_addr = "localhost:9999"
tls_listen_addr = "localhost:8888"
bin_dir = "/home/git/gitaly"
prometheus_listen_addr = "localhost:9236"
認証
Gitalyは、ヘッダに特定のベアラートークンを含まないリクエストを拒否するように設定することができます。これは、TCP上でリクエストを提供するときに使われるセキュリティ対策です:
[auth]
# A non-empty token enables authentication.
token = "the secret token"
config.toml
のトークン設定がないか空文字列の場合、認証は無効になります。
transitioning
、一時的に認証を無効にすることができます。これにより、まだ正しく設定されていないクライアントのサービス停止を引き起こすことなく、すべてのクライアントが正しく認証されているかどうかを監視できます:
[auth]
token = "the secret token"
transitioning = true
transitioning
トークン設定の変更が終わったら、transitioning
を無効にすることを忘れないでください。
Prometheus では、すべての認証試行がgitaly_authentications_total
メトリック でカウントされます。
TLS
GitalyはTLS暗号化をサポートしています。自動的には提供されませんので、ご自身で証明書をご用意ください。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
certificate_path | 文字列です。 | いいえ | 証明書へのパス。 |
key_path | 文字列です。 | いいえ | キーへのパス。 |
tls_listen_addr = "localhost:8888"
[tls]
certificate_path = '/home/git/cert.cert'
key_path = '/home/git/key.pem'
GitalyのTLSについてもっと読む.
ストレージ
GitLabリポジトリは、/home/git/repositories
のようなストレージと呼ばれるディレクトリにグループ化されています。これらのディレクトリには、GitLab が管理するベアリポジトリがdefault
のような名前で格納されています。
これらの名前とパスはGitLabのgitlab.yml
設定ファイルでも定義されています。GitalyをGitLabと同じマシン上で実行する場合(デフォルトで推奨される設定)、Gitalyconfig.toml
で定義されたストレージ・パスはgitlab.yml
のものと一致しなければなりません。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
storage | アレイ | yes | ストレージシャードのアレイ。 |
path | 文字列です。 | yes | ストレージシャードへのパス。 |
name | 文字列です。 | yes | ストレージシャードの名前。 |
使用例:
[[storage]]
path = "/path/to/storage/repositories"
name = "my_shard"
[[storage]]
path = "/path/to/other/repositories"
name = "other_storage"
Git
設定ファイルの[git]
セクションでは、以下の値を設定できます。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
bin_path | 文字列です。 | いいえ | Gitバイナリへのパス。設定されていない場合は、PATH を使って解決されます。 |
catfile_cache_size | 整数。 | いいえ | キャッシュされるcat-file プロセスの最大数。デフォルトは100 。 |
signing_key | 文字列です。 | いいえ | GPG署名鍵へのパス。設定されていない場合、GitalyはUIを使ったコミットには署名しません。GitLab 15.4で導入されました。 |
cat-file
キャッシュ
Gitaly RPCの多くは、リポジトリからGitオブジェクトを検索する必要があります。ほとんどの場合、そのためにgit cat-file --batch
プロセスを使用します。パフォーマンスを向上させるために、GitalyはRPCコール間でこれらのgit cat-file
プロセスを再利用することができます。以前使用されたプロセスは、“Git cat-fileキャッシュ “に保存されます。システムリソースの使用量を制御するために、キャッシュに入ることができるcat-fileプロセスの最大数を設定しています。
デフォルトの上限は100cat-file
sで、これはgit cat-file --batch
とgit cat-file --batch-check
プロセスのペアを構成します。開いているファイルが多すぎる」というエラーや、新しいプロセスを作成できない場合は、この上限を下げるとよいでしょう。
理想的には、標準的なトラフィックを処理するのに十分な数であるべきです。制限値を上げる場合は、その前後でキャッシュのヒット率を測定してください。ヒット率が向上しない場合、上限を上げても意味がない可能性があります。ヒット率を見るための Prometheus クエリの例を示します:
sum(rate(gitaly_catfile_cache_total{type="hit"}[5m])) / sum(rate(gitaly_catfile_cache_total{type=~"(hit)|(miss)"}[5m]))
GitLab シェル
歴史的な理由により、GitLab ShellはGitLabがGitプッシュを検証し反応するためのGitフックを含んでいます。GitalyはGitプッシュを “所有 “しているため、GitLab ShellはGitalyと一緒にインストールする必要があります。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
dir | 文字列です。 | yes | GitLab Shellがインストールされているディレクトリ。 |
使用例:
[gitlab-shell]
dir = "/home/git/gitlab-shell"
Prometheus
オプションで、PrometheusのGRPCメソッド呼び出しのヒストグラムレイテンシを記録するようにGitalyを設定することができます。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
grpc_latency_buckets | アレイ | いいえ | Prometheusは各オブザベーションをバケットに保存します。バケットを最適化することで、近似の精度をよりコントロールすることができます。 |
使用例:
prometheus_listen_addr = "localhost:9236"
[prometheus]
grpc_latency_buckets = [0.001, 0.005, 0.025, 0.1, 0.5, 1.0, 10.0, 30.0, 60.0, 300.0, 1500.0]
伐採
以下の値は、[logging]
セクションの Gitaly におけるロギングの設定です。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
format | 文字列です。 | いいえ | ログ形式:text またはjson .デフォルト:text . |
level | 文字列です。 | いいえ | ログレベルdebug info ,warn ,error ,fatal , またはpanic .デフォルト:info . |
sentry_dsn | 文字列です。 | いいえ | 例外監視用のSentry DSN(データソース名)。 |
sentry_environment | 文字列です。 | いいえ | 例外監視のためのSentry環境。 |
メインのGitalyアプリケーションのログはstdout
に行きますが、GitLab Shellのログのように設定されたディレクトリに行く追加のログファイルがいくつかあります。GitLab Shellはpanic
やtrace
レベルのログをサポートしていません:
-
panic
はerror
に戻ります。 -
trace
はdebug
に戻ります。 - その他の無効なログレベルのデフォルトは
info
です。
使用例:
[logging]
level = "warn"
dir = "/home/gitaly/logs"
format = "json"
sentry_dsn = "https://<key>:<secret>@sentry.io/<project>"
ruby_sentry_dsn = "https://<key>:<secret>@sentry.io/<project>"
同時実行
各 RPC エンドポイントのconcurrency
を調整できます。
名前 | 種類 | 必須 | 説明 |
---|---|---|---|
concurrency | アレイ | yes | RPC エンドポイントの配列。 |
rpc | 文字列です。 | いいえ | RPC エンドポイントの名前 (/gitaly.RepositoryService/GarbageCollect )。 |
max_per_repo | 整数。 | いいえ | リポジトリごとのRPCごとの同時実行数。 |
使用例:
[[concurrency]]
rpc = "/gitaly.RepositoryService/GarbageCollect"
max_per_repo = 1