Kubernetes オブジェクトレシーバー

Kubernetes API サーバーからオブジェクトを収集します。このレシーバーは、サービスアカウントによる認証にのみ対応しています。

Kubernetes Objects レシーバーは、Kubernetes API サーバーからオブジェクトを収集します。サポートされるパイプラインは logs です。詳細については 、「パイプラインでデータを処理する」および「Collector for Kubernetes のログとイベントを収集する」を参照してください。

注: このレシーバーは、現時点ではサービスアカウントによる認証にのみ対応しています。

はじめに

注意: このレシーバーを使用するには、splunkObservability.logsEnabled または splunkPlatform.logsEnabledtrue に設定してログ収集を有効にする必要があります。

Kubernetes Objectsレシーバーを有効にするには、以下のHelm設定を使用します:

clusterReceiver:
    k8sobjects:
        auth_type: serviceAccount
        k8s_leader_elector: k8s_leader_elector
        objects:
          - name: pods
            mode: pull
            label_selector: environment in (production),tier in (frontend)
            field_selector: status.phase=Running
            interval: 15m
          - name: events
            mode: watch
            group: events.k8s.io
            namespaces: [default]

logs パイプラインを設定する必要はありません。

主な設定

以上がメイン設定プロパティです:

  • auth_type。デフォルトでは serviceAccount です。Kubernetes API サーバーへの認証方法を決定します。値には、none(認証なし)、serviceAccount(エージェント Pod に提供される標準サービスアカウントトークンを使用)、または kubeConfig~/.kube/config からのログイン情報を使用)があります。

  • nameします。収集するリソースオブジェクトの名前です。

  • modeします。オブジェクトの収集方法を定義します。

    • pull モードは、リストAPIを使用するこのタイプのオブジェクトを、ある間隔ですべて読み込みます。

    • watch モードでは、ウォッチAPIを使って長い接続を設定し、アップデートのみを取得します。

  • label_selectorします。ラベルでオブジェクトを選択します。

  • field_selectorします。フィールドでオブジェクトを選択します。

  • intervalします。デフォルトでは、60m(分)です。pull モードでは、オブジェクトがプルされる間隔です。

  • exclude_watch_typeします。watch モードでは、特定のウォッチタイプを除外できます。有効な値は、ADDEDMODIFIEDDELETEDBOOKMARKERROR です。

  • resource_version。デフォルトでは 1 です。watch モードでは、特定のバージョンから始まるウォッチリソースが許可されます。指定しなかった場合、レシーバーはウォッチを開始する前に初期リストを作成して resourceVersion を取得します。これが必要な理由の詳細については、Kubernetes ドキュメントの「Efficient detection of changes」を参照してください。

  • namespaces。デフォルトでは all です。イベントを収集する名前空間の配列です。

  • groupします。オプション。API グループ名。指定したリソースオブジェクトが複数のグループに存在する場合、このフィールドを使用して選択するグループを指定します。デフォルトでは、最初のグループが選択されます。

    • たとえば、events リソースが v1events.k8s.io/v1 APIGroup の両方で利用可能な場合、デフォルトで v1 を選択します。

詳しくは、「設定」を参照してください。

サポートされる Kubernetes オブジェクト

k8sobjectsreceiver は、 API サーバーから幅広い標準規格 Kubernetes オブジェクトを収集します。特に、レシーバーは次のオブジェクトを収集します。

  • pods
  • events
  • nodes
  • jobs
  • cronjobs
  • deployments
  • services
  • configmaps
  • secrets
  • statefulsets
  • replicasets
  • daemonsets
  • namespaces

このレシーバーは、pull モードと watch モードの両方をサポートし、これらのオブジェクトの柔軟でリアルタイムな監視を可能にします。カスタムリソースは、その CRD がクラスターで使用可能な場合にのみサポートされることに注意してください。

Kubernetesデプロイのリソースを設定する

以下のセクションに従って、Collector をレシーバーでデプロイするために必要なさまざまなKubernetesリソースを設定します。

ConfigMap の設定

OTLP_ENDPOINTを有効な値に置き換えて、otelcontribcol の設定でConfigMapを作成します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: otelcontribcol
  labels:
    app: otelcontribcol
data:
  config.yaml: |
    receivers:
      k8sobjects:
        objects:
          - name: pods
            mode: pull
          - name: events
            mode: watch
    exporters:
      otlp:
        endpoint: <OTLP_ENDPOINT>
        tls:
          insecure: true

    service:
      pipelines:
        logs:
          receivers: [k8sobjects]
          exporters: [otlp]

サービスアカウント

Collector が使用するサービスアカウントを作成します。

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: otelcontribcol
  name: otelcontribcol

ロールベースのアクセス制御(RBAC)

このセクションのコマンドを使用して、必要なアクセス許可を持つ ClusterRole と、前のセクションで作成したサービスアカウントにロールを付与する ClusterRoleBinding を作成します。

注: この例では、ポッドとイベントのみを収集します。他のオブジェクトを収集するには、適切なルールを追加します。

watch モードを使用する場合は、list 動詞も指定する必要があります。これにより、resource_version が提供されなかった場合、レシーバーは初期リストを実行するアクセス許可を得たり、410 Gone シナリオから回復するためにリストを使用したりすることができます。詳細については、Kubernetes の公式ドキュメントで「401 gone responses」を参照してください。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: otelcontribcol
  labels:
    app: otelcontribcol
rules:
- apiGroups:
  - ""
  resources:
  - events
  - pods
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - "events.k8s.io"
  resources:
  - events
  verbs:
  - watch
  - list
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: otelcontribcol
  labels:
    app: otelcontribcol
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: otelcontribcol
subjects:
- kind: ServiceAccount
  name: otelcontribcol
  namespace: default

レシーバーを 1 つのレプリカとしてデプロイする

Collector と Kubernetes オブジェクトレシーバーを 1 つのレプリカとしてデプロイします。そうでない場合、重複データを生成します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: otelcontribcol
  labels:
     app: otelcontribcol

spec:
   replicas: 1
   selector:
      matchLabels:
      app: otelcontribcol
template:
   metadata:
      labels:
         app: otelcontribcol
   spec:
      serviceAccountName: otelcontribcol
      containers:
      - name: otelcontribcol
        image: otelcontribcol:latest # specify image
        args: ["--config", "/etc/config/config.yaml"]
        volumeMounts:
        - name: config
          mountPath: /etc/config
        imagePullPolicy: IfNotPresent
      volumes:
        - name: config
          configMap:
            name: otelcontribcol

設定

次の表に、レシーバーの設定オプションを示します:

同梱

https://raw.githubusercontent.com/splunk/collector-config-tools/main/cfg-metadata/receiver/k8sobjects.yaml

トラブルシューティング

リソースを確実に割り当てる

レシーバーが以下のようなエラーを返す場合は、ClusterRoleresource が追加されていることを確認してください。

{"kind": "receiver", "name": "k8sobjects", "pipeline": "logs", "resource": "events.k8s.io/v1, Resource=events", "error": "unknown"}

一般的なトラブルシューティング

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

_________ __ ______ _____________ _____ _________

_________ __ ___________ _________ ___ ____ _____ _____

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

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