Is there a better way for this promtail config?

This config is working, but it seems strange to me.
Also it’s nowhere documented that it can work like that.

Here I have a scraping config and before starting the pipeline_stages, I relabel the kubernetes tags.
If I don’t relabel before, the pipeline_stages won’t work.

Is there a better way to do this?

promtail:
  enabled: true    
  serviceMonitor:
    enabled: true
  config:
    lokiAddress: http://monitoring-loki:3100/loki/api/v1/push
    snippets:
      scrapeConfigs: |
        - job_name: kubernetes-pods-app
          kubernetes_sd_configs:
          - role: pod
          relabel_configs:
          - source_labels:
              - __meta_kubernetes_pod_controller_name
            regex: ([0-9a-z-.]+?)(-[0-9a-f]{8,10})?
            action: replace
            target_label: __tmp_controller_name
          - source_labels:
              - __meta_kubernetes_pod_label_app_kubernetes_io_name
              - __meta_kubernetes_pod_label_app
              - __tmp_controller_name
              - __meta_kubernetes_pod_name
            regex: ^;*([^;]+)(;.*)?$
            action: replace
            target_label: app
          - source_labels:
              - __meta_kubernetes_pod_label_app_kubernetes_io_component
              - __meta_kubernetes_pod_label_component
            regex: ^;*([^;]+)(;.*)?$
            action: replace
            target_label: component
          - action: replace
            source_labels:
            - __meta_kubernetes_pod_node_name
            target_label: node_name
          - action: replace
            source_labels:
            - __meta_kubernetes_namespace
            target_label: namespace
          - action: replace
            replacement: $1
            separator: /
            source_labels:
            - namespace
            - app
            target_label: job
          - action: replace
            source_labels:
            - __meta_kubernetes_pod_name
            target_label: pod
          - action: replace
            source_labels:
            - __meta_kubernetes_pod_container_name
            target_label: container
          - action: replace
            replacement: /var/log/pods/*$1/*.log
            separator: /
            source_labels:
            - __meta_kubernetes_pod_uid
            - __meta_kubernetes_pod_container_name
            target_label: __path__
          - action: replace
            regex: true/(.*)
            replacement: /var/log/pods/*$1/*.log
            separator: /
            source_labels:
            - __meta_kubernetes_pod_annotationpresent_kubernetes_io_config_hash
            - __meta_kubernetes_pod_annotation_kubernetes_io_config_hash
            - __meta_kubernetes_pod_container_name
            target_label: __path__
          pipeline_stages:
          - match:
              selector: '{app="server"}'
              stages:
              - cri: {}
              - logfmt:
                  mapping:
                    level: level
                    logger: logger
                    time: time
                    msg: msg
              - timestamp:
                  source: time
                  format: RFC3339Nano