跳到主要内容

Kubernetes Cluster Operator 部署的 RabbitMQ 实例监控

使用此信息了解如何监控Kubernetes Cluster Operator 部署的 RabbitMQ 实例。

RabbitMQ 监控简介

Kubernetes Cluster Operator 部署的 RabbitMQ 集群已激活或启用 rabbitmq_prometheus 插件。此插件公开了一个 Prometheus 兼容的指标端点。

有关 RabbitMQ Prometheus 配置的详细信息,请查看 Prometheus 信息。

以下各节假定 Prometheus 已部署且功能正常。如何配置 Prometheus 以监控 RabbitMQ 取决于 Prometheus 是否由 Prometheus Operator 安装通过其他方式安装

使用 Prometheus Operator 监控 RabbitMQ

Prometheus Operator 定义了自定义资源定义 (CRD) ServiceMonitorPodMonitorPrometheusRuleServiceMonitorPodMonitor CRD 允许声明式地定义应如何监控动态服务和 Pod 集。

检查 RabbitMQ Kubernetes 集群是否已部署 Prometheus Operator

kubectl get customresourcedefinitions.apiextensions.k8s.io servicemonitors.monitoring.coreos.com

如果此命令返回错误,则表示 Prometheus Operator 未部署。如果要部署它,请按照这些说明进行操作。

要监控所有 RabbitMQ 集群,请运行

kubectl apply --filename https://raw.githubusercontent.com/rabbitmq/cluster-operator/main/observability/prometheus/monitors/rabbitmq-servicemonitor.yml

要监控 RabbitMQ Cluster Operator,请运行

kubectl apply --filename https://raw.githubusercontent.com/rabbitmq/cluster-operator/main/observability/prometheus/monitors/rabbitmq-cluster-operator-podmonitor.yml

如果 Prometheus 部署时带有 Pod 或 Service monitor 的标签选择器,例如

  apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
spec:
serviceAccountName: prometheus
serviceMonitorSelector:
matchLabels:
team: frontend
podMonitorSelector:
matchLabels:
team: frontend

则需要将相同的标签添加到使用上一个命令部署的 ServiceMonitor。要标记先前步骤中部署的 ServiceMonitorPodMonitor,请运行

  kubectl label ServiceMonitor rabbitmq team=frontend
kubectl label PodMonitor rabbitmq-cluster-operator team=frontend

ServiceMonitorPodMonitor 可以在任何命名空间中创建,只要 Prometheus Operator 有权找到它即可。有关这些权限的更多信息,请参阅本文档稍后的配置 Prometheus Operator 的权限

Prometheus Operator 将检测 ServiceMonitorPodMonitor 对象,并自动配置和重新加载 Prometheus 的 scrape config

要验证 Prometheus 是否成功抓取指标,请在浏览器中打开 Prometheus Web UI(向管理员询问 URL),然后导航到 Status -> Targets 页面,您应该会看到 Cluster Operator 的条目(例如:podMonitor/<podMonitorNamespace>/rabbitmq-cluster-operator/0 (1/1 up))以及每个已部署 RabbitMQ 集群的条目(例如:serviceMonitor/<serviceMonitorNamespace>/rabbitmq/0 (1/1 up))。

Prometheus 警报

自定义资源 PrometheusRule 允许声明式地定义 警报规则。要安装 RabbitMQ 警报规则,首先请确保已安装 kube-state-metrics

要部署 RabbitMQ 的 Prometheus 规则,请 kubectl apply rules/rabbitmq 目录中的所有 YAML 文件。

要部署 Cluster Operator 的 Prometheus 规则,请 kubectl apply rules/rabbitmq-cluster-operator 目录中的 YAML 文件。

Prometheus 自定义资源中的 ruleSelector 必须与已部署的 PrometheusRules 的标签匹配。

例如,在以下代码中,如果 Prometheus 自定义资源包含 ruleSelector,则需要向 PrometheusRules 添加标签 release: my-prometheus

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
...
spec:
...
ruleNamespaceSelector: {}
ruleSelector:
matchLabels:
release: my-prometheus
...
version: v2.26.0

要接收有关触发警报的通知(例如:通过电子邮件或 PagerDuty),请在 Alertmanager 中配置通知接收器。

要接收 Slack 通知,请在 alertmanager 目录中部署 Kubernetes Secret

(可选)配置 Prometheus Operator 的权限

如果 Prometheus 中未显示 RabbitMQ 集群,则可能需要调整 Prometheus Operator 的权限

以下步骤已通过 kube-prometheus 部署进行测试。

要配置 Prometheus Operator 的权限,首先创建一个名为 prometheus-roles.yaml 的文件,内容如下

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- configmaps
verbs: ["get"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus-k8s
namespace: monitoring

然后,通过运行以下命令应用 prometheus-roles.yaml 中列出的权限

kubectl apply -f prometheus-roles.yaml

在没有 Prometheus Operator 的情况下监控 RabbitMQ

如果 Prometheus 不是由 Prometheus Operator 安装的,而是通过其他方式安装的,则 CRD ServiceMonitorPodMonitorPrometheusRule 不可用。

然后,必须通过配置文件配置 Prometheus。要监控所有 RabbitMQ 集群和 RabbitMQ Cluster Operator,请使用 RabbitMQ 的 Prometheus 配置文件中定义的抓取目标。

要设置 RabbitMQ 警报规则,首先配置 Prometheus 以接收来自 kube-state-metrics 代理的指标。

此后,配置 Prometheus 以使用 Prometheus 规则文件

要接收 Slack 通知,请使用与 alertmanager/slack.yml 中提供的相同的 alertmanager.yaml,用于 Alertmanager 配置文件

将仪表板导入 Grafana

RabbitMQ 提供了 Grafana 仪表板来可视化 Prometheus 抓取的指标。

按照 Grafana 配置 信息中的说明将仪表板导入 Grafana。

或者,如果 Grafana 是通过 Grafana Helm chart 部署的,请 kubectl apply grafana/dashboards 目录中的 ConfigMaps,以使用 sidecar 容器导入 RabbitMQ Grafana 仪表板。

RabbitMQ-Alerts 仪表板提供了 Kubernetes 中所有 RabbitMQ 集群中所有过去 RabbitMQ 警报的历史记录。

© . All rights reserved.