role: "Agent"
rbac:
  create: true
psp:
  create: false

image:
  repository: gcr.io/pingcap-public/third-party/timberio/vector
  tag: "0.23.X-1-debian"

serviceAccount:
  create: true
  annotations:
    eks.amazonaws.com/role-arn: "arn:aws:iam::557537366020:role/devops-vector-agent"

env:
  - name: TENANT_ID
    value: resilience
  - name: PROJECT_ID
    value: devops
  - name: K8S_CLUSTER_NAME
    value: devops_prod

resources:
  requests:
    cpu: "50m"
    memory: "64Mi"
  limits:
    cpu: "500m"
    memory: "1G"

podAnnotations:
  prometheus.io/path: "/metrics"
  prometheus.io/port: "9090"
  prometheus.io/scrape: "true"

tolerations:
  - operator: Exists

customConfig:
  data_dir: /vector-data-dir
  api:
    enabled: true
    address: "0.0.0.0:8686"
    playground: false
  sources:
    all_logs:
      type: kubernetes_logs
      delay_deletion_ms: 10000
      glob_minimum_cooldown_ms: 30000
    journald:
      type: journald
    self_metrics:
      type: internal_metrics
  transforms:
    ensure_component:
      type: remap
      inputs:
      - all_logs
      drop_on_error: true
      reroute_dropped: true
      source: |-
        if !is_null(.kubernetes.pod_labels."app") {
          .o11y.component = .kubernetes.pod_labels."app.kubernetes.io/component"
        } else if !is_null(.kubernetes.pod_labels."app.kubernetes.io/component") {
          .o11y.component = .kubernetes.pod_labels."app.kubernetes.io/component"
        } else if !is_null(.kubernetes.container_name) {
          .o11y.component = .kubernetes.container_name
        }
    route_logs:
      type: route
      inputs:
      - ensure_component
      route:
        # Match logs for containers ".*access-log.*" or ".*audit-log.*".
        s3_targets: |-
          container = string(.kubernetes.container_name) ?? ""
          match(container, r'.*access-log.*') || match(container, r'.*audit-log.*')
    clean_access_log:
      type: remap
      inputs:
        - route_logs.s3_targets
      drop_on_error: true # if the log is not in expected format, drop it to avoid blocking the pipeline.
      source: |-
        parsed = parse_json!(string!(.message))
        . = merge!(., parsed)
        
        del(.message)
  sinks:
    self_metrics_sink:
      type: prometheus_exporter
      inputs: 
      - self_metrics
      address: 0.0.0.0:9090
    loki_pod_logs:
      type: loki
      inputs:
        - ensure_component  # collect all logs
        - ensure_component.dropped
      encoding:
        codec: text
      compression: gzip
      endpoint: http://promethues-enpoint-a.observability.tidbcloud.com/loki
      labels:
        cluster_env: prod
        cluster: prod-devops
        tanent_id: resilience
        project_id: devops
        node: '{{ `{{ kubernetes.pod_node_name }}` }}'
        namespace: '{{ `{{ kubernetes.pod_namespace }}` }}'
        instance: '{{ `{{ kubernetes.pod_name }}` }}'
        container: '{{ `{{ kubernetes.container_name }}` }}'
        app: '{{ `{{ kubernetes.pod_labels.app }}` }}'
        release: '{{ `{{ kubernetes.pod_labels.release }}` }}'
        stream: '{{ `{{ stream }}` }}'
      out_of_order_action: accept
      batch:
        max_bytes: 10240
        timeout_secs: 1
      buffer:
        max_size: 1073741824
        type: disk
    loki_sys_logs:
      type: "loki"
      inputs: 
      - "journald"
      encoding:
        codec: text
      compression: gzip
      endpoint: http://promethues-enpoint-a.observability.tidbcloud.com/loki
      labels:
        cluster_env: prod
        cluster: prod-devops
        tanent_id: resilience
        project_id: devops
        node: '{{ `{{ host }}` }}'
        syslog: '{{ `{{ SYSLOG_IDENTIFIER }}` }}'
      out_of_order_action: accept
      batch:
        max_bytes: 10240
        timeout_secs: 1
      buffer:
        max_size: 1073741824
        type: "disk"
    s3_archive_logs:
      type: aws_s3
      inputs:
        - clean_access_log
      bucket: "tidbcloud-devops-archive-logs-prod"
      region: "us-west-2"
      key_prefix: 'ns={{ `{{ kubernetes.pod_namespace }}` }}/app={{ `{{ kubernetes.pod_labels.app }}` }}/container={{ `{{ kubernetes.container_name }}` }}/date=%F/'
      compression: gzip
      encoding:
        codec: ndjson
        except_fields:
          - "kubernetes"
          - "file"
          - "stream"
          - "source_type"
          - "o11y"
          - "timestamp"
      batch:
        max_bytes: 10485760
        timeout_secs: 300
      buffer:
        max_size: 1073741824
        type: disk

persistence:
  hostPath:
    path: /var/lib/vector/01

extraVolumes:
  - name: machine-id
    hostPath:
      path: /etc/machine-id
      type: File

extraVolumeMounts:
  - name: machine-id
    mountPath: /etc/machine-id
    readOnly: true

rollWorkload: true

livenessProbe:
  httpGet:
    path: /health
    port: api
readinessProbe:
  httpGet:
    path: /health
    port: api