跳至主要内容

Kubernetes 集群操作员部署的 RabbitMQ 实例监控

使用此信息了解如何 监控Kubernetes 集群操作员 部署的 RabbitMQ 实例。

介绍 RabbitMQ 中的监控

Kubernetes 集群操作员使用 rabbitmq_prometheus 插件 激活或开启部署 RabbitMQ 集群。此插件公开了一个与 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 集群操作员,请运行

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

如果 Prometheus 使用 Pod 或 Service 监控器的标签选择器进行部署,例如

  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 的 抓取配置

要验证 Prometheus 是否成功抓取指标,请在浏览器中打开 Prometheus Web UI(咨询管理员获取 URL)并导航到 Status -> Targets 页面,您应该会看到集群操作员的条目(例如: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 规则,请在 rules/rabbitmq 目录中对所有 YAML 文件运行 kubectl apply

要为集群操作员部署 Prometheus 规则,请在 rules/rabbitmq-cluster-operator 目录中对 YAML 文件运行 kubectl apply

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

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

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 集群操作员,请使用 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 图表 部署的,请在 grafana/dashboards 目录中对 ConfigMaps 运行 kubectl apply,以 使用 sidecar 容器 导入 RabbitMQ Grafana 仪表板。

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

© 2024 RabbitMQ. All rights reserved.