---
schema_version: 1
id: top-cpu-overload-nodes-and-log-patterns-in-premium-cluster-during-latest-window
title: Top CPU-overload nodes and error/warn log counts in the primary premium cluster
  during the latest completed Beijing 11:00-11:05 window
status: active
owner: codex
evaluation:
  mode: adhoc_evidence
environment:
  profile: stable-premium
  cluster_label: premium-main
  cluster_id: '10748116073341772391'
  cluster_type: premium
  tidb_version: v8.5.x
  parent_id: '2026948324023603200'
time_window:
  resolved_by_output: resolved_window
runtime:
  hooks:
  - id: resolve_runtime_window
    stage: before_acp
    kind: python_script
    path: runtime_hook.py
    output_id: resolved_window
    args:
    - resolve-window
    - "--cluster-id"
    - "{{environment.cluster_id}}"
    - "--cluster-label"
    - "{{environment.cluster_label}}"
    - "--local-hour"
    - '11'
    - "--local-minute"
    - '0'
    - "--duration-minutes"
    - '5'
    - "--top-n-per-component"
    - '3'
  - id: build_runtime_reference
    stage: before_judge
    kind: python_script
    path: runtime_hook.py
    output_id: reference_answer
    args:
    - build-reference
    - "--cluster-id"
    - "{{environment.cluster_id}}"
    - "--cluster-label"
    - "{{environment.cluster_label}}"
    - "--shared-cluster-id"
    - "{{environment.parent_id}}"
    - "--start"
    - "{{runtime.resolved_window.start}}"
    - "--end"
    - "{{runtime.resolved_window.end}}"
    - "--top-n-per-component"
    - '3'
prompt:
  text: |
    帮我看下这个 Premium 集群（{{environment.cluster_id}}）在 {{runtime.resolved_window.start}} 到 {{runtime.resolved_window.end}} 这 5 分钟里，CPU 平均 overload 最高的节点分别是谁。

    规则严格如下：
    1. 分三类组件分别统计：`tidb`、`tikv`、`pd`。
    2. 每类组件各取 3 个节点，不是全局混排 top9。
    3. 节点名必须输出 K8s pod 名，例如 `db-tidb-1`、`db-tikv-23`、`db-pd-0`。
    4. `avg_cpu_overload` 的定义固定为：
       - CPU 使用率分子：`rate(process_cpu_seconds_total{component="<component>"}[1m])`
       - CPU quota / maxprocs 分母：
         - `tidb` 用 `tidb_server_maxprocs`
         - `tikv` 用 `tikv_server_cpu_cores_quota`
         - `pd` 用 `pd_service_maxprocs`
       - 先取这 5 分钟内 1 分钟粒度 CPU rate 的均值，再除以对应节点的 quota / maxprocs。
    5. 排名规则：
       - 先按 `avg_cpu_overload` 从高到低；
       - 如果相同，再按节点名字典序。
    6. 对于每个入选节点，再统计同一时间窗内这个节点 `ERROR` 或 `WARN` 日志的总条数。
    7. 日志计数规则固定为：
       - 只统计 `ERROR`、`WARN`、`WARNING`；
       - `WARNING` 按 `WARN` 处理；
       - 同一条原始日志如果因为不同 selector 重复命中，只计 1 次。
    8. 如果某个节点在这 5 分钟里没有任何 `ERROR` / `WARN` 日志，就返回：
       - `error_warn_log_count`: `0`

    我只看最后结果。最终只输出一个 `json` 代码块，字段必须严格为：
    `cluster_id`、`window`、`evidence_sufficient`、`ranked_nodes`

    `ranked_nodes` 必须严格包含 9 个元素，并按下面顺序输出：
    1. 先输出 `tidb` 的第 1、2、3 名；
    2. 再输出 `tikv` 的第 1、2、3 名；
    3. 最后输出 `pd` 的第 1、2、3 名。

    `ranked_nodes` 里的每个元素都只能包含：
    `component`、`rank`、`node`、`avg_cpu_overload`、`error_warn_log_count`

    `avg_cpu_overload` 保留 4 位小数。

    不要输出额外字段，不要输出额外解释，也不要把说明写进 JSON。

    JSON 结构如下：

    ```json
    {
      "cluster_id": "10748116073341772391",
      "window": {
        "start": "2026-01-01T03:00:00Z",
        "end": "2026-01-01T03:05:00Z"
      },
      "evidence_sufficient": true,
      "ranked_nodes": [
        {
          "component": "tidb",
          "rank": 1,
          "node": "db-tidb-1",
          "avg_cpu_overload": 0.9134,
          "error_warn_log_count": 17
        }
      ]
    }
    ```

    如果证据不足，请把 `evidence_sufficient` 设为 `false`，并把 `ranked_nodes` 设为空数组。
tags:
- cpu
- logs
- structured-output
- adhoc-evidence
- premium
case_tier: P1
cost_tier: low
followup:
  scheduled_max_followups: 0
execution:
  acp_bash_timeout_s: 300
