使用 Prometheus+Grafana 监控 EMQX 集群
任务目标
部署 EMQX Exporter 并通过 Prometheus 和 Grafana 监控 EMQX 集群。
部署 Prometheus 和 Grafana
Prometheus 部署文档可以参考:Prometheus Grafana 部署文档可以参考:Grafana
部署 EMQX 集群
下面是 EMQX Custom Resource 的相关配置,你可以根据希望部署的 EMQX 的版本来选择对应的 APIVersion,具体的兼容性关系,请参考EMQX Operator 兼容性:
创建 API Secret
emqx-exporter 和 Prometheus 通过访问 EMQX dashboard API 拉取监控指标,因此需要提前登录 dashboard 创建 API 密钥。
注意,EMQX 5 和 EMQX 4.4 创建 API 密钥的方式有所不同。
- EMQX 5 创建一个新的 API 密钥
- EMQX 4.4 创建一个新的用户
部署 EMQX Exporter
The emqx-exporter
is designed to expose partial metrics that are not included in the EMQX Prometheus API. It is compatible with EMQX 4.4 and EMQX 5, both open-source and enterprise.
apiVersion: v1
kind: Service
metadata:
labels:
app: emqx-exporter
name: emqx-exporter-service
spec:
ports:
- name: metrics
port: 8085
targetPort: metrics
selector:
app: emqx-exporter
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: emqx-exporter
labels:
app: emqx-exporter
spec:
selector:
matchLabels:
app: emqx-exporter
replicas: 1
template:
metadata:
labels:
app: emqx-exporter
spec:
securityContext:
runAsUser: 1000
containers:
- name: exporter
image: emqx-exporter:latest
imagePullPolicy: IfNotPresent
args:
# "emqx-dashboard-service-name" is the service name that creating by operator for exposing 18083 port
- --emqx.nodes=${emqx-dashboard-service-name}:18083
- --emqx.auth-username=${paste_your_new_api_key_here}
- --emqx.auth-password=${paste_your_new_secret_here}
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
ports:
- containerPort: 8085
name: metrics
protocol: TCP
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 100m
memory: 20Mi
参数"--emqx.nodes" 为暴露18083端口的 service name。不同的 EMQX 版本的 service name 不一样,可以通过命令
kubectl get svc
查看。
将上述内容保存为emqx-exporter.yaml
,同时使用你新创建的 API 密钥(EMQX 4.4 则为用户名密码)替换其中的--emqx.auth-username
以及--emqx.auth-password
,并执行如下命令:
kubectl apply -f emqx-exporter.yaml
检查 emqx-exporter 状态,请确保 STATUS
为 Running
。
$ kubectl get po -l="app=emqx-exporter"
NAME STATUS AGE
emqx-exporter-856564c95-j4q5v Running 8m33s
配置 Prometheus Monitor
Prometheus-operator 使用 PodMonitor 和 ServiceMonitor CRD 定义如何动态的监视一组 pod 或者 service。
将上述内容保存为monitor.yaml
,并执行如下命令:
kubectl apply -f monitor.yaml
访问 Prometheus 查看 EMQX 集群的指标
打开 Prometheus 的界面,切换到 Graph 页面,输入 emqx 显示如下图所示:
切换到 Status → Targets 页面,显示如下图,可以看到集群中所有被监控的 EMQX Pod 信息:
导入 Grafana 模板
导入所有 dashboard 模板。
集群的整体监控状态位于 EMQX 看板中。