本地GitLab故障解决

主要目的

如果有人大声喊道「Gitlab不能用了!」。

如果遇到与GitLab相关的问题,根据我的经验,它可以稳定运行多年。然而,当出现问题时,有时候我们不知道从何处着手解决。我希望本文能对有此疑虑的人有所帮助。

方便的日本语信息网站

这个网站是必须看的!

GitLab的日本語資訊網站
https://www.gitlab.jp/links/

GitLab日本語情報サイト是一个由个人创建的社区网站,旨在用日语分享有关GitLab的信息。

Qiita是一个 GitLab-jp 组织创建的社区网站。

本次的操作环境

CentOS Linux 7.9.2009版本
GitLab 14.4.1版本

故障排除的初期措施

首先进行基本服务器状态的确认。经过详细调查后,最后才发现只是磁盘容量不足,感到非常遗憾…
top   #どのプロセスがいちばん動作しているのか
df -h #ディスク容量が足りているか
tail /var/log/secure #念のためログイン履歴を確認

想要确认Gitlab的版本。

可以使用grep gitlab /opt/gitlab/version-manifest.txt命令来检查Gitlab的版本,即使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” 命令,您可以确认守护进程是否正常运行。如果其中显示的状态是 “down” 而不是 “run”,则表示该守护进程已停止。

本家文档链接: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

本家文档:https://doc.gitlab.com/ee/administration/restart_gitlab.html

用tail命令观察/确认当前日志

通过sudo gitlab-ctl tail命令,您可以综合调查最新的日志。
如果有任何问题发生,很可能会显示错误信息。

以下是GitLab官方文档的链接: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/

堆栈溢出

在这个Stack Overflow中,问题和回答非常活跃地流动。
https://stackoverflow.com/questions/tagged/gitlab
https://stackoverflow.com/collectives/gitlab

一旦问题被发现

如果你使用错误提示来搜索,你很可能会找到遇到相同问题的案例。
就快解决了,再加把劲!加油!

我想要快速地理解Gitlab的架构。

Gitlab 是一个由多个中间件组合而成的复杂系统。
官方信息位于下方链接。

各种组件的名称和作用

名称概要プランCertificate Management認証管理。TLS設定、Let’s EncryptなどCE & EEConsulデータベースノードの検出、フェイルオーバーEEのみDatabase Migrationsデータベースのマイグレーション(移行)CE & EEElasticsearchGitLab内の高機能全文検索EEのみGitalyGit RPCサービス。GitLabが行うすべてのGit呼び出しを処理CE & EEGitLab ExporterGitLabメトリクスを生成CE & EEGitLab Geo Node地理的に分散したGitLabノードEEのみGitLab Pages静的ページをホストCE & EEGitLab Kubernetes AgentKubernetesクラスターを統合EEのみGitLab self-monitoring: AlertmanagerPrometheusからのアラートをグループ化、ルーティングCE & EEGitLab self-monitoring: GrafanaメトリックスダッシュボードCE & EEGitLab self-monitoring: JaegerGitLabインスタンスが生成したViewのトレースCE & EEGitLab self-monitoring: Prometheus時系列データベース、メトリクス収集、クエリサービスCE & EEGitLab self-monitoring: SentryGitLabインスタンスで発生したエラーの追跡CE & EEGitLab ShellSSHセッションでのgit処理CE & EEGitLab Workhorseスマートなリバースプロキシ。大規模なHTTPリクエストの処理CE & EEInbound email (SMTP)メッセージを受信して、課題(イシュー)を更新CE & EEJaeger integrationデプロイされたアプリケーションの分散型トレースEEのみLDAP AuthenticationLDAPディレクトリ・ユーザー認証CE & EEMattermostオープンソースのSlack代替サービスCE & EEMinIOオブジェクト・ストレージ・サービスCE & EENGINXリクエストを適切なコンポーネントにルーティングし、SSL処理CE & EENode ExporterPrometheusエンドポイントCE & EEOutbound email (SMTP)電子メールをユーザーへ送信CE & EEPatroniPostgreSQL HAクラスターのリーダーとレプリケーションの管理EEのみPgBouncer ExporterPgBouncerメトリクスに関するPrometheusエンドポイントCE & EEPgBouncerデータベース接続プーリング、フェイルオーバーEEのみPostgreSQL ExporterPostgreSQL メトリクスのPrometheus エンドポイントCE & EEPostgreSQLデータベースCE & EEPraefect任意のGitクライアントとGitalyストレージノード間の透過プロキシCE & EEPuma(GitLab Rails)ウェブインターフェイスとAPIへのリクエスト処理CE & EERedis ExporterRedisメトリクスのPrometheusエンドポイントCE & EERedisキャッシングサービスCE & EERegistryイメージのプッシュ/プルを可能にするコンテナレジストリCE & EERunnerGitLab CI/CDジョブの実行CE & EESentry integrationデプロイされたアプリのエラートラッキングCE & EESidekiqバックグラウンドジョブプロセッサCE & EE