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