クライアント証明書認証を使用したTimesTenエクスポータおよびPrometheusの構成

この例では、クライアント証明書認証が必要となるようにエクスポータとPrometheusの両方を構成する方法を示します。最初にttExporterユーティリティを使用して、サーバー証明書の作成とエクスポート、クライアント証明書の作成とエクスポート、およびクライアント秘密キーの作成とエクスポートを行います。次に、TimesTen ttExporterユーティリティによって作成されたサーバー証明書、クライアント証明書およびクライアント秘密キーを使用するようにPrometheusを構成します。この例では、エクスポータを起動します。Exporterの起動後、エクスポータが公開するTimesTenメトリックがPrometheusにより安全にスクレイプされていることを確認します。

  1. エクスポータが使用する証明書情報を含むOracle Walletを格納するサブディレクトリを作成します。この例では、mycertdirサブディレクトリを作成します。
    mkdir -p mycertdir
  2. ttExporterユーティリティを-create-server-certificateとともに使用して自己署名証明書を作成し、その証明書情報を含むOracle Walletを格納します。証明書情報の場所(この例ではmycertdir)を指定するには-certificate-directoryオプションを使用します。-certificate-directoryを指定しない場合、ttExporterはユーザーの$HOMEディレクトリに証明書情報を含むOracle Walletを作成して格納します。このステップを1回実行します。
    % ttExporter -create-server-certificate -certificate-directory mycertdir
    % ls -a mycertdir
    .  ..  .ttwallet.C76FCD9A-E5C8-4AC5-A73D-7DAB72203E43
    % ls -a mycertdir/.ttwallet.C76FCD9A-E5C8-4AC5-A73D-7DAB72203E43
    .  ..  cwallet.sso
  3. -export-server-certificateオプションを指定してttExporterユーティリティを使用し、サーバー証明書をPEM形式でエクスポートします。この例では、サーバー証明書をmycertdirディレクトリのserver.crtファイルにエクスポートします。サーバー証明書の作成時に指定したため、-certificate-directoryオプションを指定する必要があります。この例では、mycertdir/server.crtファイルが作成されたことも確認します。このmycertdir/server.crtファイルは後で、Prometheus構成ファイルのtls_configブロックのca_fileパラメータに指定します。
    % ttExporter -export-server-certificate mycertdir/server.crt -certificate-directory mycertdir
    % cat mycertdir/server.crt
    -----BEGIN CERTIFICATE-----
    MIIDtzCCAp+gAwIBAgIJANV4RZyydnFrMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV
    ...
    4PtJlBCXt6ogsceJI8xrCxcfUjPh9TxBWQfeW2vI+AfmUEzXTrYa+xSmkg==
    -----END CERTIFICATE-----
  4. ttExporterユーティリティを-export-client-certificateおよび-export-client-private-keyオプションを指定して使用して、クライアント証明書を作成してファイル(この例ではmycertdir/client.crt)にエクスポートし、クライアント秘密キーを2つ目のファイル(この例ではmycertdir/key.crt)にエクスポートします。サーバー証明書の作成時に指定したため、-certificate-directoryオプションも指定する必要があります。これらのオプションは一緒に指定する必要があります。このステップでは、mycertdir/client.crtおよびmycertdir/key.crtが作成されたことも確認します。後で、Prometheus構成ファイルのtls_configブロックのcert_fileパラメータにmycertdir/client.crtファイルを、key_filemycertdir/key.crtファイルを指定します。

    ノート:

    エクスポータからメトリックをスクレイプするPrometheusインスタンスごとに、クライアント証明書と秘密キーを作成します。
    % ttExporter -export-client-certificate mycertdir/client.crt 
        -export-client-private-key mycertdir/key.crt -certificate-directory mycertdir
    % cat mycertdir/client.crt
    -----BEGIN CERTIFICATE-----
    MIIDXTCCAkUCCCPYOo/eJJFMMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVT
    ...
    c18fFPkKcsJIJqYudoY8u1mIzThdjVhA8zY25vPU6exxAKw1BmJPuwqexyIpbNNH
    LA==
    -----END CERTIFICATE-----
    % cat mycertdir/key.crt
    -----BEGIN RSA PRIVATE KEY-----
    MIIEpAIBAAKCAQEA0/+ERz/MgA34Uv+UNnlRPDnssl4QKyevd05vc/1wrSDwEZJy
    ...
    l+Mi8MgmjKInXkmRotxWbJ6LSQY5wiol5HhwLTTCQgoCdVTO+usaXQ==
    -----END RSA PRIVATE KEY-----
  5. エクスポータからメトリックを安全にスクレイプするようにPrometheusを構成します。これには、スクレイプ構成(scrape_configs)ブロックのtls_configブロックでca_filecert_fileおよびkey_fileパラメータを設定してPrometheus構成ファイル(prometheus.yml)を変更することが必要となります。scrape_configsブロックで一般的なパラメータ設定も設定する必要があります。
    具体的には、scrape_configsブロックで次のパラメータを変更します。
    • job_name: メトリックをスクレイプするために割り当てられるジョブ名を指定します(この例ではtt_12345)。
    • metrics_path: デフォルトは/metricsであるため、metrics_pathを指定する必要はありません。エクスポータは、PrometheusがエクスポータからTimesTenメトリックをフェッチするHTTPSリソース・パスとして、デフォルトの/metricsを使用します。
    • scheme: エクスポータおよびPrometheusインスタンスがクライアント・サーバー認証で動作するように、httpsスキームを指定する必要があります。
    • tls_configブロック:
      • ca_file: ttExporter -export-server-certificateの実行時にエクスポートされたサーバー証明書ファイルを指定します(この例ではmycertdir/server.crt)。
      • cert_file: ttExporter -export-client-certificateの実行時に作成およびエクスポートされたクライアント証明書ファイルを指定します(この例ではmycertdir/client.crt)。
      • key_file: ttExporter - export-client-private-keyの実行時に作成およびエクスポートされたクライアント秘密キーを指定します(この例ではmycertdir/key.crt)。
    • static_configsブロック: targetsパラメータには、エクスポータが実行されるホストおよびエクスポータがリスニングするポート番号を指定します(この例ではmyhost:12345)。
    vi prometheus.yml
    ...
    scrape_configs:
      - job_name: 'tt_12345'
      # metrics_path defaults to '/metrics'
      # scheme defaults to 'http'.
      scheme: https
      tls_config:
        ca_file: mycertdir/server.crt
        cert_file: mycertdir/client.crt
        key_file: mycertdir/key.crt
      static_configs:
        - targets: ['myhost:12345']
  6. ttExporterユーティリティを使用してエクスポータを起動します。-portオプションを指定する必要があります。Prometheus構成ファイルで指定したものと同じポートを指定してください(この例では12345)。-certificate-directoryオプションはサーバー証明書の作成時に指定されていたため、やはり指定する必要があります。オプションで、-pid-fileオプションを指定して、ttExporterのプロセスIDをファイルに格納します。この例では、ファイルは/tmp/ttexporter.pidで、プロセスIDは24302です。
    % ttExporter -port 12345 -pid-file /tmp/ttexporter.pid -certificate-directory mycertdir
    % cat /tmp/ttexporter.pid
    24302
    % ps 24302
      PID TTY      STAT   TIME COMMAND
    24302 pts/0    Sl+    0:00 timesten_home/bin/_ttExporter -port 12345 -pid-file /tmp/ttexporter.pid 
    -certificate-directory mycertdir
  7. オプションおよび検証専用: 証明書ディレクトリに移動します(この例ではmycertdir)。次に、Linuxのcurlコマンドを使用して、TimesTenメトリックが公開されており、Prometheusがスクレイプできることを確認します。
    % cd mycertdir
    % curl --cacert server.crt --cert ./client.crt --key ./key.crt https://myhost:12345/metrics
    ...
    # HELP timesten_perm_in_use_bytes Bytes of permanent space used
    # TYPE timesten_perm_in_use_bytes gauge
    timesten_perm_in_use_bytes{dsn="mydsn",instancename="myinstance"} 20385792
    # HELP timesten_perm_in_use_high_water_bytes Maximum bytes of permanent space used
    # TYPE timesten_perm_in_use_high_water_bytes gauge
    timesten_perm_in_use_high_water_bytes{dsn="mydsn",instancename="myinstance"} 20385792
    ...
  8. オプション: このステップは、エクスポータを停止できることを示しています。これにより、ttExporterプロセスが終了します。Prometheusはエンドポイントをスクレイプしなくなります。エクスポータの起動時に-pid-fileオプションが指定されていたことを思い出してください。Linuxのpkill -Fコマンドを使用して、プロセスIDを終了します。この例では、/tmp/ttexporter.pidファイルにプロセスIDが格納され、プロセスIDは24302であることを思い出してください。
    % pkill -F /tmp/ttexporter.pid
    % cat /tmp/ttexporter.pid
    24302
    % ps 24302
      PID TTY      STAT   TIME COMMAND
    
クライアント証明書認証が必要となるようにエクスポータとPrometheusが正常に構成されました。また、エクスポータを起動しました。Prometheusは/metricsエンドポイントでエクスポータが公開するTimesTenメトリックを安全にスクレイピングしています。Prometheusは、エクスポータを停止するまで、TimesTenメトリックをスクレイプし続けます。