sigs.k8s.io/cluster-api-provider-azure@v1.14.3/hack/observability/opentelemetry/chart/templates/_config.tpl (about) 1 {{/* 2 Default memory limiter configuration for OpenTelemetry Collector based on k8s resource limits. 3 */}} 4 {{- define "opentelemetry-collector.memoryLimiter" -}} 5 # check_interval is the time between measurements of memory usage. 6 check_interval: 5s 7 8 # By default limit_mib is set to 80% of ".Values.resources.limits.memory" 9 limit_mib: {{ include "opentelemetry-collector.getMemLimitMib" .Values.resources.limits.memory }} 10 11 # By default spike_limit_mib is set to 25% of ".Values.resources.limits.memory" 12 spike_limit_mib: {{ include "opentelemetry-collector.getMemSpikeLimitMib" .Values.resources.limits.memory }} 13 {{- end }} 14 15 {{/* 16 Merge user supplied top-level (not particular to standalone or agent) config into memory limiter config. 17 */}} 18 {{- define "opentelemetry-collector.baseConfig" -}} 19 {{- $processorsConfig := get .Values.config "processors" }} 20 {{- if not $processorsConfig.memory_limiter }} 21 {{- $_ := set $processorsConfig "memory_limiter" (include "opentelemetry-collector.memoryLimiter" . | fromYaml) }} 22 {{- end }} 23 {{- .Values.config | toYaml }} 24 {{- end }} 25 26 {{/* 27 Merge user supplied top-level (not particular to standalone or agent) config into memory ballast config. 28 */}} 29 {{- define "opentelemetry-collector.ballastConfig" -}} 30 {{- $memoryBallastConfig := get .Values.config.extensions "memory_ballast" }} 31 {{- if or (not $memoryBallastConfig) (not $memoryBallastConfig.size_mib) }} 32 {{- $_ := set $memoryBallastConfig "size_mib" (include "opentelemetry-collector.getMemBallastSizeMib" .Values.resources.limits.memory) }} 33 {{- end }} 34 {{- .Values.config | toYaml }} 35 {{- end }} 36 37 38 {{/* 39 Build config file for agent OpenTelemetry Collector 40 */}} 41 {{- define "opentelemetry-collector.agentCollectorConfig" -}} 42 {{- $values := deepCopy .Values.agentCollector | mustMergeOverwrite (deepCopy .Values) }} 43 {{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} 44 {{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }} 45 {{- $config := include "opentelemetry-collector.ballastConfig" $data | fromYaml | mustMergeOverwrite $config }} 46 {{- $config := include "opentelemetry-collector.agent.containerLogsConfig" $data | fromYaml | mustMergeOverwrite $config }} 47 {{- $config := include "opentelemetry-collector.agentConfigOverride" $data | fromYaml | mustMergeOverwrite $config }} 48 {{- .Values.agentCollector.configOverride | mustMergeOverwrite $config | toYaml }} 49 {{- end }} 50 51 {{/* 52 Build config file for standalone OpenTelemetry Collector 53 */}} 54 {{- define "opentelemetry-collector.standaloneCollectorConfig" -}} 55 {{- $values := deepCopy .Values.standaloneCollector | mustMergeOverwrite (deepCopy .Values) }} 56 {{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }} 57 {{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }} 58 {{- .Values.standaloneCollector.configOverride | mustMergeOverwrite $config | toYaml }} 59 {{- end }} 60 61 {{/* 62 Convert memory value from resources.limit to numeric value in MiB to be used by otel memory_limiter processor. 63 */}} 64 {{- define "opentelemetry-collector.convertMemToMib" -}} 65 {{- $mem := lower . -}} 66 {{- if hasSuffix "e" $mem -}} 67 {{- trimSuffix "e" $mem | atoi | mul 1000 | mul 1000 | mul 1000 | mul 1000 -}} 68 {{- else if hasSuffix "ei" $mem -}} 69 {{- trimSuffix "ei" $mem | atoi | mul 1024 | mul 1024 | mul 1024 | mul 1024 -}} 70 {{- else if hasSuffix "p" $mem -}} 71 {{- trimSuffix "p" $mem | atoi | mul 1000 | mul 1000 | mul 1000 -}} 72 {{- else if hasSuffix "pi" $mem -}} 73 {{- trimSuffix "pi" $mem | atoi | mul 1024 | mul 1024 | mul 1024 -}} 74 {{- else if hasSuffix "t" $mem -}} 75 {{- trimSuffix "t" $mem | atoi | mul 1000 | mul 1000 -}} 76 {{- else if hasSuffix "ti" $mem -}} 77 {{- trimSuffix "ti" $mem | atoi | mul 1024 | mul 1024 -}} 78 {{- else if hasSuffix "g" $mem -}} 79 {{- trimSuffix "g" $mem | atoi | mul 1000 -}} 80 {{- else if hasSuffix "gi" $mem -}} 81 {{- trimSuffix "gi" $mem | atoi | mul 1024 -}} 82 {{- else if hasSuffix "m" $mem -}} 83 {{- div (trimSuffix "m" $mem | atoi | mul 1000) 1024 -}} 84 {{- else if hasSuffix "mi" $mem -}} 85 {{- trimSuffix "mi" $mem | atoi -}} 86 {{- else if hasSuffix "k" $mem -}} 87 {{- div (trimSuffix "k" $mem | atoi) 1000 -}} 88 {{- else if hasSuffix "ki" $mem -}} 89 {{- div (trimSuffix "ki" $mem | atoi) 1024 -}} 90 {{- else -}} 91 {{- div (div ($mem | atoi) 1024) 1024 -}} 92 {{- end -}} 93 {{- end -}} 94 95 {{/* 96 Get otel memory_limiter limit_mib value based on 80% of resources.memory.limit. 97 */}} 98 {{- define "opentelemetry-collector.getMemLimitMib" -}} 99 {{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 80) 100 }} 100 {{- end -}} 101 102 {{/* 103 Get otel memory_limiter spike_limit_mib value based on 25% of resources.memory.limit. 104 */}} 105 {{- define "opentelemetry-collector.getMemSpikeLimitMib" -}} 106 {{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 25) 100 }} 107 {{- end -}} 108 109 {{/* 110 Get otel memory_limiter ballast_size_mib value based on 40% of resources.memory.limit. 111 */}} 112 {{- define "opentelemetry-collector.getMemBallastSizeMib" }} 113 {{- div (mul (include "opentelemetry-collector.convertMemToMib" .) 40) 100 }} 114 {{- end -}} 115 116 {{/* 117 Default config override for agent collector deamonset 118 */}} 119 {{- define "opentelemetry-collector.agentConfigOverride" -}} 120 {{- if .Values.standaloneCollector.enabled }} 121 exporters: 122 otlp: 123 endpoint: {{ include "opentelemetry-collector.fullname" . }}:4317 124 tls: 125 insecure: true 126 {{- end }} 127 128 {{- if .Values.standaloneCollector.enabled }} 129 service: 130 pipelines: 131 logs: 132 exporters: [otlp] 133 metrics: 134 exporters: [otlp] 135 traces: 136 exporters: [otlp] 137 telemetry: 138 metrics: 139 address: 0.0.0.0:8888 140 {{- end }} 141 {{- end }} 142 143 {{- define "opentelemetry-collector.agent.containerLogsConfig" -}} 144 {{- if .Values.agentCollector.containerLogs.enabled }} 145 receivers: 146 filelog: 147 include: [ /var/log/pods/*/*/*.log ] 148 # Exclude collector container's logs. The file format is /var/log/pods/<namespace_name>_<pod_name>_<pod_uid>/<container_name>/<run_id>.log 149 exclude: [ /var/log/pods/{{ .Release.Namespace }}_{{ include "opentelemetry-collector.fullname" . }}*_*/{{ .Chart.Name }}/*.log ] 150 start_at: beginning 151 include_file_path: true 152 include_file_name: false 153 operators: 154 # Find out which format is used by kubernetes 155 - type: router 156 id: get-format 157 routes: 158 - output: parser-docker 159 expr: '$$body matches "^\\{"' 160 - output: parser-crio 161 expr: '$$body matches "^[^ Z]+ "' 162 - output: parser-containerd 163 expr: '$$body matches "^[^ Z]+Z"' 164 # Parse CRI-O format 165 - type: regex_parser 166 id: parser-crio 167 regex: '^(?P<time>[^ Z]+) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) (?P<log>.*)$' 168 output: extract_metadata_from_filepath 169 timestamp: 170 parse_from: time 171 layout_type: gotime 172 layout: '2006-01-02T15:04:05.000000000-07:00' 173 # Parse CRI-Containerd format 174 - type: regex_parser 175 id: parser-containerd 176 regex: '^(?P<time>[^ ^Z]+Z) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) (?P<log>.*)$' 177 output: extract_metadata_from_filepath 178 timestamp: 179 parse_from: time 180 layout: '%Y-%m-%dT%H:%M:%S.%LZ' 181 # Parse Docker format 182 - type: json_parser 183 id: parser-docker 184 output: extract_metadata_from_filepath 185 timestamp: 186 parse_from: time 187 layout: '%Y-%m-%dT%H:%M:%S.%LZ' 188 # Extract metadata from file path 189 - type: regex_parser 190 id: extract_metadata_from_filepath 191 regex: '^.*\/(?P<namespace>[^_]+)_(?P<pod_name>[^_]+)_(?P<uid>[a-f0-9\-]+)\/(?P<container_name>[^\._]+)\/(?P<run_id>\d+)\.log$' 192 parse_from: $$attributes["file.path"] 193 # Move out attributes to Attributes 194 - type: metadata 195 attributes: 196 stream: 'EXPR($.stream)' 197 k8s.container.name: 'EXPR($.container_name)' 198 k8s.namespace.name: 'EXPR($.namespace)' 199 k8s.pod.name: 'EXPR($.pod_name)' 200 run_id: 'EXPR($.run_id)' 201 k8s.pod.uid: 'EXPR($.uid)' 202 # Clean up log body 203 - type: restructure 204 id: clean-up-log-body 205 ops: 206 - move: 207 from: log 208 to: $ 209 service: 210 pipelines: 211 logs: 212 receivers: 213 - filelog 214 - otlp 215 {{- end }} 216 {{- end }} 217 218 {{/* Build the list of port for standalone service */}} 219 {{- define "opentelemetry-collector.standalonePortsConfig" -}} 220 {{- $ports := deepCopy .Values.ports }} 221 {{- if .Values.standaloneCollector.ports }} 222 {{- $ports = deepCopy .Values.standaloneCollector.ports | mustMergeOverwrite (deepCopy .Values.ports) }} 223 {{- end }} 224 {{- range $key, $port := $ports }} 225 {{- if $port.enabled }} 226 - name: {{ $key }} 227 port: {{ $port.servicePort }} 228 targetPort: {{ $key }} 229 protocol: {{ $port.protocol }} 230 {{- end }} 231 {{- end }} 232 {{- end }}