Monitoring GitLab with Prometheus

原文:https://docs.gitlab.com/ee/administration/monitoring/prometheus/

Monitoring GitLab with Prometheus

Notes:

  • 本页中列出的 Prometheus 和各种出口商都捆绑在 Omnibus GitLab 软件包中. 查看每个出口商的文档以了解添加的时间表. 对于源安装,您必须自己安装. 在后续版本中,将捕获其他的 GitLab 指标.
  • GitLab 9.0 默认情况下会启用 Prometheus 服务.
  • Prometheus 及其出口商不对用户进行身份验证,任何可以访问它们的人都可以使用.

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

Overview

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

Configuring Prometheus

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

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

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

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

    1. prometheus_monitoring['enable'] = false
  3. 保存文件并重新配置 GitLab,以使更改生效.

Changing the port and address Prometheus listens on

注意: 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. 保存文件并重新配置 GitLab,以使更改生效

Adding custom scrape configurations

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

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

  1. prometheus['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. ]

Using an external Prometheus server

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

需要进行一些配置更改,才能由外部 Prometheus 服务器监视 GitLab. 对于具有多个节点的 GitLab 部署,建议使用外部服务器.

要使用外部 Prometheus 服务器:

  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. 将 Prometheus 服务器 IP 地址添加到监视 IP 白名单 . 例如:

    1. gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
  6. 所有 GitLab Rails(Puma / Unicorn,Sidekiq)服务器上,设置 Prometheus 服务器 IP 地址和监听端口. 例如:

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

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

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

    1. scrape_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. static_configs:
    25. - targets:
    26. - 1.1.1.1:8080
    27. - job_name: gitlab-sidekiq
    28. static_configs:
    29. - targets:
    30. - 1.1.1.1:8082
    31. - job_name: gitlab_exporter_database
    32. metrics_path: "/database"
    33. static_configs:
    34. - targets:
    35. - 1.1.1.1:9168
    36. - job_name: gitlab_exporter_sidekiq
    37. metrics_path: "/sidekiq"
    38. static_configs:
    39. - targets:
    40. - 1.1.1.1:9168
    41. - job_name: gitlab_exporter_process
    42. metrics_path: "/process"
    43. static_configs:
    44. - targets:
    45. - 1.1.1.1:9168
    46. - job_name: gitaly
    47. static_configs:
    48. - targets:
    49. - 1.1.1.1:9236
  11. 重新加载 Prometheus 服务器.

Viewing performance metrics

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

注意:如果在您的 GitLab 实例上启用了 SSL,由于HSTS,如果使用相同的 FQDN,则可能无法在与 GitLab 相同的浏览器上访问 Prometheus. 我们计划通过 GitLab 提供访问 ,但是在此期间,有一些解决方法:使用单独的 FQDN,使用服务器 IP,使用单独的 Prometheus 浏览器,重置 HSTS 或使用NGINX 代理 .

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

普罗米修斯样本查询:

  • 可用内存百分比: ((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 metrics

在 GitLab 9.3 中引入.

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

➔ Read more about the GitLab Metrics.

Bundled software metrics

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

Node exporter

节点导出器允许您测量各种机器资源,例如内存,磁盘和 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 exporter

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

Read more about the PgBouncer exporter.

Registry exporter

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

Read more about the Registry exporter.

GitLab exporter

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

Read more about the GitLab exporter.

Configuring Prometheus to monitor Kubernetes

版本历史

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

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

要禁用对 Kubernetes 的监视:

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

    1. prometheus['monitor_kubernetes'] = false
  3. 保存文件并重新配置 GitLab,以使更改生效.