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 }}