使用 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。默认情况下,仅能从极狐GitLab 服务器本身访问 Prometheus。除非单独禁用,否则每个导出器都会自动设置为 Prometheus 的监控目标。
要禁用 Prometheus 及其所有导出器,以及将来添加的任何导出器:
-
编辑 /etc/gitlab/gitlab.rb
-
添加或查找并取消注释以下行,确保它们设置为 false:
rubyprometheus_monitoring['enable'] = false sidekiq['metrics_enabled'] = false # 已默认设置为 `false`,但您可以明确禁用它以确保 puma['exporter_enabled'] = false -
保存文件并重新配置极狐GitLab以使更改生效。
更改 Prometheus 监听的端口和地址
要从极狐GitLab服务器外部访问 Prometheus,请更改 Prometheus 监听的地址/端口:
-
编辑 /etc/gitlab/gitlab.rb
-
添加或查找并取消注释以下行:
rubyprometheus['listen_address'] = 'localhost:9090'将 localhost:9090 替换为您希望 Prometheus 监听的地址或端口。如果您希望允许除 localhost 之外的主机访问 Prometheus,请省略主机,或使用 0.0.0.0 以允许公共访问:
rubyprometheus['listen_address'] = ':9090' # 或 prometheus['listen_address'] = '0.0.0.0:9090' -
保存文件并重新配置极狐GitLab以使更改生效。
添加自定义抓取配置
您可以通过编辑 /etc/gitlab/gitlab.rb 中的 prometheus['scrape_configs'] 来为 Linux 软件包捆绑的 Prometheus 配置额外的抓取目标,使用 Prometheus 抓取目标配置语法。
以下是抓取 http://1.1.1.1:8060/probe?param_a=test¶m_b=additional_test 的示例配置:
ruby1prometheus['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 的监控节点所需的最低要求:
-
SSH 进入监控节点。
-
使用极狐GitLab 下载页面的 步骤 1 和 2 安装 您想要的 Linux 软件包,但不要执行其余步骤。
-
确保收集 Consul 服务器节点的 IP 地址或 DNS 记录,以便进行下一步。
-
编辑 /etc/gitlab/gitlab.rb 并添加以下内容:
ruby1roles ['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 -
运行 sudo gitlab-ctl reconfigure 以编译配置。
下一步是告诉所有其他节点监控节点的位置:
-
编辑 /etc/gitlab/gitlab.rb,并添加、查找并取消注释以下行:
ruby# 可以是 FQDN 或 IP gitlab_rails['prometheus_address'] = '10.0.0.1:9090'其中 10.0.0.1:9090 是 Prometheus 节点的 IP 地址和端口。
-
保存文件并重新配置极狐GitLab以使更改生效。
在启用 consul['monitoring_service_discovery'] = true 的服务发现后,确保 /etc/gitlab/gitlab.rb 中未设置 prometheus['scrape_configs']。在 /etc/gitlab/gitlab.rb 中同时设置 consul['monitoring_service_discovery'] = true 和 prometheus['scrape_configs'] 会导致错误。
使用外部 Prometheus 服务器
允许极狐GitLab 由外部 Prometheus 服务器监控需要进行一些配置更改。
要使用外部 Prometheus 服务器:
-
编辑 /etc/gitlab/gitlab.rb。
-
禁用捆绑的 Prometheus:
rubyprometheus['enable'] = false -
将每个捆绑服务的导出器设置为监听网络地址,例如:
ruby1node_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' -
安装并设置一个专用的 Prometheus 实例(如有必要),使用 官方安装说明。
-
在所有极狐GitLab Rails(Puma, Sidekiq)服务器上,设置 Prometheus 服务器的 IP 地址和监听端口。例如:
rubygitlab_rails['prometheus_address'] = '192.168.0.1:9090' -
要抓取 NGINX 指标,您还必须配置 NGINX 以允许 Prometheus 服务器 IP。例如:
ruby1nginx['status']['options'] = { 2 "server_tokens" => "off", 3 "access_log" => "off", 4 "allow" => "192.168.0.1", 5 "deny" => "all", 6}如果您有多个 Prometheus 服务器,也可以指定多个 IP 地址:
ruby1nginx['status']['options'] = { 2 "server_tokens" => "off", 3 "access_log" => "off", 4 "allow" => ["192.168.0.1", "192.168.0.2"], 5 "deny" => "all", 6} -
要允许 Prometheus 服务器从极狐GitLab指标端点获取数据,请将 Prometheus 服务器 IP 地址添加到监控 IP 允许列表:
rubygitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1'] -
由于我们将每个捆绑服务的导出器设置为监听网络地址,请更新实例上的防火墙,以仅允许来自您的 Prometheus IP 的流量进入启用的导出器。可以在此处找到导出器服务及其各自端口的完整参考列表。
-
重新配置极狐GitLab以应用更改。
-
编辑 Prometheus 服务器的配置文件。
-
将每个节点的导出器添加到 Prometheus 服务器的抓取目标配置中。 例如,使用 static_configs 的示例片段:
yaml1scrape_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。 -
重新加载 Prometheus 服务器。
配置存储保留大小
Prometheus 有多个自定义标志来配置本地存储:
- storage.tsdb.retention.time:何时删除旧数据。默认为 15d。如果此标志设置为默认值以外的值,则覆盖 storage.tsdb.retention。
- storage.tsdb.retention.size:(实验性)要保留的存储块的最大字节数。最旧的数据首先被删除。默认为 0(禁用)。此标志为实验性,可能会在将来的版本中更改。支持的单位:B, KB, MB, GB, TB, PB, EB。例如,512MB。
要配置存储保留大小:
-
编辑 /etc/gitlab/gitlab.rb:
ruby1prometheus['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} -
重新配置极狐GitLab:
shellsudo gitlab-ctl reconfigure
查看性能指标
您可以访问 http://localhost:9090 查看 Prometheus 默认提供的仪表板。
如果您的极狐GitLab 实例启用了 SSL,您可能无法在使用相同 FQDN 的同一浏览器上访问 Prometheus,这是由于 HSTS 的原因。
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])
- 磁盘读取 IOPS: sum by (instance) (rate(node_disk_reads_completed_total[1m]))
- 磁盘写入 IOPS: sum by (instance) (rate(node_disk_writes_completed_total[1m]))
- 通过极狐GitLab事务计数的 RPS: sum(irate(gitlab_transaction_duration_seconds_count{controller!~'HealthController|MetricsController|'}[1m])) by (controller, action)
Prometheus 作为 Grafana 数据源
Grafana 允许您将 Prometheus 性能指标作为数据源导入,并将指标渲染为图表和仪表板,这对于可视化非常有帮助。
要为单服务器极狐GitLab 设置添加 Prometheus 仪表板:
- 在 Grafana 中创建一个新的数据源。
- 对于类型,选择 Prometheus。
- 为您的数据源命名(例如 GitLab)。
- 在Prometheus 服务器 URL中,添加您的 Prometheus 监听地址。
- 将HTTP 方法设置为 GET。
- 保存并测试您的配置以验证其是否正常工作。
极狐GitLab 指标
极狐GitLab 监控其自身的内部服务指标,并将其提供在 /-/metrics 端点。与其他导出器不同,此端点需要身份验证,因为它与用户流量在同一个 URL 和端口上。
阅读更多关于极狐GitLab指标的信息。
捆绑软件指标
许多捆绑在 Linux 软件包中的极狐GitLab 依赖项已预配置为导出 Prometheus 指标。
节点导出器
节点导出器允许您测量各种机器资源,如内存、磁盘和 CPU 利用率。
Web 导出器
Web 导出器是一个专用的指标服务器,允许将最终用户和 Prometheus 流量拆分为两个独立的应用程序以提高性能和可用性。
Redis 导出器
Redis 导出器允许您测量各种 Redis 指标。
PostgreSQL 导出器
PostgreSQL 导出器允许您测量各种 PostgreSQL 指标。
PgBouncer 导出器
PgBouncer 导出器允许您测量各种 PgBouncer 指标。
注册表导出器
注册表导出器允许您测量各种注册表指标。
极狐GitLab 导出器
极狐GitLab 导出器允许您测量从 Redis 和数据库中提取的各种极狐GitLab 指标。
故障排除
/var/opt/gitlab/prometheus 消耗太多磁盘空间
如果您不使用 Prometheus 监控:
- 禁用 Prometheus。
- 删除 /var/opt/gitlab/prometheus 下的数据。
如果您使用 Prometheus 监控:
-
停止 Prometheus(在运行时删除数据可能会导致数据损坏):
shellgitlab-ctl stop prometheus -
删除 /var/opt/gitlab/prometheus/data 下的数据。
-
重新启动服务:
shellgitlab-ctl start prometheus -
验证服务是否已启动并运行:
shellgitlab-ctl status prometheus -
可选。配置存储保留大小。
监控节点未接收数据
如果监控节点未接收到任何数据,请检查导出器是否正在捕获数据:
shellcurl "http[s]://localhost:<EXPORTER LISTENING PORT>/metrics"
或
shellcurl "http[s]://localhost:<EXPORTER LISTENING PORT>/-/metrics"