注意

本文档适用于 Ceph 的开发版本。

监控服务

Ceph Dashboard 使用 PrometheusGrafana 和相关工具来存储和可视化集群利用率和性能的详细指标。Ceph 用户有三种选择

  1. 让 cephadm 部署和配置这些服务。除非使用 --skip-monitoring-stack 选项,否则这是引导新集群时的默认设置。

  2. 手动部署和配置这些服务。这建议用于其环境中已存在 Prometheus 服务的用户(以及 Ceph 在 Kubernetes 中使用 Rook 运行的情况)。

  3. 完全跳过监控堆栈。某些 Ceph Dashboard 图表将不可用。

监控堆栈由 Prometheus、Prometheus 导出器(Prometheus 模块Node exporter)、Prometheus Alert ManagerGrafana 组成。

注意

Prometheus 的安全模型假定不受信任的用户可以访问 Prometheus HTTP 端点和日志。不受信任的用户可以访问 Prometheus 收集的数据库中包含的所有(元)数据,以及各种操作和调试信息。

然而,Prometheus 的 HTTP API 仅限于只读操作。配置 不能 使用 API 更改,并且不暴露机密信息。此外,Prometheus 还有一些内置措施来减轻拒绝服务攻击的影响。

有关更多详细信息,请参阅 Prometheus 的安全模型

使用 Cephadm 部署监控

cephadm 的默认行为是部署一个基本的监控堆栈。但是,您可能有一个没有监控堆栈的 Ceph 集群,并且您想为其添加一个监控堆栈。(您可能以某种方式拥有一个没有监控堆栈的 Ceph 集群:您可能在集群安装期间将 --skip-monitoring stack 选项传递给了 cephadm,或者您可能将一个现有集群(没有监控堆栈)转换为 cephadm 管理。)

要在没有监控的 Ceph 集群上设置监控,请按照以下步骤操作

  1. 在集群的每个节点上部署 node-exporter 服务。node-exporter 提供主机级别的指标,如 CPU 和内存利用率

    ceph orch apply node-exporter
    
  2. 部署 Alertmanager

    ceph orch apply alertmanager
    
  3. 部署 Prometheus。单个 Prometheus 实例就足够了,但为了高可用性 (HA),您可能需要部署两个

    ceph orch apply prometheus
    

    ceph orch apply prometheus --placement 'count:2'
    
  4. 部署 Grafana

    ceph orch apply grafana
    

为监控堆栈启用安全性

默认情况下,在 cephadm 管理的集群中,监控组件的设置和配置没有启用安全措施。虽然这足以满足某些部署的需求,但对于具有严格安全需求的部署,可能需要保护监控堆栈免受未经授权的访问。在这种情况下,cephadm 依赖于一个特定的配置参数 mgr/cephadm/secure_monitoring_stack,该参数用于切换所有监控组件的安全设置。要激活安全措施,请使用以下形式的命令将此选项设置为 true

ceph config set mgr mgr/cephadm/secure_monitoring_stack true

此更改将触发所有监控守护程序的重新配置序列,通常需要几分钟才能使所有组件完全正常运行。更新后的安全配置包括以下修改

  1. Prometheus:访问 Web 门户需要基本身份验证,并为安全通信启用了 TLS。

  2. Alertmanager:访问 Web 门户需要基本身份验证,并为安全通信启用了 TLS。

  3. Node Exporter:为安全通信启用了 TLS。

  4. Grafana:启用了 TLS,并且访问数据源信息需要身份验证。

  5. Cephadm 服务发现端点:访问服务发现信息需要基本身份验证,并为安全通信启用了 TLS。

在此安全设置中,用户需要为 Prometheus 和 Alertmanager 设置身份验证(用户名/密码)。默认情况下,用户名和密码设置为 admin/admin。用户可以使用命令 ceph orch prometheus set-credentialsceph orch alertmanager set-credentials 分别更改这些值。这些命令提供了将用户名/密码作为参数或通过 JSON 文件输入的选择,从而增强了安全性。此外,Cephadm 提供了命令 orch prometheus get-credentialsorch alertmanager get-credentials 来检索当前凭据。

注意

用于 cephadm 服务发现端点(当启用安全性时,监听 https://<mgr-ip>:8765/sd/ 的端点)的凭据可以使用以下 config-key 命令检索和更新。例如,要检索当前凭据,请运行

ceph config-key get mgr/cephadm/service_discovery/root/username
ceph config-key get mgr/cephadm/service_discovery/root/password

要更新服务发现的凭据(用户名/密码),请运行

ceph config-key set mgr/cephadm/service_discovery/root/username <username>
ceph config-key set mgr/cephadm/service_discovery/root/password <password>

更改这些凭据后,重新部署 Manager 以使更改生效。

ceph orch redeploy mgr

Ceph 中的集中式日志记录

Ceph 现在使用 Loki 和 Alloy 提供集中式日志记录。集中式日志管理 (CLM) 将所有日志数据合并并推送到中央存储库,具有易于访问和使用的界面。集中式日志记录旨在让您的生活更轻松。一些优点是

  1. 线性事件时间线:分析单个事件链比分析来自一百个节点的数千个不同日志更容易排除故障。

  2. 实时实时日志监控:跟踪来自数千个不同来源的日志是不切实际的。

  3. 灵活的保留策略:对于每个守护程序的日志,通常将日志轮换设置为较短的时间间隔(1-2 周)以节省磁盘使用量。

  4. 增强的安全性和备份:日志可能包含敏感信息并暴露使用模式。此外,集中式日志记录允许 HA 等。

Ceph 中的集中式日志记录使用两个服务实现:lokialloy

  • Loki 是一个日志聚合系统,用于查询日志。它可以配置为 Grafana 中的 datasource

  • Alloy 充当代理,从每个节点收集日志并将其转发给 Loki。

默认情况下,这两个服务不会部署在 Ceph 集群中。要启用集中式日志记录,您可以按照此处提到的步骤操作 在 Dashboard 中启用集中式日志记录

网络和端口

所有监控服务都可以使用 YAML 服务规范配置它们绑定的网络和端口。默认情况下,cephadm 在配置 Grafana 守护程序时将使用 https 协议,除非用户明确将协议设置为 http

示例规范文件

service_type: grafana
service_name: grafana
placement:
  count: 1
networks:
- 192.169.142.0/24
spec:
  port: 4200
  protocol: http

默认镜像

本节中的信息由 Eugen Block 于 2024 年 4 月在 [ceph-users] 邮件列表上的一个帖子中开发。该帖子可在此处查看:https://lists.ceph.io/hyperkitty/list/ceph-users@ceph.io/thread/QGC66QIFBKRTPZAQMQEYFXOGZJ7RLWBN/

cephadmvar/lib/ceph/{FSID}/cephadm.{DIGEST} 中存储 cephadm 二进制文件的本地副本,其中 {DIGEST} 是表示当前运行的 Ceph 版本的字母数字字符串。

要查看默认容器镜像,请运行以下命令

cephadm list-images

默认监控镜像在 /src/python-common/ceph/cephadm/images.py 中指定。

class ceph.cephadm.images.DefaultImages(value)

一个枚举。

ALERTMANAGER = quay.io/prometheus/alertmanager:v0.28.1
ALLOY = docker.io/grafana/alloy:latest
ELASTICSEARCH = quay.io/omrizeneva/elasticsearch:6.8.23
GRAFANA = quay.io/ceph/grafana:12.2.0
HAPROXY = quay.io/ceph/haproxy:2.3
JAEGER_AGENT = quay.io/jaegertracing/jaeger-agent:1.29
JAEGER_COLLECTOR = quay.io/jaegertracing/jaeger-collector:1.29
JAEGER_QUERY = quay.io/jaegertracing/jaeger-query:1.29
KEEPALIVED = quay.io/ceph/keepalived:2.2.4
LOKI = docker.io/grafana/loki:3.0.0
NGINX = quay.io/ceph/nginx:sclorg-nginx-126
NODE_EXPORTER = quay.io/prometheus/node-exporter:v1.9.1
NVMEOF = quay.io/ceph/nvmeof:1.5
OAUTH2_PROXY = quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
PROMETHEUS = quay.io/prometheus/prometheus:v3.6.0
PROMTAIL = docker.io/grafana/promtail:3.0.0
SAMBA = quay.io/samba.org/samba-server:devbuilds-centos-amd64
SAMBA_METRICS = quay.io/samba.org/samba-metrics:devbuilds-centos-amd64
SNMP_GATEWAY = docker.io/maxwo/snmp-notifier:v1.2.1

使用自定义镜像

可以基于其他镜像安装或升级监控组件。您计划使用的镜像 ID 必须存储在配置中。以下配置选项可用

  • container_image_prometheus

  • container_image_grafana

  • container_image_alertmanager

  • container_image_node_exporter

  • container_image_loki

  • container_image_promtail

  • container_image_haproxy

  • container_image_keepalived

  • container_image_snmp_gateway

  • container_image_elasticsearch

  • container_image_jaeger_agent

  • container_image_jaeger_collector

  • container_image_jaeger_query

可以使用 ceph config 命令设置自定义镜像。要设置自定义镜像,请运行以下形式的命令

ceph config set mgr mgr/cephadm/<option_name> <value>

例如

ceph config set mgr mgr/cephadm/container_image_prometheus prom/prometheus:v1.4.1

如果您已经在运行您更改的相同镜像类型的监控堆栈守护程序,则必须重新部署守护程序才能使其使用新镜像。

例如,如果您更改了 Prometheus 镜像,则必须运行以下命令才能使更改生效

ceph orch redeploy prometheus

注意

通过设置自定义镜像,默认值将被覆盖(但不会被删除)。当有更新可用时,默认值会更改。如果您设置了自定义镜像,则无法自动更新您使用自定义镜像修改的组件。您需要手动更新配置(包括镜像名称和标签)才能安装更新。

如果您选择接受建议,可以重置您之前设置的自定义镜像。如果这样做,将再次使用默认值。使用 ceph config rm 以以下形式的命令重置配置选项

ceph config rm mgr mgr/cephadm/<option_name>

例如

ceph config rm mgr mgr/cephadm/container_image_prometheus

另请参阅 在隔离环境中部署

使用自定义配置文件

通过覆盖 cephadm 模板,可以完全自定义监控服务的配置文件。

在内部,cephadm 已经使用 Jinja2 模板为所有监控组件生成配置文件。从 17.2.3 版本开始,cephadm 支持 Prometheus HTTP 服务发现,并使用此端点来定义和管理嵌入式 Prometheus 服务。该端点侦听 https://<mgr-ip>:8765/sd/(端口可通过变量 service_discovery_port 配置),并以 http_sd_config 格式返回抓取目标信息。

具有外部监控堆栈的客户可以使用 ceph-mgr 服务发现端点来获取抓取配置。服务器的根证书可以通过以下命令获取

ceph orch sd dump cert

Prometheus、Grafana 或 Alertmanager 的配置可以通过为每个服务存储 Jinja2 模板进行自定义。每次部署或重新配置此类服务时,都会评估此模板。这样,自定义配置将保留并自动应用于这些服务未来的部署。

注意

当 cephadm 的默认配置更改时,自定义模板的配置也会保留。如果要使用更新后的配置,则需要在每次 Ceph 升级后手动迁移自定义模板。

选项名称

可以覆盖 cephadm 将生成的文件的以下模板。这些是使用 ceph config-key set 存储时要使用的名称

  • services/alertmanager/alertmanager.yml

  • services/alertmanager/web.yml

  • services/grafana/ceph-dashboard.yml

  • services/grafana/grafana.ini

  • services/ingress/haproxy.cfg

  • services/ingress/keepalived.conf

  • services/iscsi/iscsi-gateway.cfg

  • services/mgmt-gateway/external_server.conf

  • services/mgmt-gateway/internal_server.conf

  • services/mgmt-gateway/nginx.conf

  • services/nfs/ganesha.conf

  • services/node-exporter/web.yml

  • services/nvmeof/ceph-nvmeof.conf

  • services/oauth2-proxy/oauth2-proxy.conf

  • services/prometheus/prometheus.yml

  • services/prometheus/web.yml

  • services/loki.yml

  • services/promtail.yml

您可以在 src/pybind/mgr/cephadm/templates 中查找 cephadm 当前使用的文件模板

  • services/alertmanager/alertmanager.yml.j2

  • services/alertmanager/web.yml.j2

  • services/grafana/ceph-dashboard.yml.j2

  • services/grafana/grafana.ini.j2

  • services/ingress/haproxy.cfg.j2

  • services/ingress/keepalived.conf.j2

  • services/iscsi/iscsi-gateway.cfg.j2

  • services/mgmt-gateway/external_server.conf.j2

  • services/mgmt-gateway/internal_server.conf.j2

  • services/mgmt-gateway/nginx.conf.j2

  • services/nfs/ganesha.conf.j2

  • services/node-exporter/web.yml.j2

  • services/nvmeof/ceph-nvmeof.conf.j2

  • services/oauth2-proxy/oauth2-proxy.conf.j2

  • services/prometheus/prometheus.yml.j2

  • services/prometheus/web.yml.j2

  • services/loki.yml.j2

  • services/promtail.yml.j2

用法

以下命令应用单行值

ceph config-key set mgr/cephadm/<option_name> <value>

要将文件内容设置为模板,请使用 -i 参数

ceph config-key set mgr/cephadm/<option_name> -i $PWD/<filename>

注意

将文件用作 config-key 的输入时,必须使用文件的绝对路径。

然后需要重新创建服务的配置文件。这通过使用 reconfig 完成。有关更多详细信息,请参阅以下示例。

示例

# set the contents of ./prometheus.yml.j2 as template
ceph config-key set mgr/cephadm/services/prometheus/prometheus.yml \
  -i $PWD/prometheus.yml.j2

# reconfig the Prometheus service
ceph orch reconfig prometheus
# set additional custom alerting rules for Prometheus
ceph config-key set mgr/cephadm/services/prometheus/alerting/custom_alerts.yml \
  -i $PWD/custom_alerts.yml

# Note that custom alerting rules are not parsed by Jinja and hence escaping
# will not be an issue.

不使用 Cephadm 部署监控

如果您有现有的 Prometheus 监控基础架构,或者想自己管理它,您需要配置它以与 Ceph 集群集成。

  • 在 ceph-mgr 守护程序中启用 prometheus 模块

    ceph mgr module enable prometheus
    

    默认情况下,ceph-mgr 在运行 ceph-mgr 守护程序的每个主机上的端口 9283 上提供 Prometheus 指标。配置 Prometheus 来抓取这些指标。

为了使这种集成更容易,cephadm 在 https://<mgr-ip>:8765/sd/ 提供了一个服务发现端点。外部 Prometheus 服务器可以使用此端点来检索特定服务的目标信息。此端点返回的信息使用 Prometheus http_sd_config 选项指定的格式。

这是一个使用 cephadm 服务发现端点的 Prometheus 作业定义示例

- job_name: 'ceph-exporter'
  http_sd_configs:
  - url: https://<mgr-ip>:8765/sd/prometheus/sd-config?service=ceph-exporter
    basic_auth:
      username: '<username>'
      password: '<password>'
    tls_config:
      ca_file: '/path/to/ca.crt'

禁用监控

要禁用监控并删除支持它的软件,请运行以下命令

ceph orch rm grafana
ceph orch rm prometheus --force   # this will delete metrics data collected so far
ceph orch rm node-exporter
ceph orch rm alertmanager
ceph mgr module disable prometheus

另请参阅 删除服务

设置 RBD 镜像监控

由于性能原因,RBD 镜像的监控默认处于禁用状态。有关详细信息,请参阅 Ceph 健康检查。如果禁用,Grafana 中的概览和详细信息仪表板将保持为空,并且指标在 Prometheus 中将不可见。

设置 Prometheus

设置 Prometheus 保留大小和时间

Cephadm 可以通过在 Prometheus 服务规范中指定 retention_timeretention_size 值来配置 Prometheus TSDB 保留。保留时间值默认为 15 天 (15d)。用户可以设置不同的值/单位,其中支持的单位为:“y”、“w”、“d”、“h”、“m”和“s”。保留大小值默认为 0(禁用)。在这种情况下支持的单位是:“B”、“KB”、“MB”、“GB”、“TB”、“PB”和“EB”。

在以下示例规范中,我们将保留时间设置为 1 年,大小设置为 1GB。

service_type: prometheus
placement:
  count: 1
spec:
  retention_time: "1y"
  retention_size: "1GB"

注意

如果您之前已经部署了 Prometheus 守护程序,并且正在更新现有规范而不是全新部署 Prometheus,则还必须告诉 cephadm 重新部署 Prometheus 守护程序才能使此更改生效。这可以通过 ceph orch redeploy prometheus 命令完成。

设置 Grafana

手动设置 Grafana URL

在除一种情况外的所有情况下,Cephadm 都会自动配置 Prometheus、Grafana 和 Alertmanager。

在某些设置中,Dashboard 用户的浏览器可能无法访问 Ceph Dashboard 中配置的 Grafana URL。当集群和访问用户位于不同的 DNS 区域时,可能会发生这种情况。

如果是这种情况,您可以使用 Ceph Dashboard 的配置选项来设置用户浏览器将用于访问 Grafana 的 URL。cephadm 永远不会更改此值。要设置此配置选项,请发出以下命令

ceph dashboard set-grafana-frontend-api-url <grafana-server-api>

服务部署可能需要一两分钟。部署服务后,当您发出命令 ceph orch ls 时,您应该会看到类似以下内容

ceph orch ls
NAME           RUNNING  REFRESHED  IMAGE NAME                                      IMAGE ID        SPEC
alertmanager       1/1  6s ago     docker.io/prom/alertmanager:latest              0881eb8f169f  present
crash              2/2  6s ago     docker.io/ceph/daemon-base:latest-master-devel  mix           present
grafana            1/1  0s ago     docker.io/pcuzner/ceph-grafana-el8:latest       f77afcf0bcf6   absent
node-exporter      2/2  6s ago     docker.io/prom/node-exporter:latest             e5a616e4b9cf  present
prometheus         1/1  6s ago     docker.io/prom/prometheus:latest                e935122ab143  present

配置 Grafana 的 SSL/TLS

版本 Tentacle 中的新功能。

cephadm 使用 cephadm 证书管理器 (certmgr) 管理的证书部署 Grafana。Grafana 的证书是按主机

  • 默认(cephadm 签名): 如果未指定证书,cephadm 会为运行 Grafana 的每个主机生成并签名证书。

  • 用户提供(作为参考): 您可以使用 certmgr 添加自己的证书和私钥,并在 Grafana 规范中引用它们。

具有用户提供证书的 Grafana 服务规范如下所示

service_type: grafana
placement:
  hosts:
    - <ceph-node-hostname>
spec:
  ssl: true
  certificate_source: reference

要使用 certmgr 为主机 <ceph-node-hostname> 注册自定义证书和密钥

ceph orch certmgr cert set --cert-name grafana_ssl_cert --hostname <ceph-node-hostname> -i $PWD/certificate.pem
ceph orch certmgr key set --key-name grafana_ssl_key --hostname <ceph-node-hostname> -i  $PWD/key.pem

如果 Grafana 已部署,请在服务上运行 reconfig 以应用更新的证书

ceph orch reconfig grafana

reconfig 命令还确保 Ceph Dashboard URL 更新为使用正确的证书。 reconfig 命令还设置了正确的 Ceph Dashboard URL。

设置初始管理员密码

默认情况下,Grafana 不会创建初始管理员用户。为了创建管理员用户,请创建一个包含以下内容的 grafana.yaml 文件

service_type: grafana
spec:
  initial_admin_password: mypassword

然后应用此规范

ceph orch apply -i grafana.yaml
ceph orch redeploy grafana

Grafana 现在将创建一个名为 admin 的管理员用户,并使用给定的密码。

关闭匿名访问

默认情况下,cephadm 允许匿名用户(未提供任何登录信息的用户)对 Grafana 仪表板进行有限的、仅查看访问。为了将 Grafana 设置为只允许登录用户查看,您可以在 Grafana 规范中设置 anonymous_access: False

service_type: grafana
placement:
  hosts:
  - host1
spec:
  anonymous_access: False
  initial_admin_password: "mypassword"

由于在未设置初始管理员密码的情况下将 anonymous access 设置为 false 会使仪表板无法访问,因此 cephadm 要求在将 anonymous_access 设置为 false 时设置 initial_admin_password

设置 Alertmanager

添加 Alertmanager Webhook

要向 Alertmanager 配置添加新的 webhook,请添加额外的 webhook URL,如下所示

service_type: alertmanager
spec:
  user_data:
    webhook_urls:
    - "https://foo"
    - "https://bar"

其中 default_webhook_urls 是添加到默认接收器 <webhook_configs> 配置中的额外 URL 列表。

在服务上运行 reconfig 以更新其配置

ceph orch reconfig alertmanager

打开证书验证

如果您正在为 Alertmanager 使用证书并想确保这些证书得到验证,您应该在 Alertmanager 规范中将 secure 选项设置为 true(默认为 false)。

service_type: alertmanager
spec:
  secure: true

如果您在应用规范之前已经运行了 Alertmanager 守护程序,则必须重新配置它们以更新其配置

ceph orch reconfig alertmanager

延伸阅读

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入