以前、こちらでVMware GemFire for Kubernetesを構築してAria Operations for Applications(以下AOA)で可視化するところまで確認した。
AOAでの連携は非常に簡単だったが、Kubernetesの監視だとPrometheusを使うことも多いので、今回は前回の続きとしてPrometheusでメトリクスを見るところを確認する。
なお、前回の続きのため、GemFire Clusterは構築済みとして進める。
最初にPrometheusを構築するためにHelmのChartリポジトリを追加する。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
Prometheusをインストールする。外部からアクセスしたかったのでPrometheusとGrafanaそれぞれでtype: LoadBalancer
を設定した。
helm install prometheus prometheus-community/kube-prometheus-stack -n prometheus --create-namespace --set grafana.service.type=LoadBalancer --set prometheus.service.type=LoadBalancer
次にGemFireのEndpointを伝えるためにkind: ServiceMonitor
を作るが、その前にPrometheusの検出ルールを確認する。
$ kubectl get prometheus -o yaml prometheus-kube-prometheus-prometheus -n prometheus
:(省略)
serviceMonitorSelector:
matchLabels:
release: prometheus
:(省略)
Labelにrelease: prometheus
があればいいので、これを含むServiceMonitor
のManifestを作成し、applyする。
cat << EOF > ./gemfire-svcmonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: gemfire-svcmonitor
namespace: gemfire-dev
labels:
release: prometheus
spec:
endpoints:
- interval: 10s
port: locator-metrics
scheme: http
path: /
- interval: 10s
port: server-metrics
scheme: http
path: /
selector:
matchLabels:
app.kubernetes.io/name: gemfire
namespaceSelector:
matchNames:
- gemfire-dev
EOF
kubectl apply -f gemfire-svcmonitor.yaml
GemFireはメトリクスを/metics
ではなく/
で公開しているため、パスを変更している。
また、targetPort
でLocatorとServerのEndpointを纏めて指定できないか試してみたが、上手く動かなかったのでport
でport名をそれぞれ指定している。
問題なければ、Podの再起動とかはせずに少し待てばPrometheus側で以下のようにService Discoveryに表示される。
メトリクスも問題なく取れているようだ。