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

image:
  repository: tidbcloud-prod-registry.ap-southeast-1.cr.aliyuncs.com/tidbcloud/vector
  tag: "0.49-0720-4c68515"
serviceAccount:
  create: true
podLabels:
  vector.dev/exclude: "true"
args:
  - --config-dir
  - "/etc/vector/"

env:
  - name: K8S_CLUSTER_NAME
    value: prod-cn-hongkong-ng
resources:
  limits:
    cpu: "1"
    memory: 1Gi
  requests:
    cpu: 10m
    memory: 100Mi
customConfig:
  data_dir: /vector/vector-data
  api:
    enabled: true
    address: 0.0.0.0:8686
    playground: false
  sources:
    all_logs:
      type: kubernetes_logs
      delay_deletion_ms: 180000
      # Refer to https://github.com/vectordotdev/vector/issues/7840#issuecomment-921533804
      glob_minimum_cooldown_ms: 5000
    journald:
      type: journald
    self_metrics:
      type: internal_metrics
    self_logs:
      type: internal_logs
  transforms:
    ensure_component:
      type: remap
      inputs:
        - all_logs
      drop_on_error: true
      reroute_dropped: true
      source: |-
        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
        } else {
          .o11y.component = "unknown"
        }
    route_logs:
      type: route
      inputs:
        - ensure_component
      route:
        tidb_cluster_general_logs: |-
          includes(["tidb","tikv","pd","ticdc","tiflash","tiflash-learner","db-tidb-extra-access","backup","restore","tidb-lightning","dm-master","dm-worker","extra-tidb"], .o11y.component)
        infra_logs: |-
          !includes(["tidb","tikv","pd","ticdc","tiflash","tiflash-learner","db-tidb-extra-access","backup","restore","tidb-lightning","dm-master","dm-worker","extra-tidb"], .o11y.component)
    ensure_cluster_id:
      type: remap
      inputs:
        - route_logs.tidb_cluster_general_logs
      drop_on_error: true
      reroute_dropped: true
      source: |-
        if !is_null(.kubernetes.pod_labels."tags.tidbcloud.com/cluster") {
          .o11y.cluster_id = .kubernetes.pod_labels."tags.tidbcloud.com/cluster"
        } else {
          parsed, err = parse_grok(.kubernetes.pod_namespace, "tidb%{GREEDYDATA:cluster_id}")
          if err == null {
            .o11y.cluster_id = parsed.cluster_id
          } else {
            .o11y.cluster_id = "unknown"
          }
        }
    enrich_tidb_cluster_log_message:
      type: remap
      inputs:
        - ensure_cluster_id
      drop_on_error: true
      reroute_dropped: true
      source: |-
        t = to_string!(.timestamp)
        node = .kubernetes.pod_node_name
        pod_namespace = .kubernetes.pod_namespace
        pod_name = .kubernetes.pod_name
        container_name = .kubernetes.container_name
        prefix = join!([t, node, pod_namespace, pod_name, container_name], ";")
        new_message, err = prefix + " " + .message
        if err == null {
          .message = new_message
        }
    enrich_infra_log_message:
      type: remap
      inputs:
        - route_logs.infra_logs
      drop_on_error: true
      reroute_dropped: true
      source: |-
        t = to_string!(.timestamp)
        node = .kubernetes.pod_node_name
        pod_namespace = .kubernetes.pod_namespace
        pod_name = .kubernetes.pod_name
        container_name = .kubernetes.container_name
        prefix = join!([t, node, pod_namespace, pod_name, container_name], ";")
        new_message, err = prefix + " " + .message
        if err == null {
          .message = new_message
        }
    ensure_all_logs_labels:
      type: remap
      inputs:
        - all_logs
      drop_on_error: true
      reroute_dropped: true
      source: |-
        if is_null(.kubernetes.pod_labels.app) {
          .kubernetes.pod_labels.app = .kubernetes.pod_name
        }
        if is_null(.kubernetes.pod_labels.release) {
          .kubernetes.pod_labels.release = "unknown"
        }
  sinks:
    self_metrics_sink:
      type: prometheus_exporter
      inputs: [self_metrics]
      address: 0.0.0.0:9598
    self_logs_sink:
      type: loki
      inputs: [self_logs]
      labels:
        cluster: seed/ack/cn-hongkong-ng
        cluster_env: prod
        node: "{{ `{{ host }}` }}"
        app: vector_log_agent
      endpoint: http://ep-j6ci0dd848e621651255.epsrv-j6c0axn3oc2otv1zh9gu.cn-hongkong.privatelink.aliyuncs.com/loki
      compression: gzip
      out_of_order_action: accept
      batch:
        max_bytes: 1024000
        timeout_secs: 1
      buffer:
        type: disk
        max_size: 1073741824
      encoding:
        codec: json
    loki_sink:
      type: loki
      inputs: [ensure_all_logs_labels]
      labels:
        namespace: "{{ `{{ kubernetes.pod_namespace }}` }}"
        container: "{{ `{{ kubernetes.container_name }}` }}"
        node: "{{ `{{ kubernetes.pod_node_name }}` }}"
        instance: "{{ `{{ kubernetes.pod_name }}` }}"
        app: "{{ `{{ kubernetes.pod_labels.app }}` }}"
        release: "{{ `{{ kubernetes.pod_labels.release }}` }}"
        stream: "{{ `{{ stream }}` }}"
        cluster: seed/ack/cn-hongkong-ng
        cluster_env: prod
      endpoint: http://ep-j6ci0dd848e621651255.epsrv-j6c0axn3oc2otv1zh9gu.cn-hongkong.privatelink.aliyuncs.com/loki
      compression: gzip
      out_of_order_action: accept
      batch:
        max_bytes: 1024000
        timeout_secs: 1
      buffer:
        type: disk
        max_size: 1073741824
      encoding:
        codec: text
    loki_sys_logs:
      type: loki
      inputs: [journald]
      labels:
        node: "{{ `{{ kubernetes.pod_node_name }}` }}"
        syslog: '{{ "{{ SYSLOG_IDENTIFIER }}" }}'
        cluster: seed/ack/cn-hongkong-ng
        cluster_env: prod
      endpoint: http://ep-j6ci0dd848e621651255.epsrv-j6c0axn3oc2otv1zh9gu.cn-hongkong.privatelink.aliyuncs.com/loki
      compression: gzip
      out_of_order_action: accept
      batch:
        max_bytes: 1024000
        timeout_secs: 1
      buffer:
        type: disk
        max_size: 1073741824
      encoding:
        codec: text
containerPorts:
  - name: prom-exporter
    containerPort: 9598
    protocol: TCP
  - name: api
    containerPort: 8686
    protocol: TCP
