ubuntu gitlab如何监控日志
小樊
34
2025-12-22 17:17:35
Ubuntu 上 GitLab 日志监控实操指南
一 快速定位与实时查看
- 使用 Omnibus 提供的命令行工具查看实时日志与指定组件日志:
- 实时查看所有服务日志:sudo gitlab-ctl tail
- 查看某一组件日志:sudo gitlab-ctl tail gitlab-rails
- 查看具体日志文件:sudo gitlab-ctl tail nginx/gitlab_error.log
- 直接读取日志文件目录(适合配合 grep、less、awk 等分析):
- 主要日志目录:/var/log/gitlab
- 常见文件:
- Rails 应用日志:/var/log/gitlab/gitlab-rails/production.log、production_json.log
- Nginx 访问与错误:/var/log/gitlab/nginx/gitlab_access.log、gitlab_error.log
- Sidekiq 后台任务:/var/log/gitlab/sidekiq/current
- GitLab Shell:/var/log/gitlab/gitlab-shell/gitlab-shell.log
- 使用 systemd 查看服务日志(若你的 GitLab 以 systemd 单元运行):
- 示例:sudo journalctl -u gitlab-rails -f(实时跟踪),可按时间过滤:–since “2025-12-22 00:00:00” --until “2025-12-22 12:00:00”。
二 集中监控与告警方案
- 轻量集中式日志(syslog/UDP):
- 在 /etc/gitlab/gitlab.rb 中配置(企业版功能):
- logging[‘udp_log_shipping_host’] = ‘192.0.2.10’
- logging[‘udp_log_shipping_port’] = 514
- 重新配置并重启:sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart。该方式将日志以 syslog 风格发送到远端日志服务器,便于统一采集与归档。
- 可视化与检索(ELK/EFK 或 Graylog):
- 将 /var/log/gitlab/ 通过 Filebeat/rsyslog 采集到 Elasticsearch,使用 Kibana 建立仪表盘与告警;或使用 Graylog 做集中存储、检索与告警。
- 指标与性能监控(与日志互补):
- GitLab 内置 Prometheus 指标端点,可结合 Grafana 做可视化与阈值告警,用于观测请求延迟、作业队列、Puma/Unicorn、PostgreSQL、Redis 等关键指标。
三 日志轮转与保留策略
- Omnibus 内置 logrotate 管理日志切割、压缩与保留,可在 /etc/gitlab/gitlab.rb 自定义:
- 全局默认示例:
- logging[‘logrotate_frequency’] = “daily”
- logging[‘logrotate_rotate’] = 30
- logging[‘logrotate_compress’] = “compress”
- logging[‘logrotate_method’] = “copytruncate”
- 按服务覆盖(如 Nginx):
- nginx[‘logrotate_size’] = “200M”
- 修改后执行:sudo gitlab-ctl reconfigure。
- 组件级日志(Runit/svlogd)保留参数(同样在 gitlab.rb 中):
- 示例:logging[‘svlogd_size’] = 200 * 1024 * 1024(单文件约 200MB)
- logging[‘svlogd_num’] = 30(保留 30 个)
- logging[‘svlogd_filter’] = “gzip”(压缩)
- 说明:svlogd 主要覆盖由 Runit 管理的组件日志,与 logrotate 管理的日志类型有所区分。
四 高频监控命令与告警示例
- 实时观察错误与访问异常:
- Rails 错误关键字:sudo gitlab-ctl tail gitlab-rails | grep -i “error|exception|failed”
- Nginx 5xx:sudo gitlab-ctl tail nginx/gitlab_error.log | grep " 5[0-9][0-9] "
- Sidekiq 失败任务:sudo tail -f /var/log/gitlab/sidekiq/current | grep -i “failed|retry”
- 按时间窗口检索并导出:
- 例如查看当日 Rails 日志中的异常并导出到文件:
- sudo journalctl -u gitlab-rails --since today | grep -i “exception” > /tmp/gitlab_errors_$(date +%F).log
- 简单阈值告警脚本思路(示例为 Nginx 5xx 计数):
- COUNT=$(sudo gitlab-ctl tail --lines 1000 nginx/gitlab_error.log | grep -c " 5[0-9][0-9] "); if [ “$COUNT” -gt 10 ]; then echo “Nginx 5xx > 10 in last 1000 lines” | mail -s “GitLab Nginx Alert” ops@example.com; fi
- 建议将以上命令纳入 cron 或 systemd Timer,并结合 Prometheus Alertmanager/日志平台规则实现更稳定与可维护的告警。