groups:
- name: next-gen-pd-kernel-governance.rules
  rules:
  - alert: PDCPUCoreUsageOver80NextGen
    expr: |-
      100
        *
          max by (tenant_id, tidb_cluster_id, cluster_id, sharedpool_id) (
              sum by (tenant_id, tidb_cluster_id, cluster_id, sharedpool_id, instance) (
                rate(process_cpu_seconds_total{component=~".*pd.*", job=~".*pd.*"}[2m])
              )
              /
              on(tenant_id, tidb_cluster_id, cluster_id, sharedpool_id, instance)
              pd_service_maxprocs{component=~".*pd.*", job=~".*pd.*"}
          )
      >
        80
    for: 5m
    labels:
      tier: next-gen
      severity: major
      response_class: ticket
      component: pd
      stability_governance: next-gen-kernel-governance
      visibility: internal
      source_component: pd
      oncall_team: pd
    annotations:
      summary: PD single node CPU usage over 80%
      description: 'PD single node CPU usage exceeds 80% of total core usage. cluster: {{ $labels.cluster_id }}, value: {{ $value }}'
  - alert: PDDowntimeOver30MinNextGen
    expr: up{component="pd", job=~".*pd.*"} == 0
    for: 30m
    labels:
      tier: next-gen
      severity: critical
      response_class: page
      component: resilience
      stability_governance: next-gen-kernel-governance
      visibility: internal
      source_component: pd
      oncall_team: resilience
    annotations:
      summary: '{{ $labels.component }} server has been down for over 30 minutes'
      description: '{{ $labels.component }} in cluster {{ $labels.cluster_id }}, the instance {{ $labels.instance }} has been down for over 30 minutes. Please investigate.'
