Collector for Kubernetes のログとイベントを収集する
Splunk Distribution of OpenTelemetry Collector for Kubernetes のログとイベントを設定します。
バージョン0.86.0以降、Splunk Distribution of Collector for KubernetesはデフォルトでネイティブのOpenTelemetryログを収集します。
以下が該当します:
-
Istio 環境でログとトレースを相関させるには、Splunk OpenTelemetry Collector のバージョン 0.80.0 (またはそれ以降) を使用します。
-
Collector を必要なバージョンにアップグレードできない場合は、Fluentd をログ収集に使用し、Helm チャートを
autodetect.istio=trueでデプロイしてください。詳しくは「Splunk OpenTelemetry collector version 0.80.0」を参照してください。
-
-
CollectorはJournaldログをネイティブで収集できません。
-
ログ収集は GKE Autopilot ではサポートされていません。
-
「other rules and limitations for metrics and dimensions」もご確認ください。たとえば、MTS ごとに最大 36 のディメンションを持つことができます。これを超えると、データポイントは破棄されます。
Kubernetesホストマシンまたはボリュームからログファイルを追加する
KubernetesホストマシンとKubernetesボリュームから取り込むログファイルを追加するには、Collector for Kubernetes のデプロイに使用するvalues.yamlファイルで agent.extraVolumes、agent.extraVolumeMounts、logsCollection.extraFileLogs を使用します。
次の例は、Kubernetesホストマシンからログを追加する方法を示しています:
logsCollection:
extraFileLogs:
filelog/audit-log:
include: [/var/log/kubernetes/apiserver/audit.log]
start_at: beginning
include_file_path: true
include_file_name: false
resource:
com.splunk.source: /var/log/kubernetes/apiserver/audit.log
host.name: 'EXPR(env("K8S_NODE_NAME"))'
com.splunk.sourcetype: kube:apiserver-audit
agent:
extraVolumeMounts:
- name: audit-log
mountPath: /var/log/kubernetes/apiserver
extraVolumes:
- name: audit-log
hostPath:
path: /var/log/kubernetes/apiserver
複数行のログを処理する
Splunk Distribution of OpenTelemetry Collector for Kubernetesは、複数行ログの解析に対応しており、複数行ログの読み取り、理解、トラブルシューティングをより良い方法で支援します。
複数行ログを処理するには、values.yaml設定に以下のセクションを追加します:
logsCollection:
containers:
multilineConfigs:
- namespaceName:
value: default
podName:
value: buttercup-app-.*
useRegexp: true
containerName:
value: server
firstEntryRegex: ^[^\s].*
regex101 を使用し、フォーマットに合う Golang 正規表現を見つけ、設定ファイルの設定オプション firstEntryRegex で指定してください。
アノテーションを使ってログの取り込みを管理する
ログを異なるインデックスに送信する
Collector for Kubernetes は、main をデフォルトの Splunk プラットフォームインデックスとして使用します。ポッドや名前空間に splunk.com/index アノテーションを使用して、ログを送信したい Splunk プラットフォームのインデックスを指定します。
例えば、kube-system 名前空間から k8s_events インデックスにログを送信するには、コマンドを使用します:
kubectl annotate namespace kube-system splunk.com/index=k8s_events
ポッドまたは名前空間アノテーションを使用してログをフィルターリングする
logsCollection.containers.useSplunkIncludeAnnotation が false(デフォルト値)の場合、ポッドまたは名前空間で splunk.com/exclude アノテーションを true に設定すると、それらのログが取り込まれなくなります。例:
# annotates a namespace
kubectl annotate namespace <my-namespace> splunk.com/exclude=true
# annotates a pod
kubectl annotate pod -n <my-namespace> <my-pod> splunk.com/exclude=true
logsCollection.containers.useSplunkIncludeAnnotation が true の場合、splunk.com/includeアノテーションをポッドまたは名前空間の true に設定すると、それらのログのみが取り込まれます。他のログはすべて無視されます。他のすべてのログは無視されます。例:
# annotates a namespace
kubectl annotate namespace <my-namespace> splunk.com/include=true
# annotates a pod
kubectl annotate pod -n <my-namespace> <my-pod> splunk.com/include=true
ソースタイプをフィルターする
sourcetype フィールドを上書きするには、ポッドで splunk.com/sourcetype アノテーションを使用します。設定されていない場合、デフォルトで kube:container:CONTAINER_NAME となります。
kubectl annotate pod -n <my-namespace> <my-pod> splunk.com/sourcetype=kube:apiserver-audit
パフォーマンス・ベンチマークを確認する
Collector for Kubernetes Helm チャートを使用して設定された構成は、ログ取り込みの全体的なパフォーマンスに影響を与える可能性があります。いずれかのパイプラインに追加するレシーバ、プロセッサ、エクスポータ、および拡張機能が多くなればなるほど、パフォーマンスへの影響も大きくなります。
Collector for Kubernetes は、HTTP Event Collector(HEC) のデフォルトスループットを超過する場合があります。容量のニーズに対処するには、Collector for Kubernetes デプロイメントで HEC のスループットとバックプレッシャーを監視し、必要に応じてノードを追加します。
以下の表は、社内で実施されたパフォーマンス・ベンチマークの概要です:
|
ログジェネレーター数 |
イベントサイズ(バイト) |
エージェントCPU使用率 |
エージェントEPS |
|---|---|---|---|
|
1 |
256 |
1.8 |
30,000 |
|
1 |
516 |
1.8 |
28,000 |
|
1 |
1024 |
1.8 |
24,000 |
|
5 |
256 |
3.2 |
54,000 |
|
7 |
256 |
3 |
52,000 |
|
10 |
256 |
3.2 |
53,000 |
これらのテスト実行のためのデータパイプラインは、コンテナログが書き込まれるときに読み込み、ファイル名を解析してメタデータを取得し、Kubernetes メタデータでリッチ化し、データ構造を再フォーマットして、ログを (圧縮せずに) Splunk HEC エンドポイントに送信します。
Fluentdを使用してKubernetesのログを収集する
また、Fluentdを使ってKubernetesのログを収集し、必要なメタデータのエンリッチメントをすべて行うCollectorに送ることもできます。
ログを収集するためにFluentdを使用する設定に次の行を追加します。
logsEngine: fluentd
イベントを収集する
Kubernetesイベントの収集
チャートの Events Feed セクションの一部として Kubernetes イベントを表示するには、splunkObservability.infrastructureMonitoringEventsEnabled を true に設定します。クラスターレシーバは kubernetes-events モニターを使用してカスタムイベントを送信する Smart Agent レシーバで設定されます。
Collector を使用してLog Observer ConnectのログとしてKubernetesイベントを収集するには、設定ファイルに clusterReceiver.k8sObjects を追加し、splunkObservabilityまたは splunkPlatform のいずれかで logsEnabled を true に設定する必要があります。イベントは logs パイプラインで処理されます。
clusterReceiver.k8sObjects には以下のフィールドがあります:
-
nameします。必須。オブジェクト名称(podsやnamespaces)。 -
modeします。このタイプのオブジェクトがどのように収集されるかをpullあるいはwatchで定義します。 デフォルトではpullです。-
pullモードでは、リストAPIを使ってこのタイプのオブジェクトをすべて一定間隔で読み込みます。 -
watchモードは、ウォッチAPIを使った長い接続をセットアップし、アップデートのみを取得します。
-
-
namespacesします。指定した場合、Collector は指定した名前空間からのみオブジェクトを収集します。デフォルトでは、すべての名前空間から、一致するオブジェクトが含まれます。 -
labelSelectorします。ラベルでオブジェクトを選択します。 -
fieldSelectorします。フィールドでオブジェクトを選択します。 -
intervalします。pullモードにのみ適用。オブジェクトが引き出される間隔です。デフォルトでは60秒です。
例:
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]
詳細については、「Kubernetes objects receiver」と、クラスターレシーバ Helm チャートのデプロイに関する GitHub ドキュメント「Kubernetes objects collection using OpenTelemetry Kubernetes Object Receiver」を参照してください。
journald イベントを収集する
Splunk Distribution of OpenTelemetry Collector for Kubernetes は、Kubernetes 環境から journald イベントを収集できます。journald イベントを処理するには、以下のセクションを values.yaml 設定に追加してください。
logsCollection:
journald:
enabled: true
directory: /run/log/journal
# List of service units to collect and configuration for each. Update the list as needed.
units:
- name: kubelet
priority: info
- name: docker
priority: info
- name: containerd
priority: info
# Optional: Route journald logs to a separate Splunk Index by specifying the index
# value. Make sure the index exists in Splunk and is configured to receive HEC
# traffic (not applicable to Splunk Observability Cloud).
index: ""