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) ServiceMonitor、PodMonitor 和 PrometheusRule。ServiceMonitor 和 PodMonitor 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。要为前面步骤中部署的 ServiceMonitor 和 PodMonitor 添加标签,请运行
kubectl label ServiceMonitor rabbitmq team=frontend
kubectl label PodMonitor rabbitmq-cluster-operator team=frontend
ServiceMonitor 和 PodMonitor 可以在任何命名空间中创建,只要 Prometheus Operator 具有查找它们的权限即可。有关这些权限的更多信息,请参阅本信息后面的 配置 Prometheus Operator 的权限。
Prometheus Operator 将检测 ServiceMonitor 和 PodMonitor 对象,并自动配置和重新加载 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 安装的,而是由其他方式安装的,则 ServiceMonitor、PodMonitor 和 PrometheusRule 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 告警的历史记录。