跳至主内容

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 配置

要验证 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 的权限

如果没有 RabbitMQ 集群出现在 Prometheus 中,则可能需要 调整 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 安装的,而是由其他方式安装的,则 ServiceMonitorPodMonitorPrometheusRule CRD 将不可用。

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

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

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

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

将仪表板导入 Grafana

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

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

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

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

© . This site is unofficial and not affiliated with VMware.