_config.tpl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  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. # By default limit_mib is set to 80% of ".Values.resources.limits.memory"
  8. limit_percentage: 80
  9. # By default spike_limit_mib is set to 25% of ".Values.resources.limits.memory"
  10. spike_limit_percentage: 25
  11. {{- end }}
  12. {{/*
  13. Merge user supplied config into memory limiter config.
  14. */}}
  15. {{- define "opentelemetry-collector.baseConfig" -}}
  16. {{- $processorsConfig := get .Values.config "processors" }}
  17. {{- if not $processorsConfig.memory_limiter }}
  18. {{- $_ := set $processorsConfig "memory_limiter" (include "opentelemetry-collector.memoryLimiter" . | fromYaml) }}
  19. {{- end }}
  20. {{- $memoryBallastConfig := get .Values.config.extensions "memory_ballast" }}
  21. {{- if or (not $memoryBallastConfig) (not $memoryBallastConfig.size_in_percentage) }}
  22. {{- $_ := set $memoryBallastConfig "size_in_percentage" 40 }}
  23. {{- end }}
  24. {{- .Values.config | toYaml }}
  25. {{- end }}
  26. {{/*
  27. Build config file for daemonset OpenTelemetry Collector
  28. */}}
  29. {{- define "opentelemetry-collector.daemonsetConfig" -}}
  30. {{- $values := deepCopy .Values }}
  31. {{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }}
  32. {{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }}
  33. {{- if eq (include "opentelemetry-collector.logsCollectionEnabled" .) "true" }}
  34. {{- $config = (include "opentelemetry-collector.applyLogsCollectionConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  35. {{- end }}
  36. {{- if .Values.presets.hostMetrics.enabled }}
  37. {{- $config = (include "opentelemetry-collector.applyHostMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  38. {{- end }}
  39. {{- if .Values.presets.kubeletMetrics.enabled }}
  40. {{- $config = (include "opentelemetry-collector.applyKubeletMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  41. {{- end }}
  42. {{- if .Values.presets.kubernetesAttributes.enabled }}
  43. {{- $config = (include "opentelemetry-collector.applyKubernetesAttributesConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  44. {{- end }}
  45. {{- if .Values.presets.clusterMetrics.enabled }}
  46. {{- $config = (include "opentelemetry-collector.applyClusterMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  47. {{- end }}
  48. {{- tpl (toYaml $config) . }}
  49. {{- end }}
  50. {{/*
  51. Build config file for deployment OpenTelemetry Collector
  52. */}}
  53. {{- define "opentelemetry-collector.deploymentConfig" -}}
  54. {{- $values := deepCopy .Values }}
  55. {{- $data := dict "Values" $values | mustMergeOverwrite (deepCopy .) }}
  56. {{- $config := include "opentelemetry-collector.baseConfig" $data | fromYaml }}
  57. {{- if eq (include "opentelemetry-collector.logsCollectionEnabled" .) "true" }}
  58. {{- $config = (include "opentelemetry-collector.applyLogsCollectionConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  59. {{- end }}
  60. {{- if .Values.presets.hostMetrics.enabled }}
  61. {{- $config = (include "opentelemetry-collector.applyHostMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  62. {{- end }}
  63. {{- if .Values.presets.kubeletMetrics.enabled }}
  64. {{- $config = (include "opentelemetry-collector.applyKubeletMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  65. {{- end }}
  66. {{- if .Values.presets.kubernetesAttributes.enabled }}
  67. {{- $config = (include "opentelemetry-collector.applyKubernetesAttributesConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  68. {{- end }}
  69. {{- if .Values.presets.clusterMetrics.enabled }}
  70. {{- $config = (include "opentelemetry-collector.applyClusterMetricsConfig" (dict "Values" $data "config" $config) | fromYaml) }}
  71. {{- end }}
  72. {{- tpl (toYaml $config) . }}
  73. {{- end }}
  74. {{- define "opentelemetry-collector.applyHostMetricsConfig" -}}
  75. {{- $config := mustMergeOverwrite (include "opentelemetry-collector.hostMetricsConfig" .Values | fromYaml) .config }}
  76. {{- $_ := set $config.service.pipelines.metrics "receivers" (append $config.service.pipelines.metrics.receivers "hostmetrics" | uniq) }}
  77. {{- $config | toYaml }}
  78. {{- end }}
  79. {{- define "opentelemetry-collector.hostMetricsConfig" -}}
  80. receivers:
  81. hostmetrics:
  82. root_path: /hostfs
  83. collection_interval: 10s
  84. scrapers:
  85. cpu:
  86. load:
  87. memory:
  88. disk:
  89. filesystem:
  90. exclude_mount_points:
  91. mount_points:
  92. - /dev/*
  93. - /proc/*
  94. - /sys/*
  95. - /run/k3s/containerd/*
  96. - /var/lib/docker/*
  97. - /var/lib/kubelet/*
  98. - /snap/*
  99. match_type: regexp
  100. exclude_fs_types:
  101. fs_types:
  102. - autofs
  103. - binfmt_misc
  104. - bpf
  105. - cgroup2
  106. - configfs
  107. - debugfs
  108. - devpts
  109. - devtmpfs
  110. - fusectl
  111. - hugetlbfs
  112. - iso9660
  113. - mqueue
  114. - nsfs
  115. - overlay
  116. - proc
  117. - procfs
  118. - pstore
  119. - rpc_pipefs
  120. - securityfs
  121. - selinuxfs
  122. - squashfs
  123. - sysfs
  124. - tracefs
  125. match_type: strict
  126. network:
  127. {{- end }}
  128. {{- define "opentelemetry-collector.applyClusterMetricsConfig" -}}
  129. {{- $config := mustMergeOverwrite (include "opentelemetry-collector.clusterMetricsConfig" .Values | fromYaml) .config }}
  130. {{- $_ := set $config.service.pipelines.metrics "receivers" (append $config.service.pipelines.metrics.receivers "k8s_cluster" | uniq) }}
  131. {{- $config | toYaml }}
  132. {{- end }}
  133. {{- define "opentelemetry-collector.clusterMetricsConfig" -}}
  134. receivers:
  135. k8s_cluster:
  136. collection_interval: 10s
  137. {{- end }}
  138. {{- define "opentelemetry-collector.applyKubeletMetricsConfig" -}}
  139. {{- $config := mustMergeOverwrite (include "opentelemetry-collector.kubeletMetricsConfig" .Values | fromYaml) .config }}
  140. {{- $_ := set $config.service.pipelines.metrics "receivers" (append $config.service.pipelines.metrics.receivers "kubeletstats" | uniq) }}
  141. {{- $config | toYaml }}
  142. {{- end }}
  143. {{- define "opentelemetry-collector.kubeletMetricsConfig" -}}
  144. receivers:
  145. kubeletstats:
  146. collection_interval: 20s
  147. auth_type: "serviceAccount"
  148. endpoint: "${K8S_NODE_NAME}:10250"
  149. {{- end }}
  150. {{- define "opentelemetry-collector.applyLogsCollectionConfig" -}}
  151. {{- $config := mustMergeOverwrite (include "opentelemetry-collector.logsCollectionConfig" .Values | fromYaml) .config }}
  152. {{- $_ := set $config.service.pipelines.logs "receivers" (append $config.service.pipelines.logs.receivers "filelog" | uniq) }}
  153. {{- if .Values.Values.presets.logsCollection.storeCheckpoints}}
  154. {{- $_ := set $config.service "extensions" (append $config.service.extensions "file_storage" | uniq) }}
  155. {{- end }}
  156. {{- $config | toYaml }}
  157. {{- end }}
  158. {{- define "opentelemetry-collector.logsCollectionConfig" -}}
  159. {{- if .Values.presets.logsCollection.storeCheckpoints }}
  160. extensions:
  161. file_storage:
  162. directory: /var/lib/otelcol
  163. {{- end }}
  164. receivers:
  165. filelog:
  166. include: [ /var/log/pods/*/*/*.log ]
  167. {{- if .Values.presets.logsCollection.includeCollectorLogs }}
  168. exclude: []
  169. {{- else }}
  170. # Exclude collector container's logs. The file format is /var/log/pods/<namespace_name>_<pod_name>_<pod_uid>/<container_name>/<run_id>.log
  171. exclude: [ /var/log/pods/{{ .Release.Namespace }}_{{ include "opentelemetry-collector.lowercase_chartname" . }}*_*/{{ include "opentelemetry-collector.name" . }}/*.log ]
  172. {{- end }}
  173. start_at: beginning
  174. {{- if .Values.presets.logsCollection.storeCheckpoints}}
  175. storage: file_storage
  176. {{- end }}
  177. include_file_path: true
  178. include_file_name: false
  179. operators:
  180. # Find out which format is used by kubernetes
  181. - type: router
  182. id: get-format
  183. routes:
  184. - output: parser-docker
  185. expr: 'body matches "^\\{"'
  186. - output: parser-crio
  187. expr: 'body matches "^[^ Z]+ "'
  188. - output: parser-containerd
  189. expr: 'body matches "^[^ Z]+Z"'
  190. # Parse CRI-O format
  191. - type: regex_parser
  192. id: parser-crio
  193. regex: '^(?P<time>[^ Z]+) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) ?(?P<log>.*)$'
  194. output: extract_metadata_from_filepath
  195. timestamp:
  196. parse_from: attributes.time
  197. layout_type: gotime
  198. layout: '2006-01-02T15:04:05.000000000-07:00'
  199. # Parse CRI-Containerd format
  200. - type: regex_parser
  201. id: parser-containerd
  202. regex: '^(?P<time>[^ ^Z]+Z) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) ?(?P<log>.*)$'
  203. output: extract_metadata_from_filepath
  204. timestamp:
  205. parse_from: attributes.time
  206. layout: '%Y-%m-%dT%H:%M:%S.%LZ'
  207. # Parse Docker format
  208. - type: json_parser
  209. id: parser-docker
  210. output: extract_metadata_from_filepath
  211. timestamp:
  212. parse_from: attributes.time
  213. layout: '%Y-%m-%dT%H:%M:%S.%LZ'
  214. # Extract metadata from file path
  215. - type: regex_parser
  216. id: extract_metadata_from_filepath
  217. regex: '^.*\/(?P<namespace>[^_]+)_(?P<pod_name>[^_]+)_(?P<uid>[a-f0-9\-]+)\/(?P<container_name>[^\._]+)\/(?P<restart_count>\d+)\.log$'
  218. parse_from: attributes["log.file.path"]
  219. # Rename attributes
  220. - type: move
  221. from: attributes.stream
  222. to: attributes["log.iostream"]
  223. - type: move
  224. from: attributes.container_name
  225. to: resource["k8s.container.name"]
  226. - type: move
  227. from: attributes.namespace
  228. to: resource["k8s.namespace.name"]
  229. - type: move
  230. from: attributes.pod_name
  231. to: resource["k8s.pod.name"]
  232. - type: move
  233. from: attributes.restart_count
  234. to: resource["k8s.container.restart_count"]
  235. - type: move
  236. from: attributes.uid
  237. to: resource["k8s.pod.uid"]
  238. # Clean up log body
  239. - type: move
  240. from: attributes.log
  241. to: body
  242. {{- end }}
  243. {{- define "opentelemetry-collector.applyKubernetesAttributesConfig" -}}
  244. {{- $config := mustMergeOverwrite (include "opentelemetry-collector.kubernetesAttributesConfig" .Values | fromYaml) .config }}
  245. {{- if $config.service.pipelines.logs }}
  246. {{- $_ := set $config.service.pipelines.logs "processors" (prepend $config.service.pipelines.logs.processors "k8sattributes" | uniq) }}
  247. {{- end }}
  248. {{- if $config.service.pipelines.metrics }}
  249. {{- $_ := set $config.service.pipelines.metrics "processors" (prepend $config.service.pipelines.metrics.processors "k8sattributes" | uniq) }}
  250. {{- end }}
  251. {{- if $config.service.pipelines.traces }}
  252. {{- $_ := set $config.service.pipelines.traces "processors" (prepend $config.service.pipelines.traces.processors "k8sattributes" | uniq) }}
  253. {{- end }}
  254. {{- $config | toYaml }}
  255. {{- end }}
  256. {{- define "opentelemetry-collector.kubernetesAttributesConfig" -}}
  257. processors:
  258. k8sattributes:
  259. passthrough: false
  260. pod_association:
  261. - sources:
  262. - from: resource_attribute
  263. name: k8s.pod.ip
  264. - sources:
  265. - from: resource_attribute
  266. name: k8s.pod.uid
  267. - sources:
  268. - from: connection
  269. extract:
  270. metadata:
  271. - "k8s.namespace.name"
  272. - "k8s.deployment.name"
  273. - "k8s.statefulset.name"
  274. - "k8s.daemonset.name"
  275. - "k8s.cronjob.name"
  276. - "k8s.job.name"
  277. {{- end }}
  278. {{/* Build the list of port for deployment service */}}
  279. {{- define "opentelemetry-collector.deploymentPortsConfig" -}}
  280. {{- $ports := deepCopy .Values.ports }}
  281. {{- range $key, $port := $ports }}
  282. {{- if $port.enabled }}
  283. - name: {{ $key }}
  284. port: {{ $port.servicePort }}
  285. targetPort: {{ $port.containerPort }}
  286. protocol: {{ $port.protocol }}
  287. {{- if $port.appProtocol }}
  288. appProtocol: {{ $port.appProtocol }}
  289. {{- end }}
  290. {{- if $port.nodePort }}
  291. nodePort: {{ $port.nodePort }}
  292. {{- end }}
  293. {{- end }}
  294. {{- end }}
  295. {{- end }}