16 监控和告警 #
在 SUSE Enterprise Storage 7 中,cephadm 会部署一个监控和告警堆栈。用户需要在 YAML 配置文件中定义要使用 cephadm 部署的服务(例如 Prometheus、告警管理器和 Grafana),也可以使用 CLI 来部署这些服务。当部署多个相同类型的服务时,会部署高可用性设置。但 Node Exporter 不适用于此规则。
使用 cephadm 可以部署以下监控服务:
Prometheus 是监控和警告工具箱。它会收集 Prometheus 导出程序提供的数据,并在达到预定义阈值时触发预配置的告警。
Alertmanager 用于处理 Prometheus 服务器发送的警告。它将负责删除重复信息、分组并将告警路由到正确的接收器。默认情况下,Ceph Dashboard 将自动配置为接收器。
Grafana 是虚拟化和警告软件。此监控堆栈不使用 Grafana 的告警功能。而是使用告警管理器进行告警。
Node Exporter 是 Prometheus 的导出程序,用于提供其所安装到的节点的相关数据。建议您在所有节点上安装 Node Exporter。
Prometheus Manager 模块提供有 Prometheus 导出程序,可从 ceph-mgr
中的收集点传递 Ceph 性能计数器。
Prometheus 配置(包括抓取目标(度量提供守护进程))由 cephadm 自动设置。cephadm 还会部署默认告警列表,例如 health error
、10% OSDs down
或 pgs inactive
。
默认情况下,传入 Grafana 的流量会使用 TLS 加密。您可以提供自己的 TLS 证书,也可以使用自我签名证书。如果在部署 Grafana 之前未配置自定义证书,则将自动为 Grafana 创建和配置自我签名证书。
可使用以下命令配置 Grafana 的自定义证书:
cephuser@adm >
ceph config-key set mgr/cephadm/grafana_key -i $PWD/key.pemcephuser@adm >
ceph config-key set mgr/cephadm/grafana_crt -i $PWD/certificate.pem
Alertmanager 处理 Prometheus 服务器发送的警告。它负责重复信息删除、分组,并将它们路由到正确的接收器。可以使用告警管理器消除告警,但也可以使用 Ceph Dashboard 管理静默功能。
建议您在所有节点上部署 Node Exporter
。可以使用含有 node-exporter
服务类型的 monitoring.yaml
文件执行此操作。有关部署服务的详细信息,请参见第 5.4.3.8 节 “部署监控堆栈”。
16.1 配置自定义或本地映像 #
要部署自定义或本地容器映像,需要在 cephadm 中设置映像。为此,您需要运行以下命令:
cephuser@adm >
ceph config set mgr mgr/cephadm/OPTION_NAME VALUE
其中,OPTION_NAME 为以下任何名称:
container_image_prometheus
container_image_node_exporter
container_image_alertmanager
container_image_grafana
如果未设置任何选项或已删除该设置,则将使用以下映像作为 VALUE:
registry.suse.com/caasp/v4.5/prometheus-server:2.18.0
registry.suse.com/caasp/v4.5/prometheus-node-exporter:0.18.1
registry.suse.com/caasp/v4.5/prometheus-alertmanager:0.16.2
registry.suse.com/ses/7/ceph/grafana:7.0.3
例如:
cephuser@adm >
ceph config set mgr mgr/cephadm/container_image_prometheus prom/prometheus:v1.4.1
设置自定义映像将覆盖默认值(但并不会重写)。当有可用更新时,默认值将发生更改。设置自定义映像后,您将无法自动更新设置了自定义映像的组件。您需要手动更新配置(映像名称和标记)才能安装更新。
如果您选择遵循这些建议,则可以重置之前设置的自定义映像。之后,将再次使用默认值。使用 ceph config rm
重置配置选项:
cephuser@adm >
ceph config rm mgr mgr/cephadm/OPTION_NAME
例如:
cephuser@adm >
ceph config rm mgr mgr/cephadm/container_image_prometheus
16.2 更新监控服务 #
如第 16.1 节 “配置自定义或本地映像”中所述,cephadm 随附有推荐且经过测试的容器映像的 URL,默认会使用这些 URL。
更新 Ceph 包后,可能会随附这些 URL 的新版本。这只会更新容器映像的提取位置,而不会更新任何服务。
更新新容器映像的 URL(可以按第 16.1 节 “配置自定义或本地映像”中所述执行手动更新,也可以通过更新 Ceph 包进行自动更新)后,便可以更新监控服务。
要执行此操作,请使用 ceph orch redeploy
,如下所示:
cephuser@adm >
ceph orch redeploy node-exportercephuser@adm >
ceph orch redeploy prometheuscephuser@adm >
ceph orch redeploy alertmanagercephuser@adm >
ceph orch redeploy grafana
当前没有可更新所有监控服务的单一命令。这些服务的更新顺序并不重要。
如果您使用自定义容器映像,则在更新 Ceph 包时为监控服务指定的 URL 不会自动更改。如果您已指定自定义容器映像,则需要手动指定新容器映像的 URL。使用本地容器注册表时,可能会出现这种情况。
您可以在第 16.1 节 “配置自定义或本地映像”一节中找到要使用的推荐容器映像的 URL。
16.3 禁用监控 #
要禁用监控堆栈,请运行以下命令:
cephuser@adm >
ceph orch rm grafanacephuser@adm >
ceph orch rm prometheus --force # this will delete metrics data collected so farcephuser@adm >
ceph orch rm node-exportercephuser@adm >
ceph orch rm alertmanagercephuser@adm >
ceph mgr module disable prometheus
16.4 配置 Grafana #
Ceph Dashboard 后端要求 Grafana URL 能够在前端均衡加载 Grafana 仪表盘之前确认其是否存在。由于 Grafana 在 Ceph Dashboard 中的实施方式性质,意味着需要两个有效连接才能在 Ceph Dashboard 中看到 Grafana 图形:
后端(Ceph MGR 模块)需要确认请求的图形是否存在。如果此请求成功,便会告知前端它可以安全地访问 Grafana。
然后,前端会使用
iframe
直接从用户的浏览器请求 Grafana 图形。可以直接访问 Grafana 实例,而无需再经由 Ceph Dashboard。
现在,您的环境可能会使用户的浏览器难以直接访问 Ceph Dashboard 中配置的 URL。为解决此问题,可以配置一个单独的 URL,专用于告知前端(用户的浏览器)应该使用哪个 URL 来访问 Grafana。
要更改返回给前端的 URL,请发出以下命令:
cephuser@adm >
ceph dashboard set-grafana-frontend-api-url GRAFANA-SERVER-URL
如果没有为该选项设置任何值,它将回退到 GRAFANA_API_URL 选项的值,该选项值自动设置并由 cephadm 定期更新。如果设置了值,它将指示浏览器使用此 URL 来访问 Grafana。
16.5 配置 Prometheus Manager 模块 #
Prometheus Manager 模块是一个 Ceph 内部模块,它扩展了 Ceph 的功能。该模块会从 Ceph 读取有关其状态和健康状况的(元)数据,并以可使用的格式向 Prometheus 提供(抓取的)数据。
需要重启动 Prometheus Manager 模块才能应用配置更改。
16.5.1 配置网络接口 #
默认情况下,Prometheus Manager 模块接受主机上所有 IPv4 和 IPv6 地址的端口 9283 上的 HTTP 请求。端口和侦听地址都可使用 ceph config-key set
进行配置,并使用键 mgr/prometheus/server_addr
和 mgr/prometheus/server_port
。此端口已在 Prometheus 的注册表中注册。
要更新 server_addr
,请执行以下命令:
cephuser@adm >
ceph config set mgr mgr/prometheus/server_addr 0.0.0.0
要更新 server_port
,请执行以下命令:
cephuser@adm >
ceph config set mgr mgr/prometheus/server_port 9283
16.5.2 配置 scrape_interval
#
Prometheus Manager 模块默认配置了15 秒的抓取间隔。我们建议使用的抓取间隔不少于 10 秒。要在 Prometheus 模块中设置其他抓取间隔,请将 scrape_interval
设置为所需值:
要想正常运作而不会导致任何问题,此模块的 scrape_interval
应始终按照 Prometheus 抓取间隔进行设置。
cephuser@adm >
ceph config set mgr mgr/prometheus/scrape_interval 15
16.5.3 配置缓存 #
在大型集群(超过 1000 个 OSD)上,提取度量的时间可能会变得非常重要。如果没有缓存,Prometheus Manager 模块可能会使管理器过载,并导致 Ceph Manager 实例无响应或崩溃。因此,系统默认会启用缓存,并且不能禁用缓存,但这意味着缓存可能会过时。当从 Ceph 提取度量的时间超过所配置的 scrape_interval
时,缓存将被视为过时。
如果发生此情况,系统将记录一条警报,并且模块将:
以 503 HTTP 状态码(服务不可用)响应。
返回缓存的内容,即使该内容可能已过时。
可使用 ceph config set
命令配置此行为。
要告知模块以可能过时的数据进行响应,请将其设置为 return
:
cephuser@adm >
ceph config set mgr mgr/prometheus/stale_cache_strategy return
要告知模块以 service unavailable
进行响应,请将其设置为 fail
:
cephuser@adm >
ceph config set mgr mgr/prometheus/stale_cache_strategy fail
16.5.4 启用 RBD 映像监控 #
Prometheus Manager 模块可以通过启用动态 OSD 性能计数器来选择性地收集 RBD 每个映像的 IO 统计数据。如此将为在 mgr/prometheus/rbd_stats_pools
配置参数中指定的存储池中的所有映像收集统计数据。
参数是以逗号或空格分隔的 pool[/namespace]
条目列表。如果未指定名称空间,则将收集存储池中所有名称空间的统计数据。
例如:
cephuser@adm >
ceph config set mgr mgr/prometheus/rbd_stats_pools "pool1,pool2,poolN"
该模块会扫描指定的存储池和名称空间,列出所有可用映像,并定期刷新该列表。此间隔可通过 mgr/prometheus/rbd_stats_pools_refresh_interval
参数进行配置(以秒为单位),默认值为 300 秒(5 分钟)。
例如,如果您将同步间隔更改为 10 分钟:
cephuser@adm >
ceph config set mgr mgr/prometheus/rbd_stats_pools_refresh_interval 600
16.6 Prometheus 安全模型 #
Prometheus 的安全模型假设不受信任的用户有权访问 Prometheus HTTP 端点和日志。不受信任的用户有权访问数据库中所包含的 Prometheus 收集的所有(元)数据,以及各种操作和调试信息。
不过,Prometheus 的 HTTP API 仅限只读操作。无法使用 API 更改配置,并且不会公开秘密密钥。此外,Prometheus 还有一些内置的措施可用于缓解拒绝服务攻击的影响。
16.7 Prometheus 告警管理器 SNMP Webhook #
如果您想通过 SNMP 陷阱接收有关 Prometheus 告警的通知,可以通过 cephadm 安装 Prometheus 告警管理器 SNMP Webhook。为此,您需要使用以下内容创建服务和归置规范文件:
有关服务和归置文件的详细信息,请参见第 5.4.2 节 “服务和归置规范”。
service_type: container service_id: prometheus-webhook-snmp placement: ADD_PLACEMENT_HERE image: registry.suse.com/ses/7/prometheus-webhook-snmp:latest args: - "--publish 9099:9099" envs: - ARGS="--debug --snmp-host=ADD_HOST_GATEWAY_HERE" - RUN_ARGS="--metrics" EOF
使用此服务规范可让服务使用其默认设置运行。
运行该服务时,您需要使用命令行自变量 --publish HOST_PORT:CONTAINER_PORT
来发布 Prometheus 接收器正在侦听的端口,因为容器不会自动公开该端口。可通过在规范中添加下面几行来完成此操作:
args: - "--publish 9099:9099"
或者,使用命令行自变量 --network=host
将容器连接到主机网络。
args: - "--network=host"
如果未在与容器相同的主机上安装 SNMP 陷阱接收器,则还必须指定 SNMP 主机的 FQDN。使用容器的网络网关可以接收容器/主机外部的 SNMP 陷阱:
envs: - ARGS="--debug --snmp-host=CONTAINER_GATEWAY"
16.7.1 配置 prometheus-webhook-snmp
服务 #
可以通过环境变量或使用配置文件来配置容器。
对于环境变量,请使用 ARGS
设置全局选项,并使用 RUN_ARGS
设置 run
命令选项。您需要如下所示调整服务规范:
envs: - ARGS="--debug --snmp-host=CONTAINER_GATEWAY" - RUN_ARGS="--metrics --port=9101"
要使用配置文件,必须如下所示调整服务规范:
files: etc/prometheus-webhook-snmp.conf: - "debug: True" - "snmp_host: ADD_HOST_GATEWAY_HERE" - "metrics: True" volume_mounts: etc/prometheus-webhook-snmp.conf: /etc/prometheus-webhook-snmp.conf
要进行部署,请运行以下命令:
cephuser@adm >
ceph orch apply -i SERVICE_SPEC_FILE
有关更多信息,请参见第 5.4.3 节 “部署 Ceph 服务”。
16.7.2 为 SNMP 配置 Prometheus 告警管理器 #
最后,需要为 SNMP 陷阱配置专用的 Prometheus 告警管理器。如果尚未部署此服务,请创建服务规范文件。您需要使用安装了 Prometheus 告警管理器 SNMP Webhook 的主机的 IP 地址或 FQDN 来替换 IP_OR_FQDN
。例如:
如果您已部署此服务,请确保为 SNMP 正确设置告警管理器,使用以下设置重新部署。
service_type: alertmanager placement: hosts: - HOSTNAME webhook_configs: - 'http://IP_OR_FQDN:9099/'
使用以下命令应用服务规范:
cephuser@adm >
ceph orch apply -i SERVICE_SPEC_FILE