# /events

`/events` 스킬은 최근 Kubernetes 이벤트를 가져와 짧은 순위 목록으로 축약합니다 — `Warning` 이벤트 먼저, 그다음 `Normal` 중 주목할 만한 것. 읽기 전용이며 클러스터 상태를 변경하지 않습니다.

출력은 의도적으로 제한됩니다. 따라서 첫 번째 응답은 읽기 쉽고 모델을 통해 재방출하는 데도 비용이 낮습니다. 전체 이벤트 목록은 로컬 JSON 캐시에 기록되며 에이전트는 API를 다시 호출하지 않고 후속 질문에서 이를 읽습니다.

```text
/events                            # snapshot (uses cache if fresh)
/events --refresh                  # force a fresh fetch
/events --ttl 5m                   # only re-fetch if older than 5m
```

이 스킬은 위치 인수를 사용하지 않습니다. 후속 질문("payments만", "pod/checkout-7c9의 이벤트", "억제된 Normal 이벤트 표시")은 캐시에서 답변됩니다 — 아래 [후속 질문](#후속-질문)을 참조하십시오.

---

## 검사 항목

:::note[검사 항목]
- `(reason, involvedObject.kind, namespace)`로 그룹화된 모든 네임스페이스의 `Warning` 이벤트
- 일반적으로 의미 있는 `Normal` 이벤트 — `Killing`, `Preempting`, `NodeNotReady`, `Rebooted`, `FailedScheduling` 등 — 수다스러운 것들(`Pulled`, `Created`, `Started`, `Scheduled`, `SuccessfulCreate`)은 단일 꼬리 라인으로 축약
- 각 그룹에 대해: 횟수, 첫/마지막 타임스탬프, 가장 최근 메시지, 관련 오브젝트 (많을 경우 생략)
:::

출처: Kubernetes API 전용 — `kubectl get events --all-namespaces` (또는 `events.k8s.io/v1`에 대한 동등한 명령), `lastTimestamp` 기준 서버 측 정렬.

---

## 작동 방식

스킬은 단일 호출로 클러스터의 이벤트를 가져와 전체 목록을 컨텍스트별 캐시 디렉토리에 `events.json`으로 씁니다. 집계와 심각도 순위 지정은 해당 JSON에서 클라이언트 측에서 수행되므로 TTL 기간 내 반복 실행은 API를 완전히 건너뜁니다.

요약 블록은 다음과 같습니다:

```text
Events: prod-us-east · last 1h · 2 warning groups, 1 notable

WARN  payments/Pod         BackOff             14×  2m ago   "Back-off restarting failed container server in pod checkout-7c9"
WARN  ingress/Pod          FailedScheduling    1×   38m ago  "0/12 nodes are available: 3 node(s) had untolerated taint…"
NOTE  kube-system/Node     NodeNotReady        1×   52m ago  "Node ip-10-0-3-14 status is now: NodeNotReady"

…and 412 Normal events (Pulled, Created, Started, Scheduled) suppressed.

Snapshot cached (TTL 5m). Ask to drill in — e.g. "only payments", "events on pod/checkout-7c9", "show suppressed".
```

기간이 깔끔하면 스킬은 보고할 내용이 없음을 확인하는 한 줄을 출력하고 종료합니다.

---

## 후속 질문

요약에서는 의도적으로 수다스러운 `Normal` 이유를 축약하고 오브젝트별 세부 정보를 생략하여 초기 응답을 작게 유지합니다. 더 많은 내용을 요청하거나 캐시된 이벤트 목록에서 답변할 수 있는 다른 내용을 요청하면, 에이전트는 스킬을 다시 실행하지 않고 `jq`로 캐시를 읽습니다:

```text
❯ /events
[ summary... ]

❯ only payments
[ events filtered to namespace payments, from events.json ]

❯ show the suppressed Normal events
[ full Normal-event list, from events.json ]

❯ events on pod/checkout-7c9
[ filtered by involvedObject, walking owners one level up, from events.json ]
```

캐시에 없는 데이터(로그, 특정 리소스의 YAML, 여러 출처의 근본 원인)의 경우 에이전트는 `/events`를 확장하는 대신 적절한 스킬 — [`/logs`](/ko/reference/skills/logs/) 또는 [`/investigate`](/ko/reference/skills/investigate/) — 로 라우팅합니다.

"refresh" / "fetch again" / "re-check"라고 말하면 에이전트가 `--refresh`로 스킬을 다시 호출합니다.

---

## 에이전트에게 전달되는 내용

이벤트 목록을 가져오는 것 외에도 스킬은 에이전트에게 후속 질문에서 어떻게 동작해야 하는지 안내합니다:

- 스킬을 다시 호출하기보다 `jq`로 캐시된 `events.json`에서 답변하는 것을 우선합니다.
- 수다스러운 이유 세트(`Pulled`, `Created`, `Started`, `Scheduled`, `SuccessfulCreate`)를 축약 가능한 것으로 처리합니다 — 사용자가 억제된 세트를 요청할 때만 표시합니다.
- 사용자가 "`pod/X`의 이벤트"를 요청할 때 소유자를 한 단계 위로 탐색하여(`Pod` → `ReplicaSet` → `Deployment`, `Pod` → `Job` → `CronJob`) 컨트롤러에 대해 발생한 이벤트를 놓치지 않습니다.
- `BackOff` 또는 `CrashLoopBackOff` 뒤의 컨테이너 출력은 [`/logs`](/ko/reference/skills/logs/)로, 단일 리소스가 초점이 되면 [`/investigate`](/ko/reference/skills/investigate/)로 전달합니다.

---

## 옵션

<dl>
  <dt>`--refresh`</dt>
  <dd>캐시를 우회하고 API에서 새로운 데이터를 가져옵니다.</dd>

  <dt>`--ttl <duration>`</dt>
  <dd>캐시된 스냅샷이 이보다 오래된 경우에만 다시 가져옵니다 (kubectl 스타일: <code>1m</code>, <code>5m</code>, <code>1h</code>). 기본값: <code>5m</code>. <code>--refresh</code>가 설정된 경우 무시됩니다.</dd>
</dl>

[개요](/ko/reference/skills/overview/)의 글로벌 플래그도 적용됩니다.