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 createdEMQX クラスターのステータスを確認し、STATUS が Ready になっていることを確認してください。準備完了までに時間がかかる場合があります。
$ kubectl get emqx emqx
NAME STATUS AGE
emqx Ready 10mAPI キーの作成
ダッシュボードにサインインし、専用の API キーを作成します。Prometheus 用には、Viewer ロールかつ monitoring スコープのみの API キーを作成してください。PodMonitor はこのキーを使用して /api/v5/prometheus/stats をスクレイプします。
API キーとシークレットキーを保存してください。EMQX はシークレットキーを一度だけ表示します。
Prometheus モニターの設定
Prometheus Operator は PodMonitor CRD を使用して Pod を選択し、スクレイプエンドポイントを定義します。EMQX はダッシュボードリスナーを通じて Prometheus メトリクスを公開し、そのコンテナポートはデフォルトで dashboard と名付けられています。
以下の PodMonitor は、emqx クラスター内のすべての Pod から基本的な EMQX メトリクスエンドポイントをスクレイプします。
EMQX 6.3.0 以降、Prometheus のスクレイプ API はデフォルトで認証を必要とします。Prometheus 用に作成した API キーとシークレットキーを格納する Kubernetes Secret を PodMonitor と同じネームスペースに作成してください。
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 ダッシュボードコンテナポートの名前。
port: dashboard
relabelings:
- action: replace
# 各 EMQX クラスターで一意の値を使用してください。
replacement: emqx5
targetLabel: cluster
- action: replace
# この値は変更しないでください。
replacement: emqx
targetLabel: from
- action: replace
# Pod 名を Prometheus のインスタンスラベルとして使用します。
sourceLabels: [pod]
targetLabel: instance
selector:
matchLabels:
# `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 キーとシークレットキーを読み込みます。セレクターは emqx リソースで管理されている Pod に一致します。cluster ターゲットラベルは、同じ Prometheus サーバーで監視する各 EMQX クラスターごとに一意である必要があります。
prometheus.enable_basic_auth = false に設定して認証を明示的に無効にした場合は、podMetricsEndpoints から basicAuth を省略できます。利用可能なエンドポイントと認証オプションの詳細は、Prometheus との統合をご参照ください。
上記の内容を monitor.yaml として保存し、以下のコマンドを実行してください。
$ kubectl apply -f monitor.yamlPrometheus で EMQX メトリクスを確認する
Prometheus の式ブラウザを開き、emqx を入力すると EMQX のメトリクスを確認できます。以下の図のように表示されます。

Status -> Targets を開くと、クラスター内のすべての監視対象 EMQX Pod が表示されます。

Grafana ダッシュボードのインポート
EMQX Grafana ダッシュボード をインポートし、EMQX Pod をスクレイプする Prometheus データソースを選択してください。
