diff --git a/examples/multi-metrics/README.md b/examples/multi-metrics/README.md new file mode 100644 index 000000000..1a88c012d --- /dev/null +++ b/examples/multi-metrics/README.md @@ -0,0 +1,5 @@ +# Example of chart configuration + +## Use multi-metric format when sending metrics to Splunk Platform + +The HEC multi-metric format combines multiple metrics in the same HEC metrics payload to optimize transfer. diff --git a/examples/multi-metrics/enable-multi-metrics-values.yaml b/examples/multi-metrics/enable-multi-metrics-values.yaml new file mode 100644 index 000000000..e0d4e6086 --- /dev/null +++ b/examples/multi-metrics/enable-multi-metrics-values.yaml @@ -0,0 +1,13 @@ +clusterName: CHANGEME + +splunkPlatform: + endpoint: CHANGEME + token: CHANGEME + metricsIndex: CHANGEME + metricsEnabled: true + +agent: + config: + exporters: + splunk_hec/platform_metrics: + use_multi_metric_format: true diff --git a/examples/multi-metrics/rendered_manifests/clusterRole.yaml b/examples/multi-metrics/rendered_manifests/clusterRole.yaml new file mode 100644 index 000000000..c698a1206 --- /dev/null +++ b/examples/multi-metrics/rendered_manifests/clusterRole.yaml @@ -0,0 +1,83 @@ +--- +# Source: splunk-otel-collector/templates/clusterRole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: default-splunk-otel-collector + labels: + app.kubernetes.io/name: splunk-otel-collector + helm.sh/chart: splunk-otel-collector-0.96.0 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: default + app.kubernetes.io/version: "0.96.1" + app: splunk-otel-collector + chart: splunk-otel-collector-0.96.0 + release: default + heritage: Helm +rules: +- apiGroups: + - "" + resources: + - events + - namespaces + - namespaces/status + - nodes + - nodes/spec + - nodes/stats + - nodes/proxy + - pods + - pods/status + - persistentvolumeclaims + - persistentvolumes + - replicationcontrollers + - replicationcontrollers/status + - resourcequotas + - services + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - daemonsets + - deployments + - replicasets + - statefulsets + verbs: + - get + - list + - watch +- apiGroups: + - extensions + resources: + - daemonsets + - deployments + - replicasets + verbs: + - get + - list + - watch +- apiGroups: + - batch + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch +- nonResourceURLs: + - /metrics + verbs: + - get + - list + - watch diff --git a/examples/multi-metrics/rendered_manifests/clusterRoleBinding.yaml b/examples/multi-metrics/rendered_manifests/clusterRoleBinding.yaml new file mode 100644 index 000000000..4e8aff3bb --- /dev/null +++ b/examples/multi-metrics/rendered_manifests/clusterRoleBinding.yaml @@ -0,0 +1,24 @@ +--- +# Source: splunk-otel-collector/templates/clusterRoleBinding.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: default-splunk-otel-collector + labels: + app.kubernetes.io/name: splunk-otel-collector + helm.sh/chart: splunk-otel-collector-0.96.0 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: default + app.kubernetes.io/version: "0.96.1" + app: splunk-otel-collector + chart: splunk-otel-collector-0.96.0 + release: default + heritage: Helm +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: default-splunk-otel-collector +subjects: +- kind: ServiceAccount + name: default-splunk-otel-collector + namespace: default diff --git a/examples/multi-metrics/rendered_manifests/configmap-agent.yaml b/examples/multi-metrics/rendered_manifests/configmap-agent.yaml new file mode 100644 index 000000000..f5f402d19 --- /dev/null +++ b/examples/multi-metrics/rendered_manifests/configmap-agent.yaml @@ -0,0 +1,459 @@ +--- +# Source: splunk-otel-collector/templates/configmap-agent.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: default-splunk-otel-collector-otel-agent + namespace: default + labels: + app.kubernetes.io/name: splunk-otel-collector + helm.sh/chart: splunk-otel-collector-0.96.0 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: default + app.kubernetes.io/version: "0.96.1" + app: splunk-otel-collector + chart: splunk-otel-collector-0.96.0 + release: default + heritage: Helm +data: + relay: | + exporters: + splunk_hec/platform_logs: + disable_compression: true + endpoint: CHANGEME + idle_conn_timeout: 10s + index: main + max_idle_conns: 200 + max_idle_conns_per_host: 200 + profiling_data_enabled: false + retry_on_failure: + enabled: true + initial_interval: 5s + max_elapsed_time: 300s + max_interval: 30s + sending_queue: + enabled: true + num_consumers: 10 + queue_size: 1000 + source: kubernetes + splunk_app_name: splunk-otel-collector + splunk_app_version: 0.96.0 + timeout: 10s + tls: + insecure_skip_verify: false + token: ${SPLUNK_PLATFORM_HEC_TOKEN} + splunk_hec/platform_metrics: + disable_compression: true + endpoint: CHANGEME + idle_conn_timeout: 10s + index: CHANGEME + max_idle_conns: 200 + max_idle_conns_per_host: 200 + retry_on_failure: + enabled: true + initial_interval: 5s + max_elapsed_time: 300s + max_interval: 30s + sending_queue: + enabled: true + num_consumers: 10 + queue_size: 1000 + source: kubernetes + splunk_app_name: splunk-otel-collector + splunk_app_version: 0.96.0 + timeout: 10s + tls: + insecure_skip_verify: false + token: ${SPLUNK_PLATFORM_HEC_TOKEN} + use_multi_metric_format: true + extensions: + file_storage: + directory: /var/addon/splunk/otel_pos + health_check: null + k8s_observer: + auth_type: serviceAccount + node: ${K8S_NODE_NAME} + memory_ballast: + size_mib: ${SPLUNK_BALLAST_SIZE_MIB} + zpages: null + processors: + batch: null + filter/logs: + logs: + exclude: + match_type: strict + resource_attributes: + - key: splunk.com/exclude + value: "true" + k8sattributes: + extract: + annotations: + - from: pod + key: splunk.com/sourcetype + - from: namespace + key: splunk.com/exclude + tag_name: splunk.com/exclude + - from: pod + key: splunk.com/exclude + tag_name: splunk.com/exclude + - from: namespace + key: splunk.com/index + tag_name: com.splunk.index + - from: pod + key: splunk.com/index + tag_name: com.splunk.index + labels: + - key: app + metadata: + - k8s.namespace.name + - k8s.node.name + - k8s.pod.name + - k8s.pod.uid + - container.id + - container.image.name + - container.image.tag + filter: + node_from_env_var: K8S_NODE_NAME + pod_association: + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: ip + - sources: + - from: connection + - sources: + - from: resource_attribute + name: host.name + k8sattributes/metrics: + extract: + annotations: + - from: pod + key: splunk.com/sourcetype + - from: namespace + key: splunk.com/metricsIndex + tag_name: com.splunk.index + - from: pod + key: splunk.com/metricsIndex + tag_name: com.splunk.index + metadata: [] + filter: + node_from_env_var: K8S_NODE_NAME + pod_association: + - sources: + - from: resource_attribute + name: k8s.node.name + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: ip + - sources: + - from: connection + memory_limiter: + check_interval: 2s + limit_mib: ${SPLUNK_MEMORY_LIMIT_MIB} + resource: + attributes: + - action: insert + key: k8s.node.name + value: ${K8S_NODE_NAME} + - action: upsert + key: k8s.cluster.name + value: CHANGEME + resource/add_agent_k8s: + attributes: + - action: insert + key: k8s.pod.name + value: ${K8S_POD_NAME} + - action: insert + key: k8s.pod.uid + value: ${K8S_POD_UID} + - action: insert + key: k8s.namespace.name + value: ${K8S_NAMESPACE} + resource/logs: + attributes: + - action: upsert + from_attribute: k8s.pod.annotations.splunk.com/sourcetype + key: com.splunk.sourcetype + - action: delete + key: k8s.pod.annotations.splunk.com/sourcetype + - action: delete + key: splunk.com/exclude + resourcedetection: + detectors: + - env + - system + override: true + timeout: 15s + receivers: + filelog: + encoding: utf-8 + exclude: + - /var/log/pods/default_default-splunk-otel-collector*_*/otel-collector/*.log + fingerprint_size: 1kb + force_flush_period: "0" + include: + - /var/log/pods/*/*/*.log + include_file_name: false + include_file_path: true + max_concurrent_files: 1024 + max_log_size: 1MiB + operators: + - id: get-format + routes: + - expr: body matches "^\\{" + output: parser-docker + - expr: body matches "^[^ Z]+ " + output: parser-crio + - expr: body matches "^[^ ]+ " + output: parser-containerd + type: router + - id: parser-crio + regex: ^(?P