# Monitoring GitLab with Prometheus > 原文:[https://docs.gitlab.com/ee/administration/monitoring/prometheus/](https://docs.gitlab.com/ee/administration/monitoring/prometheus/) * [Overview](#overview) * [Configuring Prometheus](#configuring-prometheus) * [Changing the port and address Prometheus listens on](#changing-the-port-and-address-prometheus-listens-on) * [Adding custom scrape configurations](#adding-custom-scrape-configurations) * [Using an external Prometheus server](#using-an-external-prometheus-server) * [Viewing performance metrics](#viewing-performance-metrics) * [Prometheus as a Grafana data source](#prometheus-as-a-grafana-data-source) * [GitLab metrics](#gitlab-metrics) * [Bundled software metrics](#bundled-software-metrics) * [Node exporter](#node-exporter) * [Redis exporter](#redis-exporter) * [PostgreSQL exporter](#postgresql-exporter) * [PgBouncer exporter](#pgbouncer-exporter) * [Registry exporter](#registry-exporter) * [GitLab exporter](#gitlab-exporter) * [Configuring Prometheus to monitor Kubernetes](#configuring-prometheus-to-monitor-kubernetes) # Monitoring GitLab with Prometheus[](#monitoring-gitlab-with-prometheus "Permalink") > **Notes:** > > * 本页中列出的 Prometheus 和各种出口商都捆绑在 Omnibus GitLab 软件包中. 查看每个出口商的文档以了解添加的时间表. 对于源安装,您必须自己安装. 在后续版本中,将捕获其他的 GitLab 指标. > * GitLab 9.0 默认情况下会启用 Prometheus 服务. > * Prometheus 及其出口商不对用户进行身份验证,任何可以访问它们的人都可以使用. [Prometheus](https://s0prometheus0io.icopy.site)是一项功能强大的时间序列监视服务,为监视 GitLab 和其他软件产品提供了灵活的平台. GitLab 提供了 Prometheus 的开箱即用监视功能,可轻松访问 GitLab 服务的高质量时间序列监视. ## Overview[](#overview "Permalink") Prometheus 的工作方式是定期连接到数据源,并通过[各种出口商](#bundled-software-metrics)收集其绩效指标. 要查看和使用监视数据,您可以[直接连接到 Prometheus](#viewing-performance-metrics)或使用仪表板工具(例如[Grafana)](https://grafana.com) . ## Configuring Prometheus[](#configuring-prometheus "Permalink") **注意:**对于源安装,您必须自己安装和配置. 从 GitLab 9.0 开始,Prometheus 及其出口商默认情况下处于打开状态. Prometheus 将以`gitlab-prometheus`用户身份运行,并监听`http://localhost:9090` . 默认情况下,只能从 GitLab 服务器本身访问 Prometheus. 除非单独禁用,否则每个出口商将自动设置为 Prometheus 的监视目标. 要禁用 Prometheus 及其所有出口商以及将来添加的任何出口商,请执行以下操作: 1. Edit `/etc/gitlab/gitlab.rb` 2. 添加或查找并取消注释以下行,确保将其设置为`false` : ``` prometheus_monitoring['enable'] = false ``` 3. 保存文件并[重新配置 GitLab,](../../restart_gitlab.html#omnibus-gitlab-reconfigure)以使更改生效. ### Changing the port and address Prometheus listens on[](#changing-the-port-and-address-prometheus-listens-on "Permalink") **注意:** [Omnibus GitLab 8.17 中](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/1261)添加了以下更改. 尽管可能,但不建议更改 Prometheus 监听的端口,因为这可能会影响 GitLab 服务器上运行的其他服务或与之冲突. 继续需要您自担风险. 为了从 GitLab 服务器外部访问 Prometheus,您需要在`prometheus['listen_address']`设置 FQDN 或 IP. 更改 Prometheus 监听的地址/端口: 1. Edit `/etc/gitlab/gitlab.rb` 2. 添加或查找并取消注释以下行: ``` prometheus['listen_address'] = 'localhost:9090' ``` 将`localhost:9090`替换为您希望 Prometheus 监听的地址或端口. 如果要允许除`localhost`以外的其他主机访问 Prometheus,请忽略该主机,或使用`0.0.0.0`允许公共访问: ``` prometheus['listen_address'] = ':9090' # or prometheus['listen_address'] = '0.0.0.0:9090' ``` 3. 保存文件并[重新配置 GitLab,](../../restart_gitlab.html#omnibus-gitlab-reconfigure)以使更改生效 ### Adding custom scrape configurations[](#adding-custom-scrape-configurations "Permalink") 您可以使用[Prometheus 刮擦目标配置](https://s0prometheus0io.icopy.site/docs/prometheus/latest/configuration/configuration/)语法在`/etc/gitlab/gitlab.rb`编辑`prometheus['scrape_configs']` , `/etc/gitlab/gitlab.rb`为 Omnibus GitLab 捆绑的 Prometheus 配置其他刮擦目标. 这是刮取`http://1.1.1.1:8060/probe?param_a=test¶m_b=additional_test`的示例配置: ``` prometheus['scrape_configs'] = [ { 'job_name': 'custom-scrape', 'metrics_path': '/probe', 'params' => { 'param_a' => ['test'], 'param_b' => ['additional_test'] }, 'static_configs' => [ 'targets' => ['1.1.1.1:8060'], ], }, ] ``` ### Using an external Prometheus server[](#using-an-external-prometheus-server "Permalink") **注意:** Prometheus 和大多数导出器不支持身份验证. 我们不建议将它们公开在本地网络之外. 需要进行一些配置更改,才能由外部 Prometheus 服务器监视 GitLab. 对于[具有多个节点的 GitLab 部署,](../../reference_architectures/index.html)建议使用外部服务器. 要使用外部 Prometheus 服务器: 1. Edit `/etc/gitlab/gitlab.rb`. 2. 禁用捆绑的 Prometheus: ``` prometheus['enable'] = false ``` 3. 将每个捆绑服务的[导出器设置](#bundled-software-metrics)为侦听网络地址,例如: ``` gitlab_exporter['listen_address'] = '0.0.0.0' sidekiq['listen_address'] = '0.0.0.0' gitlab_exporter['listen_port'] = '9168' node_exporter['listen_address'] = '0.0.0.0:9100' redis_exporter['listen_address'] = '0.0.0.0:9121' postgres_exporter['listen_address'] = '0.0.0.0:9187' gitaly['prometheus_listen_addr'] = "0.0.0.0:9236" gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229" ``` 4. 如有必要,请使用[官方安装说明](https://s0prometheus0io.icopy.site/docs/prometheus/latest/installation/)安装并设置专用的 Prometheus 实例. 5. 将 Prometheus 服务器 IP 地址添加到[监视 IP 白名单](../ip_whitelist.html) . 例如: ``` gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1'] ``` 6. 在**所有** GitLab Rails(Puma / Unicorn,Sidekiq)服务器上,设置 Prometheus 服务器 IP 地址和监听端口. 例如: ``` gitlab_rails['prometheus_address'] = '192.168.0.1:9090' ``` 7. 要抓取 NGINX 指标,您还需要配置 NGINX 以允许 Prometheus 服务器 IP. 例如: ``` nginx['status']['options'] = { "server_tokens" => "off", "access_log" => "off", "allow" => "192.168.0.1", "deny" => "all", } ``` 8. [重新配置 GitLab](../../restart_gitlab.html#omnibus-gitlab-reconfigure)以应用更改. 9. 编辑 Prometheus 服务器的配置文件. 10. 将每个节点的导出器添加到 Prometheus 服务器的[抓取目标配置中](https://s0prometheus0io.icopy.site/docs/prometheus/latest/configuration/configuration/) . 例如,使用`static_configs`的样本片段: ``` scrape_configs: - job_name: nginx static_configs: - targets: - 1.1.1.1:8060 - job_name: redis static_configs: - targets: - 1.1.1.1:9121 - job_name: postgres static_configs: - targets: - 1.1.1.1:9187 - job_name: node static_configs: - targets: - 1.1.1.1:9100 - job_name: gitlab-workhorse static_configs: - targets: - 1.1.1.1:9229 - job_name: gitlab-rails metrics_path: "/-/metrics" static_configs: - targets: - 1.1.1.1:8080 - job_name: gitlab-sidekiq static_configs: - targets: - 1.1.1.1:8082 - job_name: gitlab_exporter_database metrics_path: "/database" static_configs: - targets: - 1.1.1.1:9168 - job_name: gitlab_exporter_sidekiq metrics_path: "/sidekiq" static_configs: - targets: - 1.1.1.1:9168 - job_name: gitlab_exporter_process metrics_path: "/process" static_configs: - targets: - 1.1.1.1:9168 - job_name: gitaly static_configs: - targets: - 1.1.1.1:9236 ``` 11. 重新加载 Prometheus 服务器. ## Viewing performance metrics[](#viewing-performance-metrics "Permalink") 您可以访问`http://localhost:9090` ,以获取 Prometheus 默认提供的仪表板. > **注意:**如果在您的 GitLab 实例上启用了 SSL,由于[HSTS,](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security)如果使用相同的 FQDN,则可能无法在与 GitLab 相同的浏览器上访问 Prometheus. 我们计划[通过 GitLab 提供访问](https://gitlab.com/gitlab-org/multi-user-prometheus) ,但是在此期间,有一些解决方法:使用单独的 FQDN,使用服务器 IP,使用单独的 Prometheus 浏览器,重置 HSTS 或使用[NGINX 代理](https://docs.gitlab.com/omnibus/settings/nginx.html) . Prometheus 收集的性能数据可以在 Prometheus 控制台中直接查看,也可以通过兼容的仪表板工具查看. Prometheus 界面提供了一种[灵活的查询语言](https://s0prometheus0io.icopy.site/docs/prometheus/latest/querying/basics/) ,可与收集的数据一起使用,您可以在其中可视化输出. 要获得功能更全面的仪表板,可以使用 Grafana 并已[对 Prometheus 进行了官方支持](https://s0prometheus0io.icopy.site/docs/visualization/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[](#prometheus-as-a-grafana-data-source "Permalink") 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-metrics "Permalink") 在 GitLab 9.3 中引入. GitLab 监视其自身的内部服务指标,并使其在`/-/metrics`端点可用. 与其他导出器不同,此终结点需要身份验证,因为它可以在与用户流量相同的 URL 和端口上使用. [➔ Read more about the GitLab Metrics.](gitlab_metrics.html) ## Bundled software metrics[](#bundled-software-metrics "Permalink") Omnibus GitLab 中捆绑的许多 GitLab 依赖项都已预先配置为导出 Prometheus 指标. ### Node exporter[](#node-exporter "Permalink") 节点导出器允许您测量各种机器资源,例如内存,磁盘和 CPU 利用率. [Read more about the node exporter](node_exporter.html). ### Redis exporter[](#redis-exporter "Permalink") Redis 导出器允许您测量各种 Redis 指标. [Read more about the Redis exporter](redis_exporter.html). ### PostgreSQL exporter[](#postgresql-exporter "Permalink") PostgreSQL 导出器允许您测量各种 PostgreSQL 指标. [Read more about the PostgreSQL exporter](postgres_exporter.html). ### PgBouncer exporter[](#pgbouncer-exporter "Permalink") PgBouncer 导出器允许您测量各种 PgBouncer 指标. [Read more about the PgBouncer exporter](pgbouncer_exporter.html). ### Registry exporter[](#registry-exporter "Permalink") 注册表导出器允许您测量各种注册表指标. [Read more about the Registry exporter](registry_exporter.html). ### GitLab exporter[](#gitlab-exporter "Permalink") GitLab 导出器允许您测量从 Redis 和数据库中提取的各种 GitLab 指标. [Read more about the GitLab exporter](gitlab_exporter.html). ## Configuring Prometheus to monitor Kubernetes[](#configuring-prometheus-to-monitor-kubernetes "Permalink") 版本历史 * 在 GitLab 9.0 中引入. * 在 GitLab 9.4 中引入了 Pod 监控. 如果您的 GitLab 服务器在 Kubernetes 中运行,则 Prometheus 将从群集中的节点和带[注释的](https://s0prometheus0io.icopy.site/docs/prometheus/latest/configuration/configuration/) Pod 收集指标,包括每个容器上的性能数据. 如果您的 CI / CD 环境在同一群集中运行,这将特别有用,因为您可以使用[Prometheus 项目集成](../../../user/project/integrations/prometheus.html)来监视它们. 要禁用对 Kubernetes 的监视: 1. Edit `/etc/gitlab/gitlab.rb`. 2. 添加(或查找并取消注释)以下行并将其设置为`false` : ``` prometheus['monitor_kubernetes'] = false ``` 3. 保存文件并[重新配置 GitLab,](../../restart_gitlab.html#omnibus-gitlab-reconfigure)以使更改生效.