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 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 ServiceMonitor
、PodMonitor
和 PrometheusRule
不可用。
然后,必须通过配置文件配置 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 警报的历史记录。