Skip to content

使用 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.

yaml
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,并执行如下命令:

bash
kubectl apply -f emqx-exporter.yaml

检查 emqx-exporter 状态,请确保 STATUSRunning

bash
$ kubectl get po -l="app=emqx-exporter"

NAME      STATUS   AGE
emqx-exporter-856564c95-j4q5v   Running  8m33s

配置 Prometheus Monitor

Prometheus-operator 使用 PodMonitorServiceMonitor CRD 定义如何动态的监视一组 pod 或者 service。

将上述内容保存为monitor.yaml,并执行如下命令:

bash
kubectl apply -f monitor.yaml

访问 Prometheus 查看 EMQX 集群的指标

打开 Prometheus 的界面,切换到 Graph 页面,输入 emqx 显示如下图所示:

切换到 StatusTargets 页面,显示如下图,可以看到集群中所有被监控的 EMQX Pod 信息:

导入 Grafana 模板

导入所有 dashboard 模板

集群的整体监控状态位于 EMQX 看板中。