Debian系统上分析 GitLab 日志的实用方法
一 日志获取与定位
- 使用 gitlab-ctl tail 实时查看:
- 查看全部:sudo gitlab-ctl tail
- 查看 Rails:sudo gitlab-ctl tail gitlab-rails
- 查看 Nginx 错误:sudo gitlab-ctl tail nginx/gitlab_error.log
- 直接读取日志文件(Omnibus 包默认目录 /var/log/gitlab):
- Rails 请求与异常:/var/log/gitlab/gitlab-rails/production.log、/var/log/gitlab/gitlab-rails/production_json.log
- 后台任务:/var/log/gitlab/sidekiq/current
- SSH/Git 操作:/var/log/gitlab/gitlab-shell/gitlab-shell.log
- Nginx 访问/错误:/var/log/gitlab/nginx/gitlab_access.log、/var/log/gitlab/nginx/gitlab_error.log
- 使用 journalctl 查看 systemd 单元日志(若 GitLab 以 systemd 管理):
- 全部 GitLab 服务:sudo journalctl -u gitlab
- Rails 服务:sudo journalctl -u gitlab-rails
- 时间范围:sudo journalctl --since “2025-12-01” --until “2025-12-13”
- 在 GitLab Web 界面查看 CI/CD 作业日志;或通过 API 获取作业输出:
- 示例:curl --header “PRIVATE-TOKEN: ” “https://gitlab.example.com/api/v4/projects/<project_id>/jobs/<job_id>/trace”。
二 常用分析命令与示例
- 快速检索错误与异常:
- 在 Rails 日志中查 ERROR:grep -i “error” /var/log/gitlab/gitlab-rails/production.log
- 查看 JSON 异常(便于结构化检索):less /var/log/gitlab/gitlab-rails/production_json.log
- 实时跟踪错误:tail -f /var/log/gitlab/gitlab-rails/production.log | grep -i “error”
- 定位耗时请求与慢 SQL(Rails 生产日志含 SQL 与耗时):
- 查找慢请求关键词(示例包含 Completed 与 ms 的慢响应):grep -E "Completed . in [0-9]{4,}ms" /var/log/gitlab/gitlab-rails/production.log*
- 后台任务异常排查:
- 查看 Sidekiq 错误:tail -n 200 /var/log/gitlab/sidekiq/current | grep -i “error”
- Nginx 访问与错误分析:
- Top IP 统计:awk ‘{print $1}’ /var/log/gitlab/nginx/gitlab_access.log | sort | uniq -c | sort -nr | head
- 4xx/5xx 统计:awk ‘$9 ~ /^[45]/ {print $9}’ /var/log/gitlab/nginx/gitlab_access.log | sort | uniq -c
- 组合检索(时间 + 关键词):
- 例如查看某日包含 failed 的 Rails 日志:grep “failed” /var/log/gitlab/gitlab-rails/production.log | grep “2025-12-12”
三 日志轮转与保留策略
- Omnibus 包内置 logrotate,可通过 /etc/gitlab/gitlab.rb 自定义:
- 示例(按日轮转、保留 30 天):
- logging[‘logrotate_frequency’] = “daily”
- logging[‘logrotate_rotate’] = 30
- 应用配置:sudo gitlab-ctl reconfigure
- 建议将日志保留周期与磁盘容量匹配,避免增长过快导致磁盘告警或写入失败。
四 集中化分析与可视化
- 将 /var/log/gitlab/ 通过 Filebeat 采集,送入 ELK Stack(Elasticsearch + Logstash + Kibana) 或 Graylog,实现:
- 全文检索与字段化分析(如 status、method、uri、user、ip、duration、sql、queue 等)
- 可视化仪表盘(请求量、错误率、P95/P99 延迟、Top 项目/用户、Sidekiq 积压等)
- 阈值告警(5xx 激增、登录失败暴增、Sidekiq 失败堆积等)
- 也可使用 Splunk 进行商业化的日志分析与告警。
五 常见问题排查路径
- 500/502/504 错误:
- Nginx 错误:/var/log/gitlab/nginx/gitlab_error.log
- Rails 异常:/var/log/gitlab/gitlab-rails/production.log、production_json.log
- 后端任务:/var/log/gitlab/sidekiq/current
- SSH/Git 拉取推送失败:
- /var/log/gitlab/gitlab-shell/gitlab-shell.log
- CI/CD 作业异常:
- Web 界面查看作业日志,或用 API 拉取作业输出进行离线分析
- 性能问题(慢页面/慢 API/慢 SQL):
- 在 production.log 中检索 Completed … in \d+ms,结合 uri、params、sql、duration 定位瓶颈。