apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
      evaluation_interval: 15s

    scrape_configs:
      - job_name: starter-root-pd
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: serverless-cluster-pd.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "2379"
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component]
            action: keep
            regex: pd
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
            action: keep
            regex: serverless-cluster
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: component
            replacement: pd
          - target_label: job
            replacement: pd
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      # CP9_PDMS_ONLY_BEGIN
      - job_name: starter-pd-tso
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: tso-service.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "2379"
          - source_labels: [__meta_kubernetes_pod_name]
            action: keep
            regex: pd-tso-server-.+
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: component
            replacement: tso
          - target_label: job
            replacement: tso
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      - job_name: starter-pd-resource-manager
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: resource-manager-service.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "2379"
          - source_labels: [__meta_kubernetes_pod_name]
            action: keep
            regex: pd-resource-manager-server-.+
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: component
            replacement: resource-manager
          - target_label: job
            replacement: resource-manager
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      # CP9_PDMS_ONLY_END

      - job_name: starter-root-tidb
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: serverless-cluster-tidb.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "10080"
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component]
            action: keep
            regex: tidb
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
            action: keep
            regex: serverless-cluster
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: component
            replacement: tidb
          - target_label: job
            replacement: tidb
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      - job_name: starter-selected-tidb
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: serverless-cluster-tidb.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-pool, super-vip-tidb-pool]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "10080"
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: component
            replacement: tidb
          - target_label: job
            replacement: tidb
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      - job_name: starter-tikv
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          server_name: serverless-cluster-tikv-peer.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "20160"
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component]
            action: keep
            regex: tikv
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
            action: keep
            regex: tikv-r8gxlarge-34v260403-p[0-2]
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
            target_label: cluster
          - target_label: component
            replacement: tikv
          - target_label: job
            replacement: tikv
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      - job_name: starter-node-exporter
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [monitoring]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
            action: keep
            regex: node-exporter
          - source_labels: [__meta_kubernetes_pod_container_port_name]
            action: keep
            regex: metrics
          - source_labels: [__meta_kubernetes_pod_node_name]
            target_label: instance
          - source_labels: [__meta_kubernetes_pod_node_name]
            target_label: node
          - target_label: component
            replacement: node-exporter
          - target_label: job
            replacement: node-exporter
          - target_label: cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__

      - job_name: starter-kubelet
        scheme: https
        metrics_path: /metrics
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        tls_config:
          insecure_skip_verify: true
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - source_labels: [__meta_kubernetes_node_name]
            target_label: instance
          - source_labels: [__meta_kubernetes_node_name]
            target_label: node
          - target_label: metrics_path
            replacement: /metrics
          - target_label: component
            replacement: kubelet
          - target_label: job
            replacement: kubelet
          - target_label: cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__

      - job_name: starter-cadvisor
        scheme: https
        metrics_path: /metrics/cadvisor
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        tls_config:
          insecure_skip_verify: true
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - source_labels: [__meta_kubernetes_node_name]
            target_label: instance
          - source_labels: [__meta_kubernetes_node_name]
            target_label: node
          - target_label: metrics_path
            replacement: /metrics/cadvisor
          - target_label: component
            replacement: kubelet
          - target_label: job
            replacement: kubelet
          - target_label: cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__

      - job_name: starter-kube-state-metrics
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [monitoring]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
            action: keep
            regex: kube-state-metrics
          - source_labels: [__meta_kubernetes_pod_container_port_name]
            action: keep
            regex: metrics
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - target_label: component
            replacement: kube-state-metrics
          - target_label: job
            replacement: kube-state-metrics
          - target_label: cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__

      - job_name: starter-tikv-worker
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: tikv-worker-service.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "19000"
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component]
            action: keep
            regex: tikv-worker
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: component
            replacement: tikv-worker
          - target_label: job
            replacement: tikv-worker
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      - job_name: starter-cop-worker
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: cop-worker-service.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "19000"
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component]
            action: keep
            regex: cop-worker-sts
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: source_component
            replacement: cop-worker-sts
          - target_label: component
            replacement: cop-worker
          - target_label: job
            replacement: cop-worker
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster

      - job_name: starter-dm-master
        scheme: https
        tls_config:
          ca_file: /etc/prometheus/tidb-tls/ca.crt
          cert_file: /etc/prometheus/tidb-tls/tls.crt
          key_file: /etc/prometheus/tidb-tls/tls.key
          server_name: serverless-cluster-dm-master.tidb-serverless.svc
        kubernetes_sd_configs:
          - role: pod
            namespaces:
              names: [tidb-serverless]
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: "true"
          - source_labels: [__meta_kubernetes_pod_container_port_number]
            action: keep
            regex: "8261"
          - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component]
            action: keep
            regex: dm-master
          - source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_prometheus_io_port]
            regex: (.+);(\d+)
            replacement: $1:$2
            target_label: __address__
          - source_labels: [__meta_kubernetes_namespace]
            target_label: kubernetes_namespace
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - target_label: cluster
            replacement: serverless-cluster
          - target_label: component
            replacement: dm-master
          - target_label: job
            replacement: dm-master
          - target_label: k8s_cluster
            replacement: __CP9_REMOTE_CLUSTER_NAME__
          - target_label: tidb_cluster
            replacement: tidb-serverless-serverless-cluster
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
  labels:
    app.kubernetes.io/name: prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: prometheus
  template:
    metadata:
      annotations:
        cp9.tidbcloud.com/prometheus-config-sha256: 8bc8ce155abaace25fde9d6b093c2d7ba7958110900237516f54245770a7f0f9
      labels:
        app.kubernetes.io/name: prometheus
    spec:
      serviceAccountName: prometheus
      nodeSelector:
        cp9.tidbcloud.com/starter-role: regional-control-plane
      containers:
        - name: prometheus
          image: quay.io/prometheus/prometheus:v3.5.0@sha256:63805ebb8d2b3920190daf1cb14a60871b16fd38bed42b857a3182bc621f4996
          imagePullPolicy: IfNotPresent
          args:
            - --config.file=/etc/prometheus/prometheus.yml
            - --storage.tsdb.path=/prometheus
            - --storage.tsdb.retention.time=__CP9_STARTER_PROMETHEUS_RETENTION__
            - --web.enable-lifecycle
          ports:
            - name: web
              containerPort: 9090
          readinessProbe:
            httpGet:
              path: /-/ready
              port: web
          livenessProbe:
            httpGet:
              path: /-/healthy
              port: web
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: "2"
              memory: 4Gi
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: ["ALL"]
            readOnlyRootFilesystem: true
            runAsNonRoot: true
          volumeMounts:
            - name: config
              mountPath: /etc/prometheus
              readOnly: true
            - name: tidb-tls
              mountPath: /etc/prometheus/tidb-tls
              readOnly: true
            - name: data
              mountPath: /prometheus
      securityContext:
        fsGroup: 65534
        runAsNonRoot: true
        runAsUser: 65534
        seccompProfile:
          type: RuntimeDefault
      volumes:
        - name: config
          configMap:
            name: prometheus-config
        - name: tidb-tls
          secret:
            secretName: tidb-cluster-secret
        - name: data
          emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  labels:
    app.kubernetes.io/name: prometheus
spec:
  type: ClusterIP
  selector:
    app.kubernetes.io/name: prometheus
  ports:
    - name: http
      port: 9090
      targetPort: web
