はじめに
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ですがこの値を変更することで任意の頻度でデータ更新を行うことも可能となっています。
以上、ご参考になれば幸いです。