Telegraf によって収集された スーパーバイザー メトリックをカスタム可観測プラットフォームにストリーミングする方法について説明します。スーパーバイザー では Telegraf がデフォルトで有効になっており、Kubernetes API サーバ、仮想マシン サービス、Tanzu Kubernetes Grid などの スーパーバイザー コンポーネントから Prometheus 形式でメトリックが収集されます。vSphere 管理者は、VMware Aria Operations for Applications や Grafana などの可観測プラットフォームを構成して、収集された スーパーバイザー メトリックを表示したり分析したりすることができます。

Telegraf は、さまざまなシステム、データ ベース、IoT からメトリックを収集して送信することを目的としたサーバベースのエージェントです。Telegraf の接続先となるエンドポイントは、各 スーパーバイザー コンポーネントで公開されます。次に、Telegraf は収集されたメトリックを任意の可観測プラットフォームに送信します。スーパーバイザー メトリックは、可観測プラットフォームとして Telegraf がサポートする出力プラグインを構成することで集計、分析できます。サポートされている出力プラグインについては、Telegraf のドキュメントを参照してください。

Telegraf が接続してメトリックを収集するエンドポイントは、各種のコンポーネント、たとえば、Kubernetes API サーバ、etcd、kubelet、Kubernetes コントローラ マネージャ、Kubernetes スケジューラ、Tanzu Kubernetes Grid、仮想マシン サービス、仮想マシン イメージ サービス、NSX Container Plug-in (NCP)、コンテナ ストレージ インターフェイス (CSI)、証明書マネージャ、NSX、各種ホスト メトリック(CPU、メモリ、ストレージなど)によって公開されます。

Telegraf ポッドと構成の表示

Telegraf は、スーパーバイザーvmware-system-monitoring システム名前空間で実行されます。Telegraf ポッドと ConfigMap を表示するには、次の手順を実行します。

  1. vCenter Single Sign-On 管理者アカウントで スーパーバイザー 制御プレーンにログインします。
    kubectl vsphere login --server <control planе IP> --vsphere-username [email protected]
  2. 次のコマンドを使用して、Telegraf ポッドを表示します。
    kubectl -n vmware-system-monitoring get pods
    結果のポッドは次のとおりです。
    telegraf-csqsl   
    telegraf-dkwtk  
    telegraf-l4nxk  
  3. 次のコマンドを使用して、Telegraf ConfigMaps を表示します。
    kubectl -n vmware-system-monitoring get cm
    結果の ConfigMap は次のとおりです。
    default-telegraf-config
    kube-rbac-proxy-config
    kube-root-ca.crt
    telegraf-config

    default-telegraf-config ConfigMap はデフォルトの Telegraf 構成を保持しており、読み取り専用です。ファイルが破損した場合、またはデフォルトにリストアする場合に備えて、telegraf-config で構成をリストアするためのフォールバック オプションとして使用できます。編集できる ConfigMap は telegraf-config のみで、Telegraf エージェントに対して、どのコンポーネントから、どのプラットフォームにメトリックを送信するかを定義します。

  4. telegraf-config ConfigMap を表示します。
     kubectl -n vmware-system-monitoring get cm telegraf-config -o yaml
    
Telegraf がメトリックを収集する スーパーバイザー コンポーネントのすべてのエンドポイントと、メトリック自体のタイプは、 telegraf-config ConfigMap の inputs セクションで定義します。たとえば、次の入力では、Kubernetes API サーバをエンドポイントとして定義します。
 [[inputs.prometheus]]
      # APIserver
      ## An array of urls to scrape metrics from.
      alias = "kube_apiserver_metrics"
      urls = ["https://127.0.0.1:6443/metrics"]
      bearer_token = "/run/secrets/kubernetes.io/serviceaccount/token"
      # Dropping metrics as a part of short term solution to vStats integration 1MB metrics payload limit
      # Dropped Metrics:
      # apiserver_request_duration_seconds
      namepass = ["apiserver_request_total", "apiserver_current_inflight_requests", "apiserver_current_inqueue_requests", "etcd_object_counts", "apiserver_admission_webhook_admission_duration_seconds", "etcd_request_duration_seconds"]
      # "apiserver_request_duration_seconds" has _massive_ cardinality, temporarily turned off. If histogram, maybe filter the highest ones?
      # Similarly, maybe filters to _only_ allow error code related metrics through?
      ## Optional TLS Config
      tls_ca = "/run/secrets/kubernetes.io/serviceaccount/ca.crt"

alias プロパティは、収集されるメトリックの送信元コンポーネントを示します。namepass プロパティは、どのコンポーネント メトリックが公開され、それぞれ Telegraf エージェントによって収集されるかを指定します。

telegraf-config ConfigMap にはさまざまなメトリックが最初から含まれていますが、別途メトリックを定義することもできます。「Metrics For Kubernetes System Components」および「Kubernetes Metrics Reference」を参照してください。

Telegraf への Observability プラットフォームの構成

telegraf-configoutps セクションで、Telegraf が収集したメトリックをストリーミングする場所を構成します。outputs.fileoutputs.wavefrontoutputs.prometheus_clientoutps-https など、いくつかのオプションがあります。outps-https セクションでは、スーパーバイザー メトリックの集約と監視に使用する可観測プラットフォームを構成できます。メトリックを複数のプラットフォームに送信するように Telegraf を構成できます。telegraf-config ConfigMap を編集し、スーパーバイザー メトリックを表示するための可観測プラットフォームを構成するには、次の手順を実行します。

  1. vCenter Single Sign-On 管理者アカウントで スーパーバイザー 制御プレーンにログインします。
    kubectl vsphere login --server <control planе IP> --vsphere-username [email protected]
  2. telegraf-config ConfigMap をローカル kubectl フォルダに保存します。
    kubectl get cm telegraf-config -n vmware-system-monitoring -o jsonpath="{.data['telegraf\.conf']}">telegraf.conf

    以前のバージョンのファイルにリストアできるよう、telegraf-config ConfigMap は変更前にバージョン管理システムに保存しておいてください。デフォルトの構成にリストアする場合は、default-telegraf-config ConfigMap の値を使用できます。

  3. VIM などのテキスト エディタを使用して、選択した可観測プラットフォームの接続設定を含む outputs.http セクションを追加します。
    vim telegraf.config
    次のセクションのコメントを直接解除して適宜、値を編集するか、または必要に応じて新しい outputs.http セクションを追加できます。
        #[[outputs.http]]
        #   alias = "prometheus_http_output"
        #   url = "<PROMETHEUS_ENDPOINT>"
        #   insecure_skip_verify = <PROMETHEUS_SKIP_INSECURE_VERIFY>
        #   data_format = "prometheusremotewrite"
        #   username = "<PROMETHEUS_USERNAME>"
        #   password = "<PROMETHEUS_PASSWORD>"
        #   <DEFAULT_HEADERS>
    
    たとえば、Grafana の outputs.http 構成は次のようになります。
        [[outputs.http]]
     url = "http://<grafana-host>:<grafana-metrics-port>/<prom-metrics-push-path>"
     data_format = "influx"
     [outputs.http.headers]
       Authorization = "Bearer <grafana-bearer-token>"

    ダッシュボードの構成と Telegraf からのメトリックの取り込みについて詳しくは、「Stream metrics from Telegraf to Grafana」を参照してください。

    次に、VMware Aria Operations for Applications(旧 Wavefront)の例を示します。
        [[outputs.wavefront]]
          url = "http://<wavefront-proxy-host>:<wavefront-proxy-port>"

    Aria Operations for Applications にメトリックを取り込む方法として推奨される方法は、プロキシを介して行う方法です。詳細については、「Wavefront Proxies」を参照してください。

  4. スーパーバイザー 上の既存の telegraf-config ファイルを、ローカル フォルダで編集したファイルに置き換えます。
    kubectl create cm --from-file telegraf.conf -n vmware-system-monitoring telegraf-config --dry-run=client -o yaml | kubectl replace -f -
  5. 新しい構成が正常に保存されているかどうかを確認します。
    • 新しい telegraf-config ConfigMap を表示します。
       kubectl -n vmware-system-monitoring get cm telegraf-config -o yaml
      
    • すべての Telegraf ポッドが実行中であるかどうかを確認します。
      kubectl -n vmware-system-monitoring get pods
    • 実行されていない Telegraf ポッドがある場合は、そのポッドの Telegraf ログを確認してトラブルシューティングを行います。
      kubectl -n vmware-system-monitoring logs <telegraf-pod>

Operations for Applications ダッシュボードの例

以下のダッシュボードには、Telegraf を介して API サーバおよび etcd から受信した スーパーバイザー メトリックのサマリが表示されています。


API サーバと etcd のサマリ (Wavefront)

緑色で示されているように、API サーバ書き込み要求時間のメトリックは、telegraf-config ConfigMap に指定されたメトリックに基づきます。


API サーバ書き込み要求時間のサマリ (Wavefront)