趣旨
「Gitlabが動かなくなった!」と誰かが叫んだら。
Gitlabは経験上、安定して何年も稼働します。それだけに、何かトラブルが発生した時にどこから手を付けて良いのか途方にくれることがあります。そんなあなたに役立つ記事です。
トラブルが発生した時にこの記事を思い出していただければ嬉しいです。
便利な日本語情報サイト
下記のサイトは必見です!
GitLab日本語情報サイト
https://www.gitlab.jp/links/
GitLab日本語情報サイトは、GitLabの情報を日本語で発信するために個人で立ち上げたコミュニティサイトです。
Qiitaのコミュニティサイト
https://qiita.com/organizations/gitlab-jp
今回の動作環境
CentOS Linux release 7.9.2009
Gitlab 14.4.1
トラブルシューティングの初動
まずは基本的なサーバの状態確認を。さんざん調査した後、単なるディスクの容量不足だったことに最後に気づくと悲しいので・・・。
top #どのプロセスがいちばん動作しているのか
df -h #ディスク容量が足りているか
tail /var/log/secure #念のためログイン履歴を確認
Gitlab のバージョンを確認したい
grep gitlab /opt/gitlab/version-manifest.txt
を使うと、Gitlabが停止していてもバージョンを確認できます。
[root@*** ~]# grep gitlab /opt/gitlab/version-manifest.txt
gitlab-ce 14.4.1
gitlab-config-template 14.4.1
gitlab-cookbooks 14.4.1
gitlab-ctl 14.4.1
gitlab-exporter 11.2.0
gitlab-healthcheck 90e6447aeead4a29ac9fffc15945ce6b
gitlab-kas v14.4.0 git:8b11694dd188b58234e776e3b0bad604145041b3
gitlab-pages v1.46.0 git:5e86747b6287381e2f23afe837ede1820876cf8d
gitlab-psql 7e11364159031db0eb55867ad3d5713b
gitlab-rails v14.4.1 git:1a23d731c9f1149b8be1f16a1d781490df288f18
gitlab-redis-cli 8866b9c12e308342bc148a794f5cc166
gitlab-scripts 14.4.1
gitlab-selinux 14.4.1
gitlab-shell v13.21.1 git:593961bae309e92e9bff550d0231092f44813b06
registry v3.11.1-gitlab git:6d4f158b13bd8528e271f82c56f6af46bb27e6e5
Gitlab のデーモン(常駐プログラム)類の動作状況の把握
sudo gitlab-ctl status
とすると、デーモンが正常動作しているかどうかを確認できます。
ここで "run" ではなく "down" となっていたら、そのデーモンは停止しています。
本家docs:https://docs.gitlab.com/omnibus/maintenance/
[root@*** ~]# gitlab-ctl status
run: alertmanager: (pid 25229) 79250s; run: log: (pid 1132) 86984s
run: gitaly: (pid 25247) 79249s; run: log: (pid 1140) 86984s
run: gitlab-exporter: (pid 28452) 78338s; run: log: (pid 1134) 86984s
run: gitlab-pages: (pid 28434) 78340s; run: log: (pid 31761) 84881s
run: gitlab-workhorse: (pid 28418) 78340s; run: log: (pid 1135) 86984s
run: grafana: (pid 25289) 79247s; run: log: (pid 1125) 86984s
run: logrotate: (pid 6399) 44s; run: log: (pid 1137) 86984s
run: nginx: (pid 28427) 78340s; run: log: (pid 1123) 86984s
run: node-exporter: (pid 25315) 79246s; run: log: (pid 1124) 86984s
run: postgres-exporter: (pid 25321) 79245s; run: log: (pid 1138) 86984s
run: postgresql: (pid 25330) 79244s; run: log: (pid 1131) 86984s
run: prometheus: (pid 25343) 79244s; run: log: (pid 1126) 86984s
run: puma: (pid 28660) 78308s; run: log: (pid 1130) 86984s
run: redis: (pid 25362) 79243s; run: log: (pid 1151) 86984s
run: redis-exporter: (pid 25371) 79242s; run: log: (pid 1129) 86984s
run: registry: (pid 28442) 78339s; run: log: (pid 1122) 86984s
run: sidekiq: (pid 28322) 78374s; run: log: (pid 1127) 86984s
とりあえずリスタートする場合
(状況と場合によってはバックアップが先になる場合もあるかもしれませんね。)
sudo gitlab-ctl restart
で全体をリスタート
sudo gitlab-ctl restart nginx
でnginxのみをリスタート
本家docs:https://docs.gitlab.com/ee/administration/restart_gitlab.html
現在のログを tail で観察/確認
sudo gitlab-ctl tail
で最新のログを総合的に調査できます。
何か問題が発生しているとエラーが表示される可能性が高いと言えます。
本家docs:https://docs.gitlab.com/omnibus/settings/logs.html
詳細ログ
/var/log/gitlab
にログが色々入っています。
問題箇所を絞り込んでからこちらのログを確認するほうが結果として解決が早くなりそうです。
[root@*** ~]# cd /var/log/gitlab
[root@*** gitlab]# ls
alertmanager gitaly gitlab-pages gitlab-shell grafana logrotate node-exporter postgresql puma redis registry
crond gitlab-exporter gitlab-rails gitlab-workhorse lets-encrypt nginx postgres-exporter prometheus reconfigure redis-exporter sidekiq
Gitlab コミュニティサイト(英語)
公式(英語)
アップデート後のトラブルなど、一般的に遭遇しそうなエラーについては下記に最新の情報があります。
検索してみましょう。
https://forum.gitlab.com/
Stackoverflow
こちらのスタックオーバーフローでも活発に質問と回答が流れます。
https://stackoverflow.com/questions/tagged/gitlab
https://stackoverflow.com/collectives/gitlab
問題が判明したら
エラーの文言で検索すると、大抵同じ問題にぶつかった例を見つけることができるでしょう。
解決まであともう少し!
がんばってください。
Gitlab のアーキテクチャを手っ取り早く理解したい
Gitlabは複数のミドルウェアが組み合わさった複雑なシステムです。
公式情報は下記にあります。
各種コンポーネントの名称と役割
名称 | 概要 | プラン |
---|---|---|
Certificate Management | 認証管理。TLS設定、Let's Encryptなど | CE & EE |
Consul | データベースノードの検出、フェイルオーバー | EEのみ |
Database Migrations | データベースのマイグレーション(移行) | CE & EE |
Elasticsearch | GitLab内の高機能全文検索 | EEのみ |
Gitaly | Git RPCサービス。GitLabが行うすべてのGit呼び出しを処理 | CE & EE |
GitLab Exporter | GitLabメトリクスを生成 | CE & EE |
GitLab Geo Node | 地理的に分散したGitLabノード | EEのみ |
GitLab Pages | 静的ページをホスト | CE & EE |
GitLab Kubernetes Agent | Kubernetesクラスターを統合 | EEのみ |
GitLab self-monitoring: Alertmanager | Prometheusからのアラートをグループ化、ルーティング | CE & EE |
GitLab self-monitoring: Grafana | メトリックスダッシュボード | CE & EE |
GitLab self-monitoring: Jaeger | GitLabインスタンスが生成したViewのトレース | CE & EE |
GitLab self-monitoring: Prometheus | 時系列データベース、メトリクス収集、クエリサービス | CE & EE |
GitLab self-monitoring: Sentry | GitLabインスタンスで発生したエラーの追跡 | CE & EE |
GitLab Shell | SSHセッションでのgit処理 | CE & EE |
GitLab Workhorse | スマートなリバースプロキシ。大規模なHTTPリクエストの処理 | CE & EE |
Inbound email (SMTP) | メッセージを受信して、課題(イシュー)を更新 | CE & EE |
Jaeger integration | デプロイされたアプリケーションの分散型トレース | EEのみ |
LDAP Authentication | LDAPディレクトリ・ユーザー認証 | CE & EE |
Mattermost | オープンソースのSlack代替サービス | CE & EE |
MinIO | オブジェクト・ストレージ・サービス | CE & EE |
NGINX | リクエストを適切なコンポーネントにルーティングし、SSL処理 | CE & EE |
Node Exporter | Prometheusエンドポイント | CE & EE |
Outbound email (SMTP) | 電子メールをユーザーへ送信 | CE & EE |
Patroni | PostgreSQL HAクラスターのリーダーとレプリケーションの管理 | EEのみ |
PgBouncer Exporter | PgBouncerメトリクスに関するPrometheusエンドポイント | CE & EE |
PgBouncer | データベース接続プーリング、フェイルオーバー | EEのみ |
PostgreSQL Exporter | PostgreSQL メトリクスのPrometheus エンドポイント | CE & EE |
PostgreSQL | データベース | CE & EE |
Praefect | 任意のGitクライアントとGitalyストレージノード間の透過プロキシ | CE & EE |
Puma(GitLab Rails) | ウェブインターフェイスとAPIへのリクエスト処理 | CE & EE |
Redis Exporter | RedisメトリクスのPrometheusエンドポイント | CE & EE |
Redis | キャッシングサービス | CE & EE |
Registry | イメージのプッシュ/プルを可能にするコンテナレジストリ | CE & EE |
Runner | GitLab CI/CDジョブの実行 | CE & EE |
Sentry integration | デプロイされたアプリのエラートラッキング | CE & EE |
Sidekiq | バックグラウンドジョブプロセッサ | CE & EE |