(O+P)ut

アウトプット



(O+P)ut

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

【Prometheus/Openshift】node-exporterに対するスクレイピングの動きを確認する

スポンサーリンク

はじめに

Openshiftではopenshift-monitoringというnamespaceにデフォルトでnode-exporterが存在し

$ oc get ds -n openshift-monitoring
NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
node-exporter   3         3         3       3            3           kubernetes.io/os=linux   ...

ノードのメトリクスをPrometheusが収集しています。
本記事ではそのメトリクス収集の動きを調査した結果について記載しました。

環境情報
$ oc get clusterversion
NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.6.X    True        False         45h     Cluster version is 4.6.X

Prometheus.yamlの中身

node-exporterに対する設定は以下のようになっていて

- job_name: openshift-monitoring/node-exporter/0
...
  - role: endpoints
    namespaces:
      names:
      - openshift-monitoring
  scrape_interval: 15s
  scheme: https
  tls_config:
    insecure_skip_verify: false
    ca_file: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
    server_name: node-exporter.openshift-monitoring.svc
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

接続にルート証明書とAuthorizationのToken情報が記載されています。

よって同情報を参考にcurlで打鍵していきます。

ca_fileとtoken_fileを指定した疎通確認

/etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crtファイルの実体をopensslコマンドで確認すると

$ openssl x509 -text -noout -in service-ca.crt
Certificate: ...
        Issuer: CN = openshift-service-serving-signer@XX ...

ルート証明書になっています。

実際に同サービスにcurlコマンドを投げると確かにIssuerが一致していることが分かります。

$ curl  https://node-exporter.openshift-monitoring.svc:9100 -v
...
* Server certificate:
*       subject: CN=node-exporter.openshift-monitoring.svc
...
*       issuer: CN=openshift-service-serving-signer@XX ...

そして同ファイルを指定して接続をしかけたとしてもHTTP/1.1 401 Unauthorizedとなるので

$ curl  https://node-exporter.openshift-monitoring.svc:9100 --cacert service-ca.crt
Unauthorized

TokenをAuthorization: Bearerにて指定することで

$ curl  https://node-exporter.openshift-monitoring.svc:9100 -H "Authorization: Bearer $(cat /var/run/secrets/kuberne
tes.io/serviceaccount/token)" --cacert service-ca.crt
<html>
                        <head><title>Node Exporter</title></head>
                        <body>
                        <h1>Node Exporter</h1>
                        <p><a href="/metrics">Metrics</a></p>
                        </body>
                        </html>

確かにNodeExporterに接続ができました。

終わりに

Exporterは自作する場合はHTTPで特に認証不要で情報を取れますが

OpenshiftのようにデフォルトでTLS/Token認証が入っている場合はこのあたりの情報を入れないと401エラーで接続に失敗するので注意が必要です。

本記事がそのあたりの環境理解の一助になれば幸いです。