温馨提示×

GitLab在Ubuntu上的监控与日志

小樊
32
2025-12-12 20:38:14
栏目: 智能运维

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=persistentSystemMaxUse=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 -hdf -i
    • 核查日志占用:sudo du -sh /var/log/gitlab/,并按需调整 logrotate 保留策略。

0