注意

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

监控服务

Ceph 仪表板使用Prometheus, Grafana以及相关工具来存储和可视化集群利用率和性能的详细指标。Ceph 用户有三个选项:

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

  2. 手动部署和配置这些服务。这对于在其环境中具有现有 Prometheus 服务的用户(以及在 Ceph 在 Kubernetes 中使用 Rook 的情况下)是推荐的。

  3. 完全跳过监控堆栈。一些 Ceph 仪表板图表将不可用。

监控堆栈由Prometheus,Prometheus 模块, 节点导出器),Prometheus AlertGrafana.

Note

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

然而,Prometheus 的 HTTP API 仅限于只读操作。配置可以使用 API 进行更改,并且秘密不会被公开。此外,Prometheus 拥有一些内置措施来减轻拒绝服务攻击的影响。firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。 be changed using the API and secrets are not exposed. Moreover, Prometheus has some built-in measures to mitigate the impact of denial of service attacks.

请参阅Prometheus 的安全模型以获取更详细的信息。

使用 cephadm 部署监控

的默认行为会导致cephadm旨在部署一个基本的监控堆栈。但是,您可能有一个没有监控堆栈的 Ceph 集群,并且您希望向其中添加一个监控堆栈。(您可能没有监控堆栈的 Ceph 集群的一些方式:您可能在集群安装期间错过了--skip-monitoring stack option to 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,并且需要身份验证才能访问数据源信息。

在这种安全设置中,用户需要在 Prometheus 和 Alertmanager 上设置身份验证admin/admin。用户可以使用命令ceph orch prometheus set-credentialsceph orch alertmanager set-credentials分别更改这些值。这些命令允许用户作为参数或通过 JSON 文件输入用户名/密码,从而提高了安全性。此外,Cephadm 提供了命令orch prometheus get-credentialsorch alertmanager get-credentials来检索当前凭证。

Ceph 中的集中式日志记录

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

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

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

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

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

Ceph 中的集中式日志记录使用两个新服务实现 -loki & promtail.

Loki:它基本上是一个日志聚合系统,用于查询日志。它可以配置为 Grafana 的数据源。

Promtail:它充当代理,从系统中收集日志并将其提供给 Loki。

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

网络和端口

所有监控服务都可以配置它们绑定到的网络和端口,使用 yaml 服务规范。默认情况下https协议,除非用户明确将协议设置为http.

示例规范文件:

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

默认镜像

The information in this section was developed by Eugen Block in a thread on

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

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

cephadm list-images

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

class ceph.cephadm.images.DefaultImages()

是一个枚举。

ALERTMANAGER = quay.io/prometheus/alertmanager:v0.27.0
ELASTICSEARCH = quay.io/omrizeneva/elasticsearch:6.8.23
GRAFANA = quay.io/ceph/grafana:11.6.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.7.0
NVMEOF = quay.io/ceph/nvmeof:1.5
OAUTH2_PROXY = quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
PROMETHEUS = quay.io/prometheus/prometheus:v2.51.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:latest
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

Note

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

如果您选择接受建议,您可以重置您之前设置的自定义镜像。如果您这样做,将再次使用默认值。使用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 模板。每次部署或重新配置此类服务时都会评估此模板。这样,自定义配置被保留,并在这些服务的未来部署中自动应用。

Note

自定义模板的配置在 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:

  • 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

查看当前由 cephadm 使用的文件模板。

以下命令应用单行值:

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

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

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

Note

在将文件用作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 服务器以检索特定服务的目标信息。此端点返回的信息使用 Prometheushttp_sd_config 选项指定的格式

以下是一个使用 cephadm 服务发现端点的 prometheus 工作定义示例

- job_name: 'ceph-exporter'
  http_sd_configs:
  - url: http://<mgr-ip>:8765/sd/prometheus/sd-config?service=ceph-exporter

禁用监控

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

$ 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-Image 监控

由于性能原因,默认情况下禁用 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"

Note

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

设置 Grafana

手动设置 Grafana URL

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

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

如果是这样,您可以使用 Ceph 仪表板的配置选项来设置用户浏览器将用于访问 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

cephadm使用 ceph key/value 存储中定义的证书部署 Grafana。如果没有指定证书,cephadm在部署 Grafana 服务期间生成自签名证书。每个证书都是为其生成的主机特定的。

可以使用以下命令配置自定义证书:

ceph config-key set mgr/cephadm/{hostname}/grafana_key -i $PWD/key.pem
ceph config-key set mgr/cephadm/{hostname}/grafana_crt -i $PWD/certificate.pem

其中hostname是 grafana 服务部署的主机的名称。

如果您已经部署了 Grafana,请在服务上运行reconfig来更新其配置:

ceph orch reconfig grafana

The reconfig命令还设置了 Ceph 仪表板的正确 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 只允许登录用户查看,您可以设置anonymous_access: False在您的 grafana 规范中。

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

由于部署 grafana 时匿名访问设置为 false,而没有设置初始管理员密码,仪表板将无法访问,因此 cephadm 要求在initial_admin_passwordb874e9: 设置 Alertmanageranonymous_access设置为 false 时设置

设置 Alertmanager

添加 Alertmanager webhooks

要向 Alertmanager 配置添加新的 webhooks,请像这样添加额外的 webhook urls:

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

其中default_webhook_urls是要添加到默认接收者<webhook_configs>configuration.

在你克隆仓库的目录中运行reconfig上的附加 URL 列表

ceph orch reconfig alertmanager

打开证书验证

如果您使用证书为 alertmanager 并希望确保这些证书得到验证,您应该在您的 alertmanager 规范中将“secure”选项设置为

service_type: alertmanager
spec:
  secure: true

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

ceph orch reconfig alertmanager

更多阅读

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.