极狐 GitLab

使用 Prometheus 监控 极狐GitLab

Tier: 基础版,专业版,旗舰版

Offering: 私有化部署

Prometheus 是一款强大的时序监控服务,为监控 极狐GitLab 和其他软件产品提供了灵活的平台。

极狐GitLab 提供与 Prometheus 集成的开箱即用监控,可对 极狐GitLab 服务进行高质量的时序监控。

本页列出的 Prometheus 和各种导出器均捆绑在 Linux 软件包中。请查看各导出器的文档,了解其添加的时间线。对于自行编译的安装,您必须自行安装。在后续版本中,将捕获更多 极狐GitLab 指标。

Prometheus 服务默认开启。

Prometheus 及其导出器不对用户进行认证,任何可访问它们的人均可使用。

Prometheus 工作原理#

Prometheus 通过定期连接数据源,并通过各种导出器采集其性能指标。要查看和处理这些监控数据,您可以 直接连接到 Prometheus,或使用 Grafana 之类的仪表板工具。

配置 Prometheus#

对于自行编译的安装,您必须自行安装和配置。

Prometheus 及其导出器默认开启。 Prometheus 以 gitlab-prometheus 用户身份运行,并监听 http://localhost:9090。默认情况下,Prometheus 仅可从 极狐GitLab 服务器本身访问。 每个导出器都会自动设置为 Prometheus 的监控目标,除非单独禁用。

要禁用 Prometheus 及其所有导出器,以及将来添加的任何导出器:

  1. 编辑 /etc/gitlab/gitlab.rb

  2. 添加或查找并取消注释以下行,确保它们设置为 false

    ruby
    prometheus_monitoring['enable'] = false sidekiq['metrics_enabled'] = false # 已默认设置为 `false`,但您可以显式禁用以确保万无一失 puma['exporter_enabled'] = false
  3. 保存文件并重新配置 极狐GitLab 以使更改生效。

更改 Prometheus 监听的端口和地址#

您可以更改 Prometheus 监听的端口,但不建议这样做。 此更改可能会影响或与运行在 极狐GitLab 服务器上的其他服务发生冲突。风险自负。

要从 极狐GitLab 服务器外部访问 Prometheus, 请更改 Prometheus 监听的地址/端口:

  1. 编辑 /etc/gitlab/gitlab.rb

  2. 添加或查找并取消注释以下行:

    ruby
    prometheus['listen_address'] = 'localhost:9090'

    localhost:9090 替换为您希望 Prometheus 监听的地址或端口。如果您想允许非 localhost 的主机访问 Prometheus,可省略主机部分,或使用 0.0.0.0 允许公开访问:

    ruby
    prometheus['listen_address'] = ':9090' # or prometheus['listen_address'] = '0.0.0.0:9090'
  3. 保存文件并重新配置 极狐GitLab 以使更改生效

添加自定义抓取配置#

您可以通过在 /etc/gitlab/gitlab.rb 中编辑 prometheus['scrape_configs'],使用 Prometheus 抓取目标配置 语法,为 Linux 软件包绑定的 Prometheus 配置额外的抓取目标。

以下是一个抓取 http://1.1.1.1:8060/probe?param_a=test&param_b=additional_test 的配置示例:

ruby
1prometheus['scrape_configs'] = [ 2 { 3 'job_name': 'custom-scrape', 4 'metrics_path': '/probe', 5 'params' => { 6 'param_a' => ['test'], 7 'param_b' => ['additional_test'], 8 }, 9 'static_configs' => [ 10 'targets' => ['1.1.1.1:8060'], 11 ], 12 }, 13]

使用 Linux 软件包搭建独立 Prometheus#

您可以使用 Linux 软件包配置一台独立的监控节点,运行 Prometheus。 可以配置外部 Grafana 连接到此监控节点以展示仪表板。

对于多节点 极狐GitLab 部署,建议使用独立的监控节点。

以下步骤是使用 Linux 软件包配置运行 Prometheus 的监控节点所需的最小配置:

  1. SSH 进入监控节点。

  2. 按照 极狐GitLab 下载页面上的步骤 1 和 2 安装 您所需的 Linux 软件包,但不要执行后续步骤。

  3. 确保收集 Consul 服务器节点的 IP 地址或 DNS 记录,以供下一步使用。

  4. 编辑 /etc/gitlab/gitlab.rb 并添加以下内容:

    ruby
    1roles ['monitoring_role'] 2 3external_url 'http://gitlab.example.com' 4 5# Prometheus 6prometheus['listen_address'] = '0.0.0.0:9090' 7prometheus['monitor_kubernetes'] = false 8 9# 启用 Prometheus 的服务发现 10consul['enable'] = true 11consul['monitoring_service_discovery'] = true 12consul['configuration'] = { 13 retry_join: %w(10.0.0.1 10.0.0.2 10.0.0.3), # 地址可以是 IP 或 FQDN 14} 15 16# Nginx - 用于 Grafana 访问 17nginx['enable'] = true
  5. 运行 sudo gitlab-ctl reconfigure 以编译配置。

下一步是告诉所有其他节点监控节点的位置:

  1. 编辑 /etc/gitlab/gitlab.rb,并添加或查找并取消注释以下行:

    ruby
    # 可以是 FQDN 或 IP gitlab_rails['prometheus_address'] = '10.0.0.1:9090'

    其中 10.0.0.1:9090 是 Prometheus 节点的 IP 地址和端口。

  2. 保存文件并重新配置 极狐GitLab 以使更改生效。

在通过 consul['monitoring_service_discovery'] = true 启用基于服务发现的监控后, 请确保未在 /etc/gitlab/gitlab.rb 中设置 prometheus['scrape_configs']。在 /etc/gitlab/gitlab.rb 中同时设置 consul['monitoring_service_discovery'] = trueprometheus['scrape_configs'] 会导致错误。

使用外部 Prometheus 服务器#

Prometheus 和大多数导出器不支持身份认证。我们不建议将它们暴露在本地网络之外。

需要进行一些配置更改,以允许外部 Prometheus 服务器监控 极狐GitLab。

要使用外部 Prometheus 服务器:

  1. 编辑 /etc/gitlab/gitlab.rb

  2. 禁用捆绑的 Prometheus:

    ruby
    prometheus['enable'] = false
  3. 将每个捆绑服务的导出器设置为监听网络地址,例如:

    ruby
    1node_exporter['listen_address'] = '0.0.0.0:9100' 2gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229" 3 4# Rails 节点 5gitlab_exporter['listen_address'] = '0.0.0.0' 6gitlab_exporter['listen_port'] = '9168' 7registry['debug_addr'] = '0.0.0.0:5001' 8 9# Sidekiq 节点 10sidekiq['listen_address'] = '0.0.0.0' 11 12# Redis 节点 13redis_exporter['listen_address'] = '0.0.0.0:9121' 14 15# PostgreSQL 节点 16postgres_exporter['listen_address'] = '0.0.0.0:9187' 17 18# Gitaly 节点 19gitaly['configuration'] = { 20 # ... 21 prometheus_listen_addr: '0.0.0.0:9236', 22} 23 24# Pgbouncer 节点 25pgbouncer_exporter['listen_address'] = '0.0.0.0:9188'
  4. 如有必要,使用官方安装说明 安装和设置一个专用的 Prometheus 实例。

  5. 所有 极狐GitLab Rails(Puma、Sidekiq)服务器上,设置 Prometheus 服务器的 IP 地址和监听端口。例如:

    ruby
    gitlab_rails['prometheus_address'] = '192.168.0.1:9090'
  6. 要抓取 NGINX 指标,您还必须配置 NGINX 以允许 Prometheus 服务器的 IP。例如:

    ruby
    1nginx['status']['options'] = { 2 "server_tokens" => "off", 3 "access_log" => "off", 4 "allow" => "192.168.0.1", 5 "deny" => "all", 6}

    如果有多个 Prometheus 服务器,您也可以指定多个 IP 地址:

    ruby
    1nginx['status']['options'] = { 2 "server_tokens" => "off", 3 "access_log" => "off", 4 "allow" => ["192.168.0.1", "192.168.0.2"], 5 "deny" => "all", 6}
  7. 要允许 Prometheus 服务器从极狐GitLab 指标端点拉取数据,请将 Prometheus 服务器 IP 地址添加到监控 IP 允许列表

    ruby
    gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
  8. 由于我们将每个捆绑服务的导出器设置为监听网络地址, 请更新实例的防火墙,仅允许来自您的 Prometheus IP 的流量访问已启用的导出器。可用的导出器服务及其相应端口的完整参考列表可供查阅。

  9. 重新配置 极狐GitLab 以应用更改。

  10. 编辑 Prometheus 服务器的配置文件。

  11. 将各节点的导出器添加到 Prometheus 服务器的 抓取目标配置 中。 例如,使用 static_configs 的示例片段:

    yaml
    1scrape_configs: 2 - job_name: nginx 3 static_configs: 4 - targets: 5 - 1.1.1.1:8060 6 - job_name: redis 7 static_configs: 8 - targets: 9 - 1.1.1.1:9121 10 - job_name: postgres 11 static_configs: 12 - targets: 13 - 1.1.1.1:9187 14 - job_name: node 15 static_configs: 16 - targets: 17 - 1.1.1.1:9100 18 - job_name: gitlab-workhorse 19 static_configs: 20 - targets: 21 - 1.1.1.1:9229 22 - job_name: gitlab-rails 23 metrics_path: "/-/metrics" 24 scheme: https 25 static_configs: 26 - targets: 27 - 1.1.1.1 28 - job_name: gitlab-sidekiq 29 static_configs: 30 - targets: 31 - 1.1.1.1:8082 32 - job_name: gitlab_exporter_database 33 metrics_path: "/database" 34 static_configs: 35 - targets: 36 - 1.1.1.1:9168 37 - job_name: gitlab_exporter_sidekiq 38 metrics_path: "/sidekiq" 39 static_configs: 40 - targets: 41 - 1.1.1.1:9168 42 - job_name: gitaly 43 static_configs: 44 - targets: 45 - 1.1.1.1:9236 46 - job_name: registry 47 static_configs: 48 - targets: 49 - 1.1.1.1:5001

    该片段中的gitlab-rails 任务假定 极狐GitLab 可通过 HTTPS 访问。如果您的 部署未使用 HTTPS,则任务配置需调整为使用 http 方案和端口 80。

  12. 重新加载 Prometheus 服务器。

配置存储保留大小#

Prometheus 有几个用于配置本地存储的自定义标志:

  • storage.tsdb.retention.time:何时删除旧数据。默认为 15d。如果此标志设置为非默认值,将覆盖 storage.tsdb.retention
  • storage.tsdb.retention.size:(实验性)要保留的存储块的最大字节数。 最旧的数据会先被删除。默认为 0(禁用)。此标志为实验性,未来版本可能会更改。支持的单位:BKBMBGBTBPBEB。例如, 512MB

要配置存储保留大小:

  1. 编辑 /etc/gitlab/gitlab.rb

    ruby
    1prometheus['flags'] = { 2 'storage.tsdb.path' => "/var/opt/gitlab/prometheus/data", 3 'storage.tsdb.retention.time' => "7d", 4 'storage.tsdb.retention.size' => "2GB", 5 'config.file' => "/var/opt/gitlab/prometheus/prometheus.yml" 6}
  2. 重新配置 极狐GitLab:

    shell
    sudo gitlab-ctl reconfigure

查看性能指标#

您可以访问 Prometheus 默认提供的仪表板 http://localhost:9090

如果在您的 极狐GitLab 实例上启用了 SSL,由于 HSTS,您可能无法在使用相同 FQDN 的同一浏览器上同时访问 Prometheus 和 极狐GitLab。 存在一个 极狐GitLab 测试项目 以提供访问,但在此期间有一些 变通方法:使用独立的 FQDN、使用服务器 IP、使用单独的浏览器访问 Prometheus、重置 HSTS,或 使用 NGINX 代理

Prometheus 收集的性能数据可以直接在 Prometheus 控制台中查看,或通过兼容的仪表板工具查看。 Prometheus 界面提供了一种灵活的查询语言,用于处理收集到的数据,并可视化输出。 要使用功能更全面的仪表板,可以使用 Grafana,它 官方支持 Prometheus

Prometheus 查询示例#

以下是一些可以使用的 Prometheus 查询示例。

这些示例可能不适用于所有设置。可能需要进一步调整。

  • % CPU 利用率1 - avg without (mode,cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
  • % 可用内存((node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) or ((node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes)) * 100
  • 传输数据量rate(node_network_transmit_bytes_total{device!="lo"}[5m])
  • 接收数据量rate(node_network_receive_bytes_total{device!="lo"}[5m])
  • 磁盘读取 IOPSsum by (instance) (rate(node_disk_reads_completed_total[1m]))
  • 磁盘写入 IOPSsum by (instance) (rate(node_disk_writes_completed_total[1m]))
  • 通过 极狐GitLab 事务计数的 RPSsum(irate(gitlab_transaction_duration_seconds_count{controller!~'HealthController|MetricsController'}[1m])) by (controller, action)

将 Prometheus 作为 Grafana 数据源#

Grafana 允许您将 Prometheus 性能指标导入为数据源, 并将这些指标渲染为图表和仪表板,这有助于可视化。

要为单服务器 极狐GitLab 设置添加 Prometheus 仪表板:

  1. 在 Grafana 中创建一个新的数据源。
  2. 对于类型,选择 Prometheus
  3. 命名您的数据源(例如 GitLab)。
  4. Prometheus 服务器 URL 中,添加您的 Prometheus 监听地址。
  5. HTTP 方法 设置为 GET
  6. 保存并测试您的配置,以验证其是否正常工作。

极狐GitLab 指标#

极狐GitLab 监控其自身内部服务指标,并在 /-/metrics 端点提供这些指标。与其他导出器不同,此端点需要进行认证,因为它与用户流量在同一 URL 和端口上提供。

了解更多关于极狐GitLab 指标 的信息。

捆绑软件指标#

Linux 软件包中捆绑的许多 极狐GitLab 依赖项都已预先配置为导出 Prometheus 指标。

Node exporter#

节点导出器允许您测量各种机器资源,例如 内存、磁盘和 CPU 利用率。

了解更多关于节点导出器的信息

Web exporter#

Web 导出器是一个专用的指标服务器,允许将最终用户流量和 Prometheus 流量 分离到两个独立的应用程序中,以提高性能和可用性。

了解更多关于 Web 导出器的信息

Redis exporter#

Redis 导出器允许您测量各种 Redis 指标。

了解更多关于 Redis 导出器的信息

PostgreSQL exporter#

PostgreSQL 导出器允许您测量各种 PostgreSQL 指标。

了解更多关于 PostgreSQL 导出器的信息

PgBouncer exporter#

PgBouncer 导出器允许您测量各种 PgBouncer 指标。

了解更多关于 PgBouncer 导出器的信息

Registry exporter#

Registry 导出器允许您测量各种 Registry 指标。

了解更多关于 Registry 导出器的信息

极狐GitLab exporter#

极狐GitLab 导出器允许您测量从 Redis 和数据库中提取的各种 极狐GitLab 指标。

了解更多关于 极狐GitLab 导出器的信息

故障排除#

/var/opt/gitlab/prometheus 占用过多磁盘空间#

如果您使用 Prometheus 监控:

  1. 禁用 Prometheus
  2. 删除 /var/opt/gitlab/prometheus 下的数据。

如果您正在使用 Prometheus 监控:

  1. 停止 Prometheus(在运行时删除数据可能导致数据损坏):

    shell
    gitlab-ctl stop prometheus
  2. 删除 /var/opt/gitlab/prometheus/data 下的数据。

  3. 重新启动服务:

    shell
    gitlab-ctl start prometheus
  4. 验证服务已启动并运行:

    shell
    gitlab-ctl status prometheus
  5. 可选。配置存储保留大小

监控节点未收到数据#

如果监控节点未收到任何数据,请检查导出器是否正在捕获数据:

shell
curl "http[s]://localhost:<EXPORTER LISTENING PORT>/metrics"

shell
curl "http[s]://localhost:<EXPORTER LISTENING PORT>/-/metrics"