Kubernetes APIサーバー

kubernetes-apiserver モニターには、この Splunk Observability Cloud インテグレーションを使用してください。メリット、インストール、設定、メトリクスを参照してください

Splunk Distribution of OpenTelemetry Collector は、API サーバーの Prometheus メトリクスのエンドポイントからメトリクスを取得するために、Kubernetes API サーバーモニタータイプで Smart Agent レシーバを使用します。

このインテグレーションはKubernetes、Linux、Windowsで利用できます。

このインテグレーションでは、コントロールプレーンの特定のポッドにアクセスできるように、kube-apiserver ポッドにアクセスする必要があります。いくつかの Kubernetes-as-a-service ディストリビューションはエンドユーザーにコントロールプレーンのポッドを公開していないため、このようなケースではメトリクスの収集ができない可能性があります。

メリット

インテグレーションを設定すると、これらの機能にアクセスできるようになります:

インストール

このインテグレーションを導入するには、以下の手順に従ってください:

  1. Splunk Distribution of the OpenTelemetry Collector をホストまたはコンテナプラットフォームにデプロイします:

  2. [設定] セクションの説明に従ってインテグレーションを設定します。

  3. Splunk Distribution of OpenTelemetry Collector を再起動します。

設定

Smart Agent モニターとCollector のインテグレーションを使用するには、以下の手順に従います:

  1. Smart Agent レシーバーを設定ファイルに含めます。

  2. レシーバーセクションおよびパイプラインセクションの両方で、Collector 構成にモニタータイプを追加します。

このインテグレーションを有効にするには、Collector構成に以下を追加します:

receivers:
  smartagent/kubernetes-apiserver:
    type: kubernetes-apiserver
    ... # Additional config

次に、設定ファイルの service.pipelines.metrics.receivers セクションにモニターを追加します:

service:
  pipelines:
    metrics:
      receivers: [smartagent/kubernetes-apiserver]

エージェントとゲートウェイのYAMLファイルについては、GitHubのkubernetes-yamlの例を参照してください。

例Kubernetesオブザーバー

以下はYAMLコンフィギュレーションの例です:

receivers:
  smartagent/kubernetes-apiserver:
    type: kubernetes-apiserver
    host: localhost
    port: 443
    extraDimensions:
      metric_source: kubernetes-apiserver

OpenTelemetry Collector には、Kubernetes オブザーバー(k8sobserver)があり、Kubernetes ポッドなどのネットワーク化されたエンドポイントを検出するための拡張機能として実装できます。このオブザーバーを使用する場合、OpenTelemetry Collector がホストモニタリング(エージェント)モードで展開され、個々のノードまたはホストインスタンスで実行されていることを前提としています。

オブザーバーを使用するには、関連するルールを持つレシーバクリエータのインスタンスを作成します。例:

extensions:
  # Configures the Kubernetes observer to watch for pod start and stop events.
  k8s_observer:

receivers:
  receiver_creator/1:
    # Name of the extensions to watch for endpoints to start and stop.
    watch_observers: [k8s_observer]
    receivers:
      smartagent/kubernetes-apiserver:
        rule: type == "pod" && labels["k8s-app"] == "kube-apiserver"
        type: kubernetes-apiserver
        port: 443
        extraDimensions:
          metric_source: kubernetes-apiserver

processors:
  exampleprocessor:

exporters:
  exampleexporter:

service:
  pipelines:
    metrics:
      receivers: [receiver_creator/1]
      processors: [exampleprocessor]
      exporters: [exampleexporter]
  extensions: [k8s_observer]

詳しくは「Receiver creator」 を参照してください。

コンフィギュレーション設定

次の表に、このモニターの設定オプションを示します:

オプション

必須

タイプ

説明

httpTimeout

いいえ

int64

読み取りと書き込みの両方の操作に対する HTTP タイムアウト時間。これは、

https://golang.org/pkg/time/#ParseDuration」が受け付ける期間文字列である必要があります。(デフォルト:10s

username

いいえ

string

各リクエストで使用される Basic Auth ユーザー名 (ある場合)。

password

いいえ

string

各リクエストで使用するBasic Authパスワード (ある場合)。

useHTTPS

いいえ

bool

true の場合、エージェントはサーバーへの接続に

プレーン HTTP の代わりに HTTPS を使用します。(デフォルト:false

httpHeaders

いいえ

map of strings

HTTP ヘッダー名と値のマップ。 同じメッセージヘッダーの

カンマ区切りの複数の値もサポートしています。

skipVerify

いいえ

bool

useHTTPStrue で、このオプションも true の場合、

エクスポータの TLS 証明書は検証されません。(デフォルト:false

caCertPath

いいえ

string

TLS証明書に署名したCA証明書へのパス。

skipVerifyfalse に設定されている場合は不要です。

clientCertPath

いいえ

string

TLSが必要な接続に使用するクライアントTLS証明書へのパス。

clientKeyPath

いいえ

string

TLSが必要な接続に使用するクライアントTLSキーへのパス。

host

はい

string

エクスポーターのホスト。

port

はい

integer

エクスポーターのポート。

useServiceAccount

いいえ

bool

認証にポッドサービスアカウントを使用します。(デフォルト:

false

metricPath

いいえ

string

エクスポーター・サーバー上のメトリクス・エンドポイントへのパス。通常は

/metrics です(デフォルト)。(デフォルト:/metrics

sendAllMetrics

いいえ

bool

Prometheusエクスポーターから出力されるすべてのメトリクスを

フィルタリングせずに送信します。このオプションは、Prometheus エクスポータモニターを直接使用する場合には、組み込みのフィルタリングがないため効果がなく、他のモニターに埋め込む場合にのみ効果があります。(デフォルト:false

メトリクス

このインテグレーションでは、以下のメトリクスを使用できます:

https://raw.githubusercontent.com/signalfx/splunk-otel-collector/main/internal/signalfx-agent/pkg/monitors/kubernetes/apiserver/metadata.yaml

備考

  • Splunk Observability Cloud で利用可能なメトリクスタイプの詳細は、「メトリクスタイプ」を参照してください。

  • ホストベースのサブスクリプションプランでは、デフォルトのメトリクスは、ホスト、コンテナ、バンドルメトリクスなど、Splunk Observability Cloud のホストベースのサブスクリプションに含まれるメトリクスです。カスタムメトリクスはデフォルトでは提供されていないため、料金が発生する場合があります。詳細については、「メトリクスカテゴリ」を参照してください。

  • MTSベースのサブスクリプションプランでは、すべてのメトリクスがカスタムです。

  • メトリクスを追加するには、「その他のメトリクスの追加」で extraMetrics の設定方法を参照してください。

トラブルシューティング

「バインド:すでに使用されているアドレス」というエラーメッセージが表示されます

「bind:すでに使用されているアドレス」のようなエラーメッセージが表示された場合は、現在の設定で必要なポートを別のリソースがすでに使用しています。このリソースは、別のアプリケーションや、Jaeger や Zipkin などのトレースツールである可能性があります。

別のポートを使用するように設定を変更できます。これらのエンドポイントやポートを変更することができます:

  • レシーバー・エンドポイント

  • 拡張機能のエンドポイント

  • メトリクスアドレス(ポート8888の場合)

Kubernetesでこのエラーメッセージが表示され、Helmチャートを使用している場合は、コンフィギュレーションと公開ポートの両方のチャート値を更新してコンフィギュレーションを修正してください。

「2021-10-19T20:18:40.556Z info builder/receivers_builder.go:112 どのパイプラインでも使用されていないため、レシーバーを無視しています {kind": "receiver", "name": "error message"」というメッセージが表示されます

このエラーは、コンポーネント(レシーバー、プロセッサ、またはエクスポータ)が構成されているが、レシーバーパイプラインで使用されていない場合に発生します。たとえば、次のエラーメッセージは、smartagent/http レシーバーが設定されているが、どのパイプラインでも使用されていないことを示しています。

"2021-10-19T20:18:40.556Z info builder/receivers_builder.go:112 Ignoring receiver as it is not used by any pipeline {"kind": "receiver", "name": "smartagent/http"

構成が完了したら、サービスセクションのパイプラインを使用してすべてのコンポーネントをオンにする必要があります。サービスセクションは、構成ファイルのコンポーネントセクションで見つかった構成に基づいてアクティブ化されるコンポーネントを構成するために使用されます。コンポーネントが構成されていてもサービスセクション内で定義されていない場合、そのコンポーネントはアクティブになりません。

以下に設定例を示します:

service:
  pipelines:
  # Pipelines can contain multiple subsections, one per pipeline.
    traces:
    # Traces is the pipeline type.
      receivers: [otlp, jaeger, zipkin]
      processors: [memory_limiter, batch]
      exporters: [otlp, jaeger, zipkin]

詳細については「パイプラインでデータを処理する」を参照してください。

Splunk Distribution of OpenTelemetry Collector がメモリ不足です

メモリ使用量が多い、またはメモリ不足の警告が表示される場合は、サポート・ケースを開く前に次のことを行ってください:

  1. 最新バージョンの OpenTelemetry Collector for Kubernetes の Splunk ディストリビューションがインストールされていることを確認します。

  2. 構成ファイルで memory_limiter プロセッサを追加または変更します。例:

    processors:
      memory_limiter:
         ballast_size_mib: 2000
         check_interval: 5s
            # Check_interval is the time between measurements of memory usage for the  purposes of avoiding goingover the limits.
            # The default is 0. Values below 1s are not recommended, as this can result in unnecessary CPU consumption.
         limit_mib: 4000
            # ​​Maximum amount of memory, in MiB, targeted to be allocated by the process heap.
            # The total memory usage of the process is typically about 50 MiB higher than this value.
         spike_limit_mib: 500
            # The maximum, in MiB, spike expected between the measurements of memory usage.
         ballast_size_mib: 2000
            # BallastSizeMiB is the size, in MiB, of the ballast size being used by the process.
            # This must match the value of the mem-ballast-size-mib command line option (if used).
            # Otherwise, the memory limiter does not work correctly.
  3. エラーを再現し、メモリキルが発生したポイントの近くでヒープダンプを収集してみます:

    1. 失敗しているコンポーネントの構成に pprof 拡張機能を追加します。サービスセクションのパイプラインでこの拡張機能をオンにしたことを確認してください。

    2. 問題のあるポッドに対する以下のコマンドの出力をキャプチャします:

      curl http://127.0.0.1:1777/debug/pprof/goroutine?debug=2 (http://127.0.0.1:1777/debug/pprof/goroutine?debug=2)
      curl http://127.0.0.1:1777/debug/pprof/heap > heap.out

例えば、ポッドが強制終了されるまで5分間経過していることがわかったとします:

  1. ポッドをバウンスさせ、始動後の最初のデータセットを収集します。

  2. 3 分間待ってから、別のデータセットを収集します。データには適切なラベルを付けてください。

  3. 可能であれば、クラッシュ前に別のデータを収集します。

メモリ制限のためにポッドが強制終了されるまで、どれくらいの時間がかかりますか?問題が発生した時点のログをチェックして、明らかな繰り返しエラーがないかどうかを確認してください。

エンドツーエンドのアーキテクチャ情報など、追加で裏付けとなる情報を収集します。「サポートリクエストを開くために情報を収集する」を参照してください

__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____

_________ __ ______ _____________ _____ _________

_________ __ ___________ _________ ___ ____ _____ _____

  • ___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________

  • ____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______