Splunk OpenTelemetry Collector for Kubernetesのカスタム設定
はじめに
Splunk Observability Cloud(以下、Splunk o11y)では、Kubernetes用のOpenTelemetry CollectorとしてSplunk OpenTelemetry Collector for Kubernetesが提供されています。
※もちろん中身はOtelなので、Splunk o11yへのテレメトリーデータ送信に限ったものはありません。
標準デプロイ方法
最低限、これを打てば完了でメトリクスとトレースが送られます(ログについては後述)。
helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart
helm install <リリース名:my-test など> --set="splunkObservability.realm=<REALM名>,splunkObservability.accessToken=<アクセストークン>,clusterName=<クラスター名>" splunk-otel-collector-chart/splunk-otel-collector
詳細はこちら。
カスタマイズ方法
Otel Collectorのコンフィグについてはvalues.yamlで諸々変更できます。どのような設定が可能かはこちらにまとまっています。
特に、ログの送信についてはこちらです。
Splunk o11yでは、ログはSplunk Platform(Cloud / Enterprise)へHECで送信します。
参考
splunkPlatform:
endpoint: 'https://<ホスト名>:<ポート番号>/services/collector'
token: '<HECトークン>'
#任意のIndexに送信したい場合。デフォルトはmain。
index: '<任意のindex>'
#HEC側でIndexを設定している場合
index: null
#デフォルトのfluentdではなくOtel Filelog Receiverを使う場合
logsEngine: otel
また、既存のコンフィグに追加、上書きしたい場合はこちらの通り、agent.config
配下に書いてあげればOKです。
agent:
config:
exporters: (とか)
そもそもデフォルトのコンフィグはどうなっているでしょうか?
とりあえず標準デプロイした内容をConfigMapから見てみます。
kubectl get configmap
Otel関係のものが2つ出てくると思います。
<リリース名>-splunk-otel-collector-otel-agent
<リリース名>-splunk-otel-collector-otel-k8s-cluster-receiver
確認するのは<リリース名>-splunk-otel-collector-otel-agent
の方です。
※k8s-cluster-receiverはその名の通り、クラスターのメトリクスを取得する設定です。
kubectl get configmap <リリース名>-splunk-otel-collector-otel-agent -o yaml
このようにreceiver、processorに色々と設定してくれていて、exporterでSplunk o11yに送る設定になっています。
data:
relay: |
・・・中略・・・
pipelines:
・・・中略・・・
traces:
exporters:
- sapm
- signalfx
processors:
- memory_limiter
- k8sattributes
- batch
- resourcedetection
- resource
receivers:
- otlp
- jaeger
- smartagent/signalfx-forwarder
- zipkin
・・・略・・・
設定例で上がっている、K8sのAPIサーバーへの通信をデフォルトの443から3443に変えたい場合をそのままやってみます。
デフォルト設定はこうです。
receivers:
receiver_creator:
receivers:
smartagent/kubernetes-apiserver:
config:
extraDimensions:
metric_source: kubernetes-apiserver
skipVerify: true
type: kubernetes-apiserver
useHTTPS: true
useServiceAccount: true
rule: type == "port" && port == 443 && pod.labels["k8s-app"] == "kube-apiserver"
変更を加えてupgradeしてみます。ruleのportを3443にし、configにclientCertPath、clientKeyPathを追加、useServiceAccountをfalseにしています。
cat > my_values.yaml <<EOF
agent:
config:
receivers:
receiver_creator:
receivers:
smartagent/kubernetes-apiserver:
rule: type == "port" && port == 3443 && pod.labels["k8s-app"] == "kube-apiserver"
config:
clientCertPath: /etc/myapiserver/clients-ca.crt
clientKeyPath: /etc/myapiserver/clients-ca.key
skipVerify: true
useHTTPS: true
useServiceAccount: false
EOF
helm upgrade <リリース名> splunk-otel-collector-chart/splunk-otel-collector --set="splunkObservability.realm=<REALM>,splunkObservability.accessToken=<アクセストークン>,clusterName=<クラスター名>" -f ./my_values.yaml
もう一度ConfigMapの該当箇所を見ると行の追加または変更が行われました(#は私の方で入れています)。
agent:
config:
receivers:
receiver_creator:
receivers:
smartagent/kubernetes-apiserver:
config:
clientCertPath: /etc/myapiserver/clients-ca.crt #追加
clientKeyPath: /etc/myapiserver/clients-ca.key #追加
extraDimensions:
metric_source: kubernetes-apiserver
skipVerify: true
type: kubernetes-apiserver
useHTTPS: true
useServiceAccount: false #true⇒falseに変更
rule: type == "port" && port == 3443 && pod.labels["k8s-app"] == "kube-apiserver" #443⇒3443に変更
このように、Receiver、Processor、Exporterについて任意の変更が可能そうです。
まとめ
Splunk OpenTelemetry Collector for Kubernetesについて簡単にカスタマイズ方法を見ました。
デプロイがhelmでお手軽にできるのとカスタマイズ方法が用意されているので、なかなか使いやすいのではないかと思います。
Discussion