Kubernetes オブジェクトレシーバー
Kubernetes API サーバーからオブジェクトを収集します。このレシーバーは、サービスアカウントによる認証にのみ対応しています。
Kubernetes Objects レシーバーは、Kubernetes API サーバーからオブジェクトを収集します。サポートされるパイプラインは logs です。詳細については 、「パイプラインでデータを処理する」および「Collector for Kubernetes のログとイベントを収集する」を参照してください。
はじめに
splunkObservability.logsEnabled または splunkPlatform.logsEnabled を true に設定してログ収集を有効にする必要があります。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モードでは、特定のウォッチタイプを除外できます。有効な値は、ADDED、MODIFIED、DELETED、BOOKMARK、ERRORです。 -
resource_version。デフォルトでは1です。watchモードでは、特定のバージョンから始まるウォッチリソースが許可されます。指定しなかった場合、レシーバーはウォッチを開始する前に初期リストを作成してresourceVersionを取得します。これが必要な理由の詳細については、Kubernetes ドキュメントの「Efficient detection of changes」を参照してください。 -
namespaces。デフォルトではallです。イベントを収集する名前空間の配列です。 -
groupします。オプション。API グループ名。指定したリソースオブジェクトが複数のグループに存在する場合、このフィールドを使用して選択するグループを指定します。デフォルトでは、最初のグループが選択されます。-
たとえば、
eventsリソースがv1とevents.k8s.io/v1APIGroup の両方で利用可能な場合、デフォルトでv1を選択します。
-
詳しくは、「設定」を参照してください。
サポートされる Kubernetes オブジェクト
k8sobjectsreceiver は、 API サーバーから幅広い標準規格 Kubernetes オブジェクトを収集します。特に、レシーバーは次のオブジェクトを収集します。
podseventsnodesjobscronjobsdeploymentsservicesconfigmapssecretsstatefulsetsreplicasetsdaemonsetsnamespaces
このレシーバーは、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
トラブルシューティング
リソースを確実に割り当てる
レシーバーが以下のようなエラーを返す場合は、ClusterRole に resource が追加されていることを確認してください。
{"kind": "receiver", "name": "k8sobjects", "pipeline": "logs", "resource": "events.k8s.io/v1, Resource=events", "error": "unknown"}
一般的なトラブルシューティング
__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____
_________ __ ______ _____________ _____ _________
-
______ _ ____ __ ___ ______ _______ _______
-
_______ ______ ________
_________ __ ___________ _________ ___ ____ _____ _____
-
___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________
-
____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______