温馨提示×

GitLab在Ubuntu上的日志分析

小樊
42
2026-01-01 11:18:05
栏目: 智能运维

Ubuntu上GitLab日志分析实操指南

一 日志位置与获取方式

  • 使用 Omnibus 包安装时,日志集中在 /var/log/gitlab/,按组件分目录存放;也可通过 gitlab-ctl tail 实时查看。常用路径与用途如下:
    | 组件/用途 | 日志路径 | 常用命令示例 | |—|—|—| | Rails 应用 | /var/log/gitlab/gitlab-rails/production.log | sudo tail -f /var/log/gitlab/gitlab-rails/production.log | | Rails JSON 异常 | /var/log/gitlab/gitlab-rails/production_json.log | sudo tail -f /var/log/gitlab/gitlab-rails/production_json.log | | Nginx 访问/错误 | /var/log/gitlab/nginx/{access.log,error.log} | sudo tail -f /var/log/gitlab/nginx/gitlab_error.log | | Sidekiq 后台任务 | /var/log/gitlab/sidekiq/current | sudo tail -f /var/log/gitlab/sidekiq/current | | Unicorn/Puma 工作进程 | /var/log/gitlab/{unicorn, puma}/*.log | sudo tail -f /var/log/gitlab/unicorn/current | | GitLab Shell(SSH) | /var/log/gitlab/gitlab-shell/gitlab-shell.log | sudo tail -f /var/log/gitlab/gitlab-shell/gitlab-shell.log | | 全局实时日志 | — | sudo gitlab-ctl tail | | 指定文件实时日志 | — | sudo gitlab-ctl tail nginx/gitlab_error.log |
  • 若需系统级视角,可用 journalctl 查看相关单元日志(如 gitlab-runsvdir 等),示例:sudo journalctl -u gitlab-runsvdir -b。以上路径与命令适用于 Ubuntu 上的 Omnibus GitLab。

二 常用分析命令与过滤技巧

  • 实时观察全部组件:sudo gitlab-ctl tail;实时观察单个组件:sudo gitlab-ctl tail sidekiq。
  • 按时间窗口检索:sudo journalctl --since “2025-04-20 09:00” --until “2025-04-23 12:00”。
  • 按服务过滤:sudo journalctl -u gitlab-rails;按启动会话过滤:sudo journalctl -u gitlab-runsvdir -b
  • 关键字定位错误:
    • Rails 异常:grep -i “exception|error|failed” /var/log/gitlab/gitlab-rails/production.log
    • Nginx 错误:grep -i “error” /var/log/gitlab/nginx/gitlab_error.log
    • Sidekiq 失败任务:grep -i “fail|retry” /var/log/gitlab/sidekiq/current
  • 统计与排查:
    • 统计 5xx 响应数:awk ‘$9 ~ /^5[0-9]{2}$/ {count++} END {print “5xx count:”, count}’ /var/log/gitlab/nginx/access.log
    • 查看最慢的 10 条 Rails 请求(JSON 日志):tail -n 10000 /var/log/gitlab/gitlab-rails/production_json.log | jq -r ‘select(.duration_s) | “(.duration_s)\t(.method)\t(.path)”’ | sort -nr | head
  • 提示:Rails 的 production.log 为文本日志,适合 grep/awk;production_json.log 为结构化 JSON,建议配合 jq 解析。

三 典型故障的日志定位路径

  • 502/504 网关错误:
    • 先看 /var/log/gitlab/nginx/gitlab_error.log 是否出现 upstream 不可用;
    • 再查应用进程(如 Unicorn/Puma)是否反复重启:tail -f /var/log/gitlab/unicorn/current 或 /var/log/gitlab/puma/current;
    • 若看到 “master failed to start, check stderr log for details”,优先检查 stderr 与数据库连接、内存等资源。
  • 后台任务堆积/失败:tail -f /var/log/gitlab/sidekiq/current,关注 “fail/retry/backtrace”。
  • SSH 拉取/推送异常:tail -f /var/log/gitlab/gitlab-shell/gitlab-shell.log,关注权限、密钥与 git 命令错误。
  • 权限/仓库相关错误:tail -f /var/log/gitlab/gitlab-rails/production.log,检索 “permission denied/access denied”。
  • 以上路径与现象在 Omnibus 部署的 Ubuntu 上通用,502 场景结合 Nginx 与 Unicorn/Puma 日志能快速定位根因。

四 日志轮转与长期分析

  • 使用 logrotate 管理日志轮转与保留,可在 /etc/gitlab/gitlab.rb 中自定义:
    • 示例:logging[‘logrotate_frequency’] = “daily”;logging[‘logrotate_rotate’] = 30;修改后执行 sudo gitlab-ctl reconfigure 生效。
  • 集中化分析建议引入 ELK Stack(Elasticsearch + Logstash + Kibana)Graylog,将 /var/log/gitlab/ 通过 Filebeat 等采集器送入集中平台,做可视化与告警;同时可结合 Prometheus + Grafana 做指标监控与面板展示,与日志联动排查。

0