[Beta] Prometheus Remote Write

By 清水 孝郎 - JUNE 2, 2021

SHARE:

本文の内容は、docs.sysdig.com上の[Beta] Prometheus Remote Writeを元に日本語に翻訳・再構成した内容となっております。(2021年6月3日現在)

Sysdigエージェントが利用できない環境でも、Prometheusのメトリクスを収集することができます。Sysdigでは、remote_write機能が利用できます。

Sysdigの用語では、Prometheusのメトリクスを読むことができるリモートエンドポイントをPrometheus Remote Writeと呼びます。Prometheus Remote Writeは、Prometheus環境にSysdigエージェントをインストールする必要はありません。この機能により、Kubernetesや通常のLinuxカーネルだけでなく、Sysdigエージェントをインストールできない環境でも、監視機能を拡張することができます。


Prometheus Remote Writeは、以下からメトリクスを収集することができます。

  • 既存のPrometheusサーバー
  • さらなる環境として:
    • Windows
    • AWSやIBMなどのマネージドクラウド環境
    • Fargate
    • IoT
エージェントがインストールできる環境では、Sysdigエージェントを使用します。ただし、エージェントでスクレイピングできるほど長く存在しない可能性のあるエフェメラルジョブやバッチジョブからメトリクスを収集する場合は、Prometheus Remote Writeを使用します。

Prometheus Remote Writeでは、Monitor UIを使ってメトリクスをモニターするか、PromQLを使って標準的なPrometheusのクエリー言語を使ってデータを照会することができます。

Prometheus Remote Writeの有効化

お客様の環境でPrometheus Remote Writeを有効にするには、Sysdigの担当者にお問い合わせください。

エンドポイントとリージョン

Prometheus Remote Writeは、各リージョンのインジェストエンドポイント/prometheus/remote/writeがあります。各リージョンのPrometheus Remote Writeのパブリックエンドポイントは以下の通りです。

Region

Endpoints

US East

https://api.sysdigcloud.com/prometheus/remote/write

US West

https://us2.app.sysdig.com/prometheus/remote/write

European Union

https://eu1.app.sysdig.com/prometheus/remote/write


Prometheus サーバーにおけるRemote Writeの設定

Sysdig Prometheus Remote Writeにメトリクスを送信するためには、Prometheusサーバーにremote_writeを設定する必要があります。

Prometheusサーバーの設定は、インストール方法によって異なります。一般的には、prometheus.yml設定ファイル内のremote_writeセクションを設定します。

global:
  external_labels:
    [ <labelname>: <labelvalue> ... ]
remote_write:
    - url: "https://<region-url>/prometheus/remote/write"
      bearer_token: "<your API Token>"
      tls_config:
        insecure_skip_verify: true

PrometheusサーバーとPrometheus Remote Write間の通信では、Sysdig APIキー(エージェントのアクセスキーではない)をベアラートークンとしたauthorizationヘッダーを使用する必要があります。

また、APIトークンを直接含める代わりに、bearer_token_fileエントリを使用してファイルを参照することもできます。

注意点
PrometheusはUI上でbearer_tokenの値を公開しません。

メトリクスのカスタマイズ

カスタマイズを可能にするために、SysdigはPrometheus Remote Writeに送信するメトリクスをコントロールするための追加オプションを提供しています。

メトリクスの管理

Prometheus Remote Writeは、デフォルトですべてのメトリクスをSysdig Prometheus Remote Writeに送信します。これらのメトリクスには、remote_write: trueのラベルが付加されて送信されるので、簡単に識別できます。

ラベルメトリクス

カスタムのラベルと値のペアを指定して、各時系列とともにPrometheus Remote Writeに送信することができます。Prometheusの設定ファイルのglobalセクションにあるexternal_labelsブロックを使用します。これは、エージェントタグの設定と同様で、Sysdig Monitorでメトリクスをフィルタリングしたり、スコープに入れたりすることができます。

例えば、2台のPrometheusサーバーがPrometheus Remote Writeにリモートで書き込むように設定されている場合、外部ラベルを含めることで簡単に識別することができます。

Prometheus 1

global:
  external_labels:
    provider: prometheus1
remote_write:
- url: ...

Prometheus 2

global:
  external_labels:
    provider: prometheus2
remote_write:
- url: ...

メトリクスのフィルタリング

一般的な設定では、デフォルトですべてのメトリクスがPrometheus Remote Writeにリモートで書き込まれます。収集してSysdigに送信するメトリクスをコントロールすることができます。収集するシリーズやラベルを選択したり、ドロップしたり、置き換えたりして、Sysdigに送信されるアクティブなシリーズの数を減らすために、remote_writeセクション内のwrite_relabel_configsブロックを使用して、relabelの構成を設定することができます。

例えば、以下のように、myapp-nsという特定のネームスペースからメトリクスを送信することができます。

remote_write:
- url: https://<region-url>/prometheus/remote/write
  bearer_token_file: /etc/secrets/sysdig-api-token
  write_relabel_configs:
  - source_labels: [__meta_kubernetes_namespace]
    regex: ‘myapp-ns’
    action: keep


レートリミット

ユーザーごとにデフォルトの制限値が設定されており、必要に応じて上げることができます。ほとんどのユーザーにとっては、デフォルトの設定で十分であり、設定ミスを防ぐことができます。



機能 リミット
並列書込み 100 回の同時リクエスト
データが書き込まれる時間は分散しているため、これは必ずしも100台のPrometheusサーバーを意味するものではありません。
1分間のデータ数 100万
送信されるデータポイントの数は、Sysdigにメトリクスが送信される頻度に依存します。スクラップの間隔が10秒の場合、60秒の場合よりも多くのDPMが送信されます。
毎分の書き込み数 10,000


制限事項

  • Prometheus Remote Writeに送信されたメトリクスはExploreでアクセスできますが、スコープツリーとの互換性はありません。
  • Prometheus Remote Writeのメトリクスは、Team Scopeでは動作しません。
  • Label enrichmentは現時点では利用できません。ソースで収集されたラベルのみが使用できます。Sysdigでさらにスコープやピボットを行うには、ラベルを追加する必要があります。
  • 現在、Sysdigのダッシュボードは、サンプリングが異なるメトリクスの混在をサポートしていません。例えば、10秒と1分のサンプルなどです。最適なエクスペリエンスを得るためには、スクレイプの間隔を10秒に設定して、リモートライトのメトリクスとエージェントのメトリクスを組み合わせてください。
  • リモートライト機能は、メトリクスのメタデータの送信をサポートしていません。Upstream Prometheusでは最近、メタデータ(メトリクスの種類、単位、説明、情報)の伝搬のサポートが追加され、この機能はPrometheus Remote Writeの将来のアップデートでサポートされる予定です。
    • メトリクスをカウンタとして保存するには、メトリクス名の末尾に_total、_sum 、または_count を付けます。それ以外の場合は、メトリクスはゲージとして扱われます。
    • 単位はDashboardsで手動で設定できます。


リモートライトを使ってKubernetesクラスターからメトリクスを収集する

Prometheus Remote Writeを使うと、Sysdigエージェントが収集するメトリクスに加えて、KubernetesクラスターからSysdigに直接メトリクスを送信することができます。

前提条件

  • 実行中のKubernetesクラスターと、ローカル環境にインストールされたkubectl CLI
  • クラスターでPrometheusを実行していること
  • クラスターを管理するための管理者権限

Kuberntesシークレットの作成

Monitor APIトークンを格納するKubernetesシークレットを作成します。シークレットを作成することで、機密情報をPrometheus ConfigMapに直接含めることを防ぐことができます。APIトークンはRemote Writeの設定で参照されます。

$ kubectl create secret generic <SECRET_NAME> --from-literal=monitor-api-token="<MONITOR_API_TOKEN>" -n <PROMETHEUS_NAMESPACE>

以下のように置き換えます。
  • <SECRET_NAME>:シークレットの名前です。
  • <MONITOR_API_TOKEN>:あなたのAPIトークンです。
  • <PROMETHEUS_NAMESPACE>: クラスター内でPrometheusサーバーを実行しているネームスペースです。

Prometheusリモートライトの設定

Prometheus Remote Write を設定するには、以下のオプションのいずれかを使用します。

Prometheus Operatorの設定

Prometheus Operatorが管理するPrometheusサーバーに、Sysdig Prometheus Remote Writeのリモートライトを設定することができます。

すべての通信を保護するために、お客様のAPI Keyが認証ヘッダーとして使用されます。API トークンは、Monitor UI の Settings > User Profile で確認できます。

Prometheus OperatorでPrometheus Remote Writeへのリモート書き込みを設定するには、次のようにします。

1. Sysdig APIトークンを保存するKubernetes Secretを作成します。

例えば、sysdig-api-tokenです。

$ kubectl create secret generic sysdig-api-token --from-literal=sysdig-api-token="<your API Token>" -n <your prometheus namespace>

2. シークレットをマウントし、remoteWriteセクションを設定するために、Prometheusインスタンス(カスタムリソース)を変更します。

kube-prometheusのGitHubリポジトリでは、manifestsディレクトリにprometheus-prometheus.ymlが用意されています。このファイルをデプロイしたら、以下のブロックを追加します。

...
volumeMounts:
- mountPath: /etc/secrets
  name: bearer
volumes:
- name: bearer
  secret:
    secretName: sysdig-api-token
 remoteWrite:
  - url: "https://<region-url>/prometheus/remote/write"
    bearerTokenFile: /etc/secrets/sysdig-api-token

3. 変更内容をPrometheusインスタンスに適用します。

kubectl apply -f prometheus-prometheus.yaml -n <your prometheus namespace>
Prometheus Operator は、Prometheus StatefulSets を再起動します。これが完了すると、PrometheusサーバーがPrometheus Remote Writeにremote_writeするように正常に設定されたことになります。

remoteWriteセクションのwriteRelabelConfigsブロックを使用して、希望するrelabelの構成を設定することができます。このセクションでは、relabelコンフィグレーションを設定することができます。

HELMを使ったPrometheus

Prometheus Helm Chartで設定したPrometheusサーバーを、Prometheus Remote WriteでRemote Writeするように設定できます。

すべての通信を安全に行うために、あなたのAPI Keyが認証ヘッダーとして使用されます。API トークンは、Monitor UI の Settings > User Profile で確認できます。

Helm Values ファイルに機密情報が含まれないように、マウントされるシークレットを作成し、Prometheus の設定ファイルで参照します。

1. シークレットを作成します。例えば、sysdig-api-tokenです。

$ kubectl create secret generic sysdig-api-token --from-literal=sysdig-api-token="<your API Token>" -n <your prometheus namespace>

2. Helm Valuesファイルを設定します。例えば、prometheus-values.ymlです。

server セクションに remoteWrite セクションを含めます。

...
server:
  extraSecretMounts:
  - name: secret-file
    mountPath: /etc/secrets/
    secretName: sysdig-api-token
  remoteWrite:
  - url: "https://<region-url>/prometheus/remote/write"
    bearer_token_file: /tmp/bearer/sysdig-api-token
...

3. Prometheus Helm のリリースをアップグレードします。

$ helm upgrade -f prometheus-values.yml <release name> prometheus-community/prometheus -n <your namespace>
新しい設定を検出するのに2分ほどかかることがあります。

ブラウザでPrometheusサーバーにアクセスし、ステータスや設定を確認し、remote_writeブロックが含まれていることを確認することができます。

Prometheus.yml設定ファイルのremote_writeセクション内のwrite_relabel_configsブロックを使用することで、希望するrelabelの設定を行うことができます。

Prometheus ConfigMap

Kubernetes ConfigMapで管理されているPrometheusサーバーでRemote Writeを設定することができます。

すべての通信を保護するために、あなたのAPI Keyが認証ヘッダーとして使用されます。APIトークンは、Monitor UIのSettings > User Profileで確認できます。

Prometheus ConfigMapに機密情報が含まれないようにするため、マウントするシークレットを作成し、Prometheusの設定ファイルで参照します。

1. APIトークンでシークレットを作成します。例えば、sysdig-api-tokenです。

$ kubectl create secret generic sysdig-api-token --from-literal=sysdig-api-token="<your API Token>" -n <your prometheus namespace>

2. DeploymentまたはStatefulSetを設定し、新しいKubernetesのシークレットをマウントします。

apiVersion: apps/v1
kind: Deployment
...
spec:
  replicas: 1
...
  spec:
    containers:
    - name: prometheus-server
      args:
      ...
      volumeMounts:
      - name: secret-file
        mountPath: /etc/secrets
  volumes:
  - name: secret-files
    secret:
      secretName: sysdig-api-token
この操作により、サーバーが再起動され、Remote Writeとの通信時に使用するベアラートークンでシークレットがマウントされます。

3. Remote_writeブロックを含むように、Prometheusの設定でConfigMapを修正します。

prometheus.yml: |
	global:
  	  evaluation_interval: 1m
  	  scrape_interval: 1m
  	  scrape_timeout: 10s
      scrape_configs:
      - job_name: ...			# Your Scrape Configs
	remote_write:
	- url: https://<region-url>/prometheus/remote/write
        bearer_token_file: /etc/secrets/sysdig-api-token

4. 新しいリモートライトの設定を含むように ConfigMap を保存して適用します。
お使いのPrometheusサーバーにコンフィギュレーションリローダがセットアップされている場合は、数分以内に変更が適用されます。そうでない場合は、変更を有効にするためにPrometheusサーバーを再起動してください。

remote_writeセクションのwrite_relabel_configsブロックを使用して、希望するリラベル構成を設定することができます。

Dashboardを作成してメトリクスを見る

  1. Dashboardを起動します。
  2. Dashboardパネルで、PromQLタイプを選択します。
  3. Queryフィールドで、デフォルトのものを削除し、「container」などと入力します。利用可能なメトリクスのリストが表示されます。
  4. メトリクスを選択し、Run Queryをクリックします。
  5. Prometheus Remote Write を使用して収集されたメトリクスが表示されます。
  6. Saveをクリックすると、Dashboardにメトリクスをレポートするパネルが作成されます。
  7. 詳細については、PromQLを使用するを参照してください。


さらなる詳細