(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【MongoDB/Kubernetes】curlでPrometheusのメトリクスを取得する

スポンサーリンク

はじめに

Podとして展開しているMongoDBのメトリクスをエクスポーターのPodから取得する流れについて記載しました。
尚、MongoDBは既に構築済のものとし、省力化のためにHelmパッケージを利用します。

環境情報
  • Mongo v4.0
  • openshift 4.6(kubernetes 1.19)

mongodb-exporterの設定を用意

Prometheusのリポジトリを登録して

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
"prometheus-community" has been added to your repositories

以下でMongoDB用のexporterの値を確認できます。

$ helm show values prometheus-community/prometheus-mongodb-exporter

そのまま起動すると接続先のURIが空欄でエラーとなるため

$ helm install prometheus-community/prometheus-mongodb-exporter --generate-name
Error: execution error at (prometheus-mongodb-exporter/templates/secret.yaml:13:40): A MongoDB URI is required

接続先のURIをconfig.yamlに与えます。

$ helm inspect values prometheus-community/prometheus-mongodb-exporter > config_ori.yaml
$ cp config_ori.yaml config.yaml
$ vi config.yaml
$ diff config.yaml config_ori.yaml
29c29
<   uri: "mongodb://mongodb:27017/xx"
---
>   uri: ""

mongodb-exporterのデプロイ

URIを与えるとhelm installが通り

$ helm install -f config.yaml prometheus-community/prometheus-mongodb-exporter --generate-name
NAME: prometheus-mongodb-exporter-1625276591
LAST DEPLOYED: ..
NAMESPACE: test
STATUS: deployed
REVISION: 1
NOTES:
Verify the application is working by running these commands:
  kubectl port-forward service/prometheus-mongodb-exporter-1625276591 9216
  curl http://127.0.0.1:9216/metrics

mongodbのPodが動く名前空間にprometheus-mongodb-exporterというPodがデプロイされます。

$ oc get pod
NAME                                                      READY   STATUS    RESTARTS   AGE
mongodb-5bc87db5bf-h5kbz                                  1/1     Running   0          X
prometheus-mongodb-exporter-1625276591-5d9cbf88c4-8wp6w   1/1     Running   0          X

尚、セキュリティ設定にてユーザIDでブロックされる場合があるので

$ oc get event
LAST SEEN   TYPE      REASON              OBJECT                                                        MESSAGE
29s         Warning   FailedCreate        replicaset/prometheus-mongodb-exporter-1625276591-ff5fdbf94   Error creating: pods "prometheus-mongodb-exporter-1625276591-ff5fdbf94-" is forbidden: unable to validate against any security context constraint: [spec.containers[0].securityContext.runAsUser: Invalid value: 10000: must be in the ranges: [1000670000, 1000679999]]
70s         Normal    ScalingReplicaSet   deployment/prometheus-mongodb-exporter-1625276591             Scaled up replica set prometheus-mongodb-exporter-1625276591-ff5fdbf94 to 1

その場合はSCCを付与して解消します。

動作確認

以下にて該当のPodをローカルからアクセスできるようにすると

$ kubectl port-forward service/prometheus-mongodb-exporter-1625276591 9216
Forwarding from 127.0.0.1:9216 -> 9216
Forwarding from [::1]:9216 -> 9216

以下コマンドでMongoDBのメトリクスが表示されます。

$ curl http://127.0.0.1:9216/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 7.6419e-05
...
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 12
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0

終わりに

エクスポーターを同じ名前空間に展開して接続することで、既存のMongoDBに手を加えることなくメトリクスが取得できます。
また、デフォルトではポーリング間隔は30sですがこの値を変更することで任意の頻度でデータ更新を行うことも可能となっています。

以上、ご参考になれば幸いです。