Prometheus と Grafana による EMQX クラスターの監視
目的
EMQX Exporter をデプロイし、Prometheus と Grafana を使って EMQX クラスターを監視します。
Prometheus と Grafana のデプロイ
- Prometheus のデプロイ方法については、Prometheus のドキュメントをご参照ください。
- Grafana のデプロイ方法については、Grafana のドキュメントをご参照ください。
EMQX クラスターのデプロイ
EMQX は Prometheus 互換の HTTP API を通じて様々なメトリクスを公開しています。
apiVersion: apps.emqx.io/v2
kind: EMQX
metadata:
name: emqx
spec:
image: emqx/emqx:6.2.0
config:
data: |
license {
key = "..."
}上記の内容を emqx.yaml として保存し、以下のコマンドを実行して EMQX クラスターをデプロイします。
$ kubectl apply -f emqx.yaml
emqx.apps.emqx.io/emqx createdEMQX クラスターの状態を確認し、STATUS が Ready になっていることを確認してください。完了までに時間がかかる場合があります。
$ kubectl get emqx emqx
NAME STATUS AGE
emqx Ready 10mAPI シークレットの作成
Prometheus は EMQX ダッシュボード API からメトリクスを取得するため、ダッシュボードにサインインして API シークレットを作成 してください。
EMQX Exporter のデプロイ
emqx-exporter は EMQX の Prometheus API で公開されていない一部のメトリクスを公開するために設計されています。
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" は operator によって作成され、18083 ポートを公開するサービス名です
- --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には operator によって作成され、18083 ポートを公開しているサービス名を設定してください。サービス名はkubectl get svcコマンドで確認できます。
上記の内容を emqx-exporter.yaml として保存し、--emqx.auth-username と --emqx.auth-password を新しい API シークレットに置き換えてください。以下のコマンドで emqx-exporter をデプロイします。
kubectl apply -f emqx-exporter.yamlemqx-exporter の Pod の状態を確認します。
$ kubectl get po -l="app=emqx-exporter"
NAME STATUS AGE
emqx-exporter-856564c95-j4q5v Running 8m33sPrometheus 監視設定
Prometheus Operator は PodMonitor と ServiceMonitor CRD を使って、Pod やサービスの監視方法を動的に定義します。
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
# emqx ダッシュボードの containerPort 名
port: dashboard
relabelings:
- action: replace
# ユーザー定義のクラスター名、一意である必要があります
replacement: emqx5
targetLabel: cluster
- action: replace
# 固定値、変更しないでください
replacement: emqx
targetLabel: from
- action: replace
# 固定値、変更しないでください
sourceLabels: ['pod']
targetLabel: "instance"
selector:
matchLabels:
# emqx Pod のラベルと同じ
apps.emqx.io/instance: emqx
apps.emqx.io/managed-by: emqx-operator
namespaceSelector:
matchNames:
# EMQX クラスターを他のネームスペースにデプロイしている場合は変更してください
#- default
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: emqx-exporter
labels:
app: emqx-exporter
spec:
selector:
matchLabels:
# emqx-exporter サービスのラベルと同じ
app: emqx-exporter
endpoints:
- port: metrics
interval: 5s
path: /metrics
relabelings:
- action: replace
# ユーザー定義のクラスター名、一意である必要があります
replacement: emqx5
targetLabel: cluster
- action: replace
# 固定値、変更しないでください
replacement: exporter
targetLabel: from
- action: replace
# 固定値、変更しないでください
sourceLabels: ['pod']
regex: '(.*)-.*-.*'
replacement: $1
targetLabel: "instance"
- action: labeldrop
# 固定値、変更しないでください
regex: 'pod'
namespaceSelector:
matchNames:
# exporter を他のネームスペースにデプロイしている場合は変更してください
#- defaultpath は指標収集インターフェースのパスを示します。EMQX 5 では /api/v5/prometheus/stats です。selector.matchLabels はマッチする Pod のラベルを示し、apps.emqx.io/instance: emqx となっています。
targetLabel の cluster の値は現在のクラスター名を表し、一意である必要があります。
上記の内容を monitor.yaml として保存し、以下のコマンドを実行してください。
$ kubectl apply -f monitor.yamlPrometheus での EMQX 指標の確認
Prometheus のインターフェースを開き、グラフページに切り替えて emqx と入力すると、以下の図のように表示されます。

Status -> Targets ページに切り替えると、以下の図のようにクラスター内のすべての監視対象 EMQX Pod 情報が確認できます。

Grafana テンプレートのインポート
すべてのダッシュボード テンプレート をインポートしてください。メインダッシュボード EMQX を開いてお楽しみください。
