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

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

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

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

はじめに

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

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

YAML
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を作成します。

YAML
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 が使用するサービスアカウントを作成します。

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

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

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

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

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

YAML
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
YAML
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 つのレプリカとしてデプロイします。そうでない場合、重複データを生成します。

YAML
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 が追加されていることを確認してください。

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

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

If you are a Splunk Observability Cloud customer and are not able to see your data in Splunk Observability Cloud, you can get help in the following ways.

Available to Splunk Observability Cloud customers

Available to prospective customers and free trial users

  • Ask a question and get answers through community support at Splunk Answers.

  • Join the Splunk community #observability Slack channel to communicate with customers, partners, and Splunk employees worldwide.