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) 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 集群操作员,请运行
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
中。要标记先前步骤中部署的 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 的 抓取配置。
要验证 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 ServiceMonitor
、PodMonitor
和 PrometheusRule
不可使用。
然后,必须通过 配置文件进行配置 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 警报的历史记录。