apiVersion: v1
kind: ConfigMap
metadata:
  name: otel-config
  namespace: default
data:
  # aws-otel-collector config
  otel-config.yaml: |
    extensions:
      health_check:
      sigv4auth:
        service: "aps"
        region: "{{AWS_REGION}}"

    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
      prometheus:
        config:
          global:
            scrape_interval: 20s
            scrape_timeout: 10s
          scrape_configs:
            - job_name: "otel-collector"
              kubernetes_sd_configs:
                - role: pod
              relabel_configs:
                - source_labels: [__meta_kubernetes_pod_container_port_number]
                  action: keep
                  target_label: '^8080$'
                - source_labels: [ __meta_kubernetes_pod_container_name ]
                  action: keep
                  target_label: '^pethistory$'
                - source_labels: [ __meta_kubernetes_pod_name ]
                  action: replace
                  target_label: pod_name
                - source_labels: [ __meta_kubernetes_pod_container_name ]
                  action: replace
                  target_label: container_name

    processors:
      batch/metrics:
        timeout: 60s

    exporters:
      logging:
        loglevel: debug
      awsxray:
      awsemf:
        namespace: "PetAdoptionsHistory"
        resource_to_telemetry_conversion:
          enabled: true
        dimension_rollup_option: NoDimensionRollup
        metric_declarations:
          - dimensions: [ [ pod_name, container_name ] ]
            metric_name_selectors:
              - "^transactions_get_count_total$"
              - "^transactions_history_count$"
              - "^process_.*"
            label_matchers:
              - label_names:
                  - container_name
                regex: ^pethistory$
          - dimensions: [ [ pod_name, container_name, generation ] ]
            metric_name_selectors:
              - "^python_gc_objects_.*"
            label_matchers:
              - label_names:
                  - container_name
                regex: ^pethistory$
          - dimensions: [ [ pod_name, container_name, endpoint, method, status ] ]
            metric_name_selectors:
              - "^flask_http_request_duration_seconds_created$"
            label_matchers:
              - label_names:
                  - container_name
                regex: ^pethistory$
          - dimensions: [ [ pod_name, container_name, method, status ] ]
            metric_name_selectors:
              - "^flask_http_request_total$"
              - "^flask_http_request_created$"
            label_matchers:
              - label_names:
                  - container_name
                regex: ^pethistory$
          - dimensions: [ [ pod_name, container_name, implementation, major, minor, patchlegel, version ] ]
            metric_name_selectors:
              - "^python_info$"
            label_matchers:
              - label_names:
                  - container_name
                regex: ^pethistory$
          - dimensions: [ [ pod_name, container_name, version ] ]
            metric_name_selectors:
              - "^flask_exporter_info$"
            label_matchers:
              - label_names:
                  - container_name
                regex: ^pethistory$
      # prometheusremotewrite:
      #   endpoint: "{{AMP_WORKSPACE_URL}}"
      #   auth:
      #     authenticator: sigv4auth

    service:
      extensions: [sigv4auth, health_check]
      pipelines:
        traces:
          receivers: [otlp]
          exporters: [awsxray]
        metrics:
          receivers: [prometheus]
          processors: [batch/metrics]
          exporters: [awsemf]