Kubernetes オブジェクトレシーバー 🔗
Kubernetes Objectsレシーバーは、Kubernetes APIサーバーからオブジェクトを収集します。サポートされているパイプラインは logs
です。詳細は パイプラインでデータを処理する と Collector for Kubernetes のログとイベントを収集する を参照してください。
注釈
このレシーバーは、現時点ではサービスアカウントによる認証にのみ対応しています。
はじめに 🔗
Kubernetes Objectsレシーバーを有効にするには、以下のHelm設定を使用します:
k8sObjects:
- 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
セクションの service
パイプラインに、レシーバーを含めます。例:
logs/objects:
receivers:
- k8sObjects
手動でレシーバーを有効化する 🔗
Collectorの設定でKubernetes Objectsレシーバーを手動で有効にするには、次の例に示すように、設定ファイルの k8sobjects
セクションに receivers
を追加します:
k8sobjects:
auth_type: serviceAccount
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]
主な設定 🔗
以上がメイン設定プロパティです:
auth_type
。デフォルトではserviceAccount
です。Kubernetes APIサーバーへの認証方法を決定します。値には、none (認証なし)、serviceAccount
(エージェントポッドに提供される標準サービスアカウントトークンを使用)、または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 Change を参照してください。namespaces
。デフォルトではall
です。イベントを収集する名前空間の配列。group
。オプション。API グループ名。指定したリソースオブジェクトが複数のグループに存在する場合、このフィールドを使用して選択するグループを指定します。デフォルトでは、最初のグループが選択されます。例えば、
events
リソースがv1
とevents.k8s.io/v1
APIGroup の両方で利用可能な場合、デフォルトでv1
を選択します。
詳細は、設定 を参照してください。
Kubernetesデプロイのリソースを設定する 🔗
以下のセクションに従って、Collector をレシーバーでデプロイするために必要なさまざまなKubernetesリソースを設定します。
手動デプロイ 🔗
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]
チャートのデプロイ 🔗
または、手動デプロイの代わりに、次のHelmチャートデプロイを使用します:
clusterReceiver:
k8sObjects:
- 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]
サービスアカウント 🔗
Collector が使用するサービスアカウントを作成します。
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: otelcontribcol
name: otelcontribcol
ロールベースのアクセス制御(RBAC) 🔗
このセクションのコマンドを使用して、必要なアクセス許可を持つ ClusterRole
と、前のセクションで作成したサービスアカウントにロールを付与する ClusterRoleBinding
を作成します。
注釈
この例では、ポッドとイベントのみを収集します。他のオブジェクトを収集するには、適切なルールを追加します。
watch
モードを使用する場合は、list
動詞も指定する必要があります。これにより、resource_version
が提供されなかった場合、レシーバーは初期リストを実行するアクセス許可を得たり、410 Gone シナリオから回復するためにリストを使用したりすることができます。詳しくはKubernetes の公式ドキュメント 「410 Gone」 レスポンス を参照してください。
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
デプロイ 🔗
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
設定 🔗
次の表に、レシーバーの設定オプションを示します:
トラブルシューティング 🔗
リソースを確実に割り当てる 🔗
レシーバーが以下のようなエラーを返す場合は、ClusterRole
に resource
が追加されていることを確認してください。
{"kind": "receiver", "name": "k8sobjects", "pipeline": "logs", "resource": "events.k8s.io/v1, Resource=events", "error": "unknown"}
一般的なトラブルシューティング 🔗
Splunk Observability Cloudをご利用のお客様で、Splunk Observability Cloudでデータを確認できない場合は、以下の方法でサポートを受けることができます。
Splunk Observability Cloudをご利用のお客様
Splunk サポートポータル でケースを送信する
Splunkサポート に連絡する
見込み客および無料トライアルユーザー様
Splunk Answers のコミュニティサポートで質問し、回答を得る
Join the Splunk #observability user group Slack channel to communicate with customers, partners, and Splunk employees worldwide. To join, see Chat groups in the Get Started with Splunk Community manual.