注意

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

监控概述

本文档解释了 Ceph 监控栈和若干重要 Ceph 指标。

Ceph 管理员可以探索 Ceph 部署的丰富可观察性栈,并可以利用 Prometheus、Alertmanager、Grafana 和脚本创建自定义监控工具。

Ceph 监控栈

Ceph 部署了一个集成监控栈,如文档中所述监控服务部分的cephadm文档。使用这些或其他工具进行外部集群范围监控和可观察性系统部署时,可以选择禁用 Ceph 默认部署的栈。

Ceph 指标

许多 Ceph 指标是从每个 Ceph 守护进程暴露的性能计数器中收集的。这些性能计数器是原生 Ceph 指标。

性能计数器由守护进程转换为标准 Prometheus 指标。该守护进程在每个 Ceph 集群主机上运行,并暴露一个端点,在该端点上,在该主机上运行的 Ceph 守护进程暴露的性能计数器以 Prometheus 指标的格式呈现。ceph_exporter daemon. This daemon runs on every Ceph cluster host and exposes an endpoint where performance counters exposed by Ceph daemons running on that host are presented in the form of Prometheus metrics.

除了ceph_exporterCeph 管理器prometheus模块

Ceph 提供了一个 Prometheus 端点,从中可以获得可用指标的完整列表,或者管理员、Grafana 和 Alertmanager 可以执行查询。

Prometheus(及相关系统)接受格式化为 PromQL 表达式的数据查询。Expansive 文档 of PromQL 可以https://prometheus.io/docs/prometheus/latest/querying/basics/) and

下面我们将探讨一些 PromQL 查询。使用以下命令获取您的集群的 Prometheus 端点:

Example:

# ceph orch ps --service_name prometheus
NAME                         HOST                          PORTS   STATUS          REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
prometheus.cephtest-node-00  cephtest-node-00.cephlab.com  *:9095  running (103m)    50s ago   5w     142M        -  2.33.4   514e6a882f6e  efe3cbc2e521

使用这些信息,您可以连接到http://cephtest-node-00.cephlab.com:9095以访问 Prometheus 服务器界面,该界面包括目标列表、表达式浏览器以及与 Prometheus 服务本身相关的指标。

完整的指标列表(含描述)可在以下格式的 URL 中获得:

http://cephtest-node-00.cephlab.com:9095/api/v1/targets/metadata

Ceph 仪表板提供了一套丰富的图表和其他面板,用于显示最重要的集群和服务指标。本文档中的许多示例来自仪表板图形或从 Ceph 仪表板暴露的指标推断而来。

Ceph 守护进程健康指标

The ceph_exporter提供一个名为ceph_daemon_socket_up的指标,该指标根据 Ceph 守护进程通过管理员套接字响应的能力来指示其健康状态,其中1的值表示健康,而0的值表示不健康。尽管 Ceph 守护进程在报告ceph_daemon_socket_up=0时可能仍然“活着”,但此状态表明其功能存在重大问题。因此,此指标是检测任何主要 Ceph 守护进程问题的绝佳方法。

The ceph_daemon_socket_upPrometheus 指标还具有以下标签:ceph_daemon: 标识在主机上暴露管理员套接字的 Ceph 守护进程。hostname: Ceph 守护进程正在运行的主机的名称。

Example:

ceph_daemon_socket_up{ceph_daemon="mds.a",hostname="testhost"} 1
ceph_daemon_socket_up{ceph_daemon="osd.1",hostname="testhost"} 0

要识别在过去 12 小时内任何时间点未响应的任何 Ceph 守护进程,您可以使用以下 PromQL 表达式:

ceph_daemon_socket_up == 0 or min_over_time(ceph_daemon_socket_up[12h]) == 0

性能指标

下面我们探讨一些指示 Ceph 集群性能的指标。

所有这些指标都具有以下标签:ceph_daemon: 从中收集指标的 Ceph 守护进程的标识符instance: 暴露指标的导出器实例的 IP 地址。job: Prometheus 扫描作业名称

下面是一个 Prometheus 查询结果的示例,显示了这些标签:

ceph_osd_op_r{ceph_daemon="osd.0", instance="192.168.122.7:9283", job="ceph"} = 73981

集群吞吐量:查询ceph_osd_op_r_out_bytesceph_osd_op_w_in_bytes以获取集群客户端吞吐量:

Example:

# Writes (B/s):
sum(irate(ceph_osd_op_w_in_bytes[1m]))

# Reads (B/s):
sum(irate(ceph_osd_op_r_out_bytes[1m]))

集群 I/O(操作):查询ceph_osd_op_r, ceph_osd_op_w以获取客户端操作(IOPS)的速率:

Example:

# Writes (ops/s):
sum(irate(ceph_osd_op_w[1m]))

# Reads (ops/s):
sum(irate(ceph_osd_op_r[1m]))

延迟:查询ceph_osd_op_latency_sum以测量客户端请求导致 OSD 数据传输开始前的延迟:

Example:

sum(irate(ceph_osd_op_latency_sum[1m]))

OSD 性能

上面描述的集群性能指标是从 OSD 指标收集的。通过指定适当的标签值或正则表达式,我们可以检索一个或集群 OSD 子集的性能指标:

示例:

# OSD 0 read latency
irate(ceph_osd_op_r_latency_sum{ceph_daemon=~"osd.0"}[1m]) / on (ceph_daemon) irate(ceph_osd_op_r_latency_count[1m])

# OSD 0 write IOPS
irate(ceph_osd_op_w{ceph_daemon=~"osd.0"}[1m])

# OSD 0 write thughtput (bytes)
irate(ceph_osd_op_w_in_bytes{ceph_daemon=~"osd.0"}[1m])

# OSD.0 total raw capacity available
ceph_osd_stat_bytes{ceph_daemon="osd.0", instance="cephtest-node-00.cephlab.com:9283", job="ceph"} = 536451481

物理存储驱动器性能:

通过将 Prometheusnode_exporter指标与 Ceph 集群指标结合,我们可以

Example:

# Read latency of device used by osd.0
label_replace(irate(node_disk_read_time_seconds_total[1m]) / irate(node_disk_reads_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")

# Write latency of device used by osd.0
label_replace(irate(node_disk_write_time_seconds_total[1m]) / irate(node_disk_writes_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")

# IOPS of device used by osd.0
# reads:
label_replace(irate(node_disk_reads_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")

# writes:
label_replace(irate(node_disk_writes_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")

# Throughput for device used by osd.0
# reads:
label_replace(irate(node_disk_read_bytes_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")

# writes:
label_replace(irate(node_disk_written_bytes_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")

# Physical drive utilization (%) for osd.0 in the last 5 minutes. Note that this value has limited mean for SSDs
label_replace(irate(node_disk_io_time_seconds_total[5m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")

池指标

Ceph 池指标具有以下标签:

  • instance: 提供指标的导出器的 IP 地址

  • pool_id: Ceph 池的数字标识符

  • job: Prometheus 扫描作业名称

池特定指标包括:

  • ceph_pool_metadata: 池信息,可用于与其他指标结合使用,以在查询结果和图表中提供更多信息。除了上述三个常见标签外,此指标还提供以下:

  • compression_mode: 池启用的压缩类型。值为lz4, snappy, zlib, zstd, and none`). Example: ``compression_mode="none"

  • description: 池数据保护策略的简要描述,包括副本数量或 EC 配置。示例:description="replica:3"

  • name: 池的名称。示例:name=".mgr"

  • type: 数据保护策略,复制或 EC。Example: type="replicated"

  • ceph_pool_bytes_used: 用户数据和元数据消耗的总原始容量(经过复制或 EC)

  • ceph_pool_stored: 池中存储的总客户端数据(数据保护之前)

  • ceph_pool_compress_under_bytes: 池中可以压缩的数据

  • ceph_pool_compress_bytes_used: 池中压缩的数据

  • ceph_pool_rd: 每个池的客户端读取操作(每秒读取次数)

  • ceph_pool_rd_bytes: 每个池的客户端读取操作字节数

  • ceph_pool_wr: 每个池的客户端写入操作(每秒写入次数)

  • ceph_pool_wr_bytes: 每个池的客户端写入操作字节数

有用查询:

# Total raw capacity available in the cluster:
sum(ceph_osd_stat_bytes)

# Total raw capacity consumed in the cluster (including metadata + redundancy):
sum(ceph_pool_bytes_used)

# Total client data stored in the cluster:
sum(ceph_pool_stored)

# Compression savings:
sum(ceph_pool_compress_under_bytes - ceph_pool_compress_bytes_used)

# Client IOPS for a specific pool
reads: irate(ceph_pool_rd[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}
writes: irate(ceph_pool_wr[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}

# Client throughput for a specific pool
reads: irate(ceph_pool_rd_bytes[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}
writes: irate(ceph_pool_wr_bytes[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}

RGW 指标

这些指标具有以下标签:

  • instance: 提供指标的导出器的 IP 地址

  • instance_id: RGW 守护进程实例的标识符

  • job: Orometheus 扫描作业名称

Example:

ceph_rgw_req{instance="192.168.122.7:9283", instance_id="154247", job="ceph"} = 12345

通用指标

  • ceph_rgw_metadata: 提供有关 RGW 守护进程的通用信息。这可以与其他指标结合使用,以在查询和图表中提供上下文信息。除了三个常见标签外,此指标还提供以下:

    • ceph_daemon: RGW 守护进程实例的名称。示例:ceph_daemon="rgw.rgwtest.cephtest-node-00.sxizyq"

    • ceph_version: RGW 守护进程的版本。示例:ceph_version="ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)"

    • hostname: 守护进程运行的主机的名称。示例:hostname:"cephtest-node-00.cephlab.com"

    • ceph_rgw_req: 守护进程处理的请求数量GET``+``PUT``+``DELETE)。 检测瓶颈和优化负载分配时很有用。

    • ceph_rgw_qlen: 守护进程的操作队列长度。 检测瓶颈和优化负载分配时很有用。

    • ceph_rgw_failed_req: 中止的请求。 检测守护进程错误时很有用。

GET 操作指标

  • ceph_rgw_op_global_get_obj_lat_count: 请求数量GET: 请求数据的总延迟

  • ceph_rgw_op_global_get_obj_lat_sum: 请求数据的总数量GET: 请求数据的总延迟

  • ceph_rgw_op_global_get_obj_ops: 操作GET: 请求数据的总延迟

  • ceph_rgw_op_global_get_obj_bytes: 请求数据传输的总字节数GET: 请求数据的总延迟

PUT 操作指标

  • ceph_rgw_op_global_put_obj_lat_count: get 操作数量

  • ceph_rgw_op_global_put_obj_lat_sum: 操作PUT中的总字节数传输

  • ceph_rgw_op_global_put_obj_ops: 操作PUT中的总字节数传输

  • ceph_rgw_op_global_get_obj_bytes: 操作PUT中的总字节数传输

其他有用查询

# Average GET latency
rate(ceph_rgw_op_global_get_obj_lat_sum[30s]) / rate(ceph_rgw_op_global_get_obj_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata

# Average PUT latency
rate(ceph_rgw_op_global_put_obj_lat_sum[30s]) / rate(ceph_rgw_op_global_put_obj_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata

# Requests per second
rate(ceph_rgw_req[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata

# Total number of "other" operations (``LIST``, ``DELETE``, etc)
rate(ceph_rgw_req[30s]) -  (rate(ceph_rgw_op_global_get_obj_ops[30s]) + rate(ceph_rgw_op_global_put_obj_ops[30s]))

# GET latency per RGW instance
rate(ceph_rgw_op_global_get_obj_lat_sum[30s]) /  rate(ceph_rgw_op_global_get_obj_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata

# PUT latency per RGW instance
rate(ceph_rgw_op_global_put_obj_lat_sum[30s]) /  rate(ceph_rgw_op_global_put_obj_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata

# Bandwidth consumed by GET operations
sum(rate(ceph_rgw_op_global_get_obj_bytes[30s]))

# Bandwidth consumed by PUT operations
sum(rate(ceph_rgw_op_global_put_obj_bytes[30s]))

# Bandwidth consumed by RGW instance (PUTs + GETs)
sum by (instance_id) (rate(ceph_rgw_op_global_get_obj_bytes[30s]) + rate(ceph_rgw_op_global_put_obj_bytes[30s])) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata

# HTTP errors and other request failures
rate(ceph_rgw_failed_req[30s])

CephFS 指标

这些指标具有以下标签:

  • ceph_daemon: MDS 守护进程的名称

  • instance: 暴露指标的导出器的 IP 地址和端口

  • job: Prometheus 扫描作业名称

Example:

ceph_mds_request{ceph_daemon="mds.test.cephtest-node-00.hmhsoh", instance="192.168.122.7:9283", job="ceph"} = 1452

重要指标

  • ceph_mds_metadata: 提供有关 MDS 守护进程的通用信息。它可与其他指标结合使用,以在查询和图表中提供上下文信息。以下额外标签已填充:

    • ceph_version: MDS 守护进程版本

    • fs_id: CephFS 文件系统 ID

    • hostname: MDS 守护进程运行的主机名称

    • public_addr: MDS 守护进程运行主机的公共地址

    • rank: MDS 守护进程的排名

Example:

ceph_mds_metadata{ceph_daemon="mds.test.cephtest-node-00.hmhsoh", ceph_version="ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)", fs_id="-1", hostname="cephtest-node-00.cephlab.com", instance="cephtest-node-00.cephlab.com:9283", job="ceph", public_addr="192.168.122.145:6801/118896446", rank="-1"}
  • ceph_mds_request: MDS 的总请求数

  • ceph_mds_reply_latency_sum: 回复延迟总计

  • ceph_mds_reply_latency_count: 回复延迟计数

  • ceph_mds_server_handle_client_request: 客户端请求数量

  • ceph_mds_sessions_session_count: 会话计数

  • ceph_mds_sessions_total_load: 总负载

  • ceph_mds_sessions_sessions_open: 当前打开的会话

  • ceph_mds_sessions_sessions_stale: 当前过期的会话

  • ceph_objecter_op_r: 读操作数量

  • ceph_objecter_op_w: 写操作数量

  • ceph_mds_root_rbytes: 守护进程管理的总字节数

  • ceph_mds_root_rfiles: 守护进程管理的总文件数量

有用查询:

# Total MDS read workload:
sum(rate(ceph_objecter_op_r[1m]))

# Total MDS daemons workload:
sum(rate(ceph_objecter_op_w[1m]))

# Read workload for a specific MDS
sum(rate(ceph_objecter_op_r{ceph_daemon=~"mdstest"}[1m]))

# Write workload for a specific MDS
sum(rate(ceph_objecter_op_r{ceph_daemon=~"mdstest"}[1m]))

# Average reply latency
rate(ceph_mds_reply_latency_sum[30s]) / rate(ceph_mds_reply_latency_count[30s])

# Total requests per second
rate(ceph_mds_request[30s]) * on (instance) group_right (ceph_daemon) ceph_mds_metadata

块指标

默认情况下,不收集 RBD 图像指标,因为它们的基数可能很高。这有助于确保prometheus模块。

性能。要为 RBD 图像生成指标,请配置 Manager 选项mgr/prometheus/rbd_stats_pools。有关更多信息,请参阅Ceph 健康检查

这些指标具有以下标签:

  • image: 图像(卷)的名称

  • instance: 导出器运行的主机

  • job: Prometheus 扫描作业的名称

  • pool: RBD 池名称

Example:

ceph_rbd_read_bytes{image="test2", instance="cephtest-node-00.cephlab.com:9283", job="ceph", pool="testrbdpool"}

重要指标

  • ceph_rbd_read_bytes: RBD 读取字节数

  • ceph_rbd_write_bytes: RBD 图像写入字节数

  • ceph_rbd_read_latency_count: RBD 读取操作延迟计数

  • ceph_rbd_read_latency_sum: RBD 读取操作延迟总时间

  • ceph_rbd_read_ops: RBD 读取操作计数

  • ceph_rbd_write_ops: RBD 写入操作计数

  • ceph_rbd_write_latency_count: RBD 写入操作延迟计数

  • ceph_rbd_write_latency_sum: RBD 写入操作延迟总

有用查询

# Average read latency
rate(ceph_rbd_read_latency_sum[30s]) / rate(ceph_rbd_read_latency_count[30s]) * on (instance) group_left (ceph_daemon) ceph_rgw_metadata

硬件监控

请参阅硬件监控

由 Ceph 基金会带给您

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