Monitoring GitLab with Prometheus

Monitoring GitLab with Prometheus

Prometheus是一项功能强大的时间序列监视服务,为监视 GitLab 和其他软件产品提供了灵活的平台. GitLab 提供了 Prometheus 的开箱即用监视功能,可轻松访问 GitLab 服务的高质量时间序列监视.

Prometheus 的工作方式是定期连接到数据源,并通过收集其绩效指标. 要查看和使用监视数据,您可以直接连接到 Prometheus或使用仪表板工具(例如 .

Configuring Prometheus

注意:对于源安装,您必须自己安装和配置.

从 GitLab 9.0 开始,Prometheus 及其出口商默认情况下处于打开状态. Prometheus 将以用户身份运行,并监听http://localhost:9090 . 默认情况下,只能从 GitLab 服务器本身访问 Prometheus. 除非单独禁用,否则每个出口商将自动设置为 Prometheus 的监视目标.

要禁用 Prometheus 及其所有出口商以及将来添加的任何出口商,请执行以下操作:

  1. Edit /etc/gitlab/gitlab.rb
  2. 添加或查找并取消注释以下行,确保将其设置为false

  3. 保存文件并以使更改生效.

注意: Omnibus GitLab 8.17 中添加了以下更改. 尽管可能,但不建议更改 Prometheus 监听的端口,因为这可能会影响 GitLab 服务器上运行的其他服务或与之冲突. 继续需要您自担风险.

为了从 GitLab 服务器外部访问 Prometheus,您需要在prometheus['listen_address']设置 FQDN 或 IP. 更改 Prometheus 监听的地址/端口:

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

    1. prometheus['listen_address'] = 'localhost:9090'

    localhost:9090替换为您希望 Prometheus 监听的地址或端口. 如果要允许除localhost以外的其他主机访问 Prometheus,请忽略该主机,或使用0.0.0.0允许公共访问:

    1. prometheus['listen_address'] = ':9090'
    2. # or
    3. prometheus['listen_address'] = '0.0.0.0:9090'
  3. 保存文件并以使更改生效

Adding custom scrape configurations

您可以使用语法在/etc/gitlab/gitlab.rb编辑prometheus['scrape_configs'] , 为 Omnibus GitLab 捆绑的 Prometheus 配置其他刮擦目标.

这是刮取http://1.1.1.1:8060/probe?param_a=test&param_b=additional_test的示例配置:

Using an external Prometheus server

注意: Prometheus 和大多数导出器不支持身份验证. 我们不建议将它们公开在本地网络之外.

需要进行一些配置更改,才能由外部 Prometheus 服务器监视 GitLab. 对于建议使用外部服务器.

  1. Edit /etc/gitlab/gitlab.rb.
  2. 禁用捆绑的 Prometheus:

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

    1. gitlab_exporter['listen_address'] = '0.0.0.0'
    2. sidekiq['listen_address'] = '0.0.0.0'
    3. gitlab_exporter['listen_port'] = '9168'
    4. node_exporter['listen_address'] = '0.0.0.0:9100'
    5. redis_exporter['listen_address'] = '0.0.0.0:9121'
    6. postgres_exporter['listen_address'] = '0.0.0.0:9187'
    7. gitaly['prometheus_listen_addr'] = "0.0.0.0:9236"
    8. gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229"
  4. 如有必要,请使用安装并设置专用的 Prometheus 实例.

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

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

    1. nginx['status']['options'] = {
    2. "server_tokens" => "off",
    3. "allow" => "192.168.0.1",
    4. "deny" => "all",
    5. }
  7. 重新配置 GitLab以应用更改.

  8. 编辑 Prometheus 服务器的配置文件.
  9. 将每个节点的导出器添加到 Prometheus 服务器的 . 例如,使用static_configs的样本片段:

  10. 重新加载 Prometheus 服务器.

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

Prometheus 收集的性能数据可以在 Prometheus 控制台中直接查看,也可以通过兼容的仪表板工具查看. Prometheus 界面提供了一种灵活的查询语言 ,可与收集的数据一起使用,您可以在其中可视化输出. 要获得功能更全面的仪表板,可以使用 Grafana 并已 .

普罗米修斯样本查询:

  • 可用内存百分比: ((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
  • CPU 使用率百分比: 1 - avg without (mode,cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
  • 传输的数据: rate(node_network_transmit_bytes_total{device!="lo"}[5m])
  • 收到的数据: rate(node_network_receive_bytes_total{device!="lo"}[5m])

Prometheus as a Grafana data source

Grafana 允许您导入 Prometheus 性能指标作为数据源,并将指标呈现为图形和仪表板,这有助于可视化.

To add a Prometheus dashboard for a single server GitLab setup:

  1. 在 Grafana 中创建一个新的数据源.
  2. 命名您的数据源(如 GitLab).
  3. 在类型下拉框中选择Prometheus .
  4. 将您的 Prometheus 侦听地址添加为 URL,并设置对Browser访问权限.
  5. 将 HTTP 方法设置为GET .
  6. 保存并测试您的配置以验证其是否有效.

在 GitLab 9.3 中引入.

GitLab 监视其自身的内部服务指标,并使其在/-/metrics端点可用. 与其他导出器不同,此终结点需要身份验证,因为它可以在与用户流量相同的 URL 和端口上使用.

Bundled software metrics

Omnibus GitLab 中捆绑的许多 GitLab 依赖项都已预先配置为导出 Prometheus 指标.

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

Read more about the node exporter.

Redis exporter

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

Read more about the Redis exporter.

PostgreSQL exporter

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

Read more about the PostgreSQL exporter.

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

.

Registry exporter

注册表导出器允许您测量各种注册表指标.

.

GitLab exporter

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

.

版本历史

  • 在 GitLab 9.0 中引入.
  • 在 GitLab 9.4 中引入了 Pod 监控.

如果您的 GitLab 服务器在 Kubernetes 中运行,则 Prometheus 将从群集中的节点和带注释的 Pod 收集指标,包括每个容器上的性能数据. 如果您的 CI / CD 环境在同一群集中运行,这将特别有用,因为您可以使用来监视它们.

要禁用对 Kubernetes 的监视:

  1. Edit /etc/gitlab/gitlab.rb.
  2. 添加(或查找并取消注释)以下行并将其设置为 :

    1. prometheus['monitor_kubernetes'] = false