Ubuntu上 GitLab 的监控与日志实践指南
一 日志查看与定位
- 使用 Omnibus 提供的命令行工具查看与跟踪日志:
- 实时查看所有组件日志:sudo gitlab-ctl tail
- 实时查看某组件日志:sudo gitlab-ctl tail nginx/gitlab_error.log
- 直接读取日志文件(按组件分类,位于 /var/log/gitlab):
- Rails 业务日志:/var/log/gitlab/gitlab-rails/production.log
- Rails JSON 异常日志:/var/log/gitlab/gitlab-rails/production_json.log
- Nginx 访问与错误:/var/log/gitlab/nginx/gitlab_access.log、/var/log/gitlab/nginx/gitlab_error.log
- Sidekiq 后台任务:/var/log/gitlab/sidekiq/current
- Unicorn/Puma 工作进程:/var/log/gitlab/unicorn/unicorn_stderr.log
- 使用 systemd 查看服务日志(若实例以 systemd 管理):
- 实时跟踪:sudo journalctl -u gitlab -f
- 时间范围:sudo journalctl -u gitlab --since “2025-04-20 09:00” --until “2025-04-23 12:00”
- Web 管理界面辅助查看:管理员可在 Admin Area → Monitoring → Logs 浏览部分系统日志(需启用日志收集功能)。
二 日志轮转与保留
- 日志轮转机制:GitLab 使用 logrotate 对组件日志进行按大小/时间切割、压缩与清理,默认策略已启用,可通过 /etc/gitlab/gitlab.rb 自定义轮转参数(如保留天数、压缩方式等),修改后执行 sudo gitlab-ctl reconfigure 使配置生效。
- 系统日志持久化:若需保留 systemd journal 日志,编辑 /etc/systemd/journald.conf,设置如 Storage=persistent、SystemMaxUse=、MaxRetentionSec= 等参数,然后重启 journald 服务,避免 /run/log/journal 下的日志在重启后丢失。
三 监控方案与关键指标
- 系统层监控:在 Ubuntu 上部署 Prometheus + Grafana 是通用做法。Prometheus 负责采集时序指标,Grafana 用于可视化与告警面板展示。
- 集成方式:
- 方式 A(推荐):使用 GitLab 内置监控,在 /etc/gitlab/gitlab.rb 中启用并暴露 Prometheus 端点,由外部 Prometheus 抓取;Grafana 导入 GitLab 官方或社区仪表盘进行可视化与告警配置。
- 方式 B:部署 GitLab Exporter 采集更细粒度指标,并在 Prometheus 中新增抓取任务(job)指向 Exporter 地址。
- 关键指标建议:
- 资源与性能:CPU、内存、磁盘 IO、网络吞吐(节点级)
- 业务与组件:请求延迟、HTTP 5xx 错误率、Sidekiq 队列长度与重试率、Unicorn/Puma 进程健康与排队
- 存储与数据库:仓库对象数量、PostgreSQL 连接与慢查询、磁盘空间使用率
- 告警示例(Prometheus 规则范式):当 CPU 持续高于阈值时触发
- 规则片段:
- alert: GitLabHighCPU
expr: 1 - avg by(instance)(rate(node_cpu_seconds_total{mode=“idle”}[5m])) > 0.8
for: 5m
labels: severity=warning
annotations:
summary: “High CPU Usage on GitLab Server”
description: “CPU usage is above 80% for more than 5 minutes”。
四 日志集中与分析
- 集中化方案:将 /var/log/gitlab/ 通过 Filebeat/rsyslog 发送至 ELK(Elasticsearch + Logstash + Kibana) 或 Graylog,实现统一检索、可视化与告警;在采集器中配置多行合并(如 Rails 堆栈)、字段解析与脱敏规则。
- 合规与审计:定期审计 gitlab-rails/ 与 sidekiq/ 日志中的异常行为,结合告警规则实现主动发现;注意日志中可能包含 API 密钥、令牌、密码 等敏感信息,需设置访问权限与脱敏策略。
五 快速排障清单
- 服务异常或 5xx 增多:
- 实时查看:sudo gitlab-ctl tail nginx/gitlab_error.log
- 组件健康:sudo gitlab-ctl status
- 系统层日志:sudo journalctl -u gitlab -f --since “5 minutes ago”
- CI/CD 任务失败或卡住:
- 查看任务日志:/var/log/gitlab/gitlab-rails/production.log、/var/log/gitlab/sidekiq/current
- 必要时通过 Admin Area → Monitoring → Logs 辅助定位
- 磁盘告警或写入失败:
- 检查磁盘与 Inode:df -h、df -i
- 核查日志占用:sudo du -sh /var/log/gitlab/,并按需调整 logrotate 保留策略。