温馨提示×

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.logproduction_json.log
      • Nginx 访问与错误:/var/log/gitlab/nginx/gitlab_access.loggitlab_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
  • 建议将以上命令纳入 cronsystemd Timer,并结合 Prometheus Alertmanager/日志平台规则实现更稳定与可维护的告警。

0