使用 Prometheus 和 Grafana 监控 EMQX
目标
配置 Prometheus 抓取 EMQX 集群指标,并在 Grafana 中将指标可视化。
部署 Prometheus 和 Grafana
- 有关 Prometheus 部署的详情,请参见 Prometheus 文档。
- 有关 Grafana 部署的详情,请参见 Grafana 文档。
部署 EMQX 集群
EMQX 通过兼容 Prometheus 的 HTTP API 公开多种指标。
apiVersion: apps.emqx.io/v3beta1
kind: EMQX
metadata:
name: emqx
spec:
image: emqx/emqx:6.3.2
config:
roots:
license:
key: "..."将以上内容保存为 emqx.yaml,然后运行以下命令部署 EMQX 集群:
$ kubectl apply -f emqx.yaml
emqx.apps.emqx.io/emqx created检查 EMQX 集群状态,并确保 STATUS 为 Ready。此过程可能需要一些时间。
$ kubectl get emqx emqx
NAME STATUS AGE
emqx Ready 10m创建 API 密钥
登录 Dashboard,并创建专用 API 密钥。为 Prometheus 创建 API 密钥时,请选择查看者角色,并仅授予 monitoring 权限范围。PodMonitor 将使用该密钥抓取 /api/v5/prometheus/stats。
请妥善保存 API Key 和 Secret Key。EMQX 仅显示 Secret Key 一次。
配置 Prometheus 监控
Prometheus Operator 使用 PodMonitor CRD 选择 Pod 并定义抓取端点。EMQX 通过 Dashboard 监听器公开 Prometheus 指标,该监听器的容器端口默认名为 dashboard。
以下 PodMonitor 从 emqx 集群的每个 Pod 抓取 EMQX 基础指标端点:
从 EMQX 6.3.0 开始,Prometheus 抓取 API 默认要求身份验证。请在 PodMonitor 所在的命名空间中创建 Kubernetes Secret,用于存储为 Prometheus 创建的 API Key 和 Secret Key:
kubectl create secret generic emqx-prometheus-basic-auth \
--from-literal=username='<API_KEY>' \
--from-literal=password='<SECRET_KEY>'apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: emqx
labels:
app.kubernetes.io/name: emqx
spec:
podMetricsEndpoints:
- interval: 5s
path: /api/v5/prometheus/stats
basicAuth:
username:
name: emqx-prometheus-basic-auth
key: username
password:
name: emqx-prometheus-basic-auth
key: password
# EMQX Dashboard 容器端口的名称。
port: dashboard
relabelings:
- action: replace
# 每个 EMQX 集群应使用不同的值。
replacement: emqx5
targetLabel: cluster
- action: replace
# 请勿修改此值。
replacement: emqx
targetLabel: from
- action: replace
# 使用 Pod 名称作为 Prometheus instance 标签。
sourceLabels: [pod]
targetLabel: instance
selector:
matchLabels:
# 匹配由 EMQX Operator 为名为 `emqx` 的 EMQX 资源管理的 Pod。
apps.emqx.io/instance: emqx
apps.emqx.io/managed-by: emqx-operator
namespaceSelector:
matchNames:
# 如果 EMQX 集群位于其他命名空间,请修改此值。
- defaultpath 指定指标采集 API 路径。对于 EMQX 5.0 及更高版本,请使用 /api/v5/prometheus/stats。basicAuth 部分从 Kubernetes Secret 中读取 API Key 和 Secret Key。selector 用于匹配由 Operator 为 emqx 资源管理的 Pod。同一个 Prometheus 服务器所监控的每个 EMQX 集群必须使用唯一的 cluster 目标标签。
如果明确设置 prometheus.enable_basic_auth = false 以禁用身份验证,可以从 podMetricsEndpoints 中省略 basicAuth。有关所有可用端点和身份验证选项,请参见集成 Prometheus。
将以上内容保存为 monitor.yaml,然后运行以下命令:
$ kubectl apply -f monitor.yaml在 Prometheus 中查看 EMQX 指标
打开 Prometheus 表达式浏览器并输入 emqx,即可查看 EMQX 指标,如下图所示:

打开 Status -> Targets,查看集群中所有受监控的 EMQX Pod:

导入 Grafana Dashboard
导入 EMQX Grafana Dashboard,并选择用于抓取 EMQX Pod 指标的 Prometheus 数据源。
