Capstone 06 — Kubernetes용 DevOps 문제 해결 에이전트(DevOps Troubleshooting Agent for Kubernetes)

AWS의 DevOps Agent가 정식 출시(General Availability; GA)되었고, Resolve AI는 K8s 운영 플레이북(playbook)을 공개했으며, NeuBird는 의미 기반 모니터링(semantic monitoring)을 시연했고, Metoro는 AI SRE를 서비스별 SLO(Service-Level Objective; SLO)와 연결했습니다. 운영 환경의 표준 형태는 정착되었습니다. 알림 웹훅(alert webhook)이 발화하면 에이전트가 텔레메트리(telemetry)를 읽고, K8s 객체로 구성된 그래프를 따라 걸으며, 근본 원인 가설(root-cause hypothesis)을 순위로 정리한 뒤, 승인 버튼이 달린 슬랙(Slack) 브리핑을 게시합니다. 기본은 읽기 전용(read-only)이며, 모든 조치는 사람이 게이트로 막아 통제합니다. 이 캡스톤은 바로 그 에이전트이며, 20개의 합성 인시던트(synthetic incident)로 평가하고 세 개의 공유 사례에서 AWS의 Agent와 직접 비교합니다.

유형: Capstone 언어: Python (에이전트), TypeScript (Slack 연동) 선수 지식: Phase 11 (LLM 엔지니어링), Phase 13 (도구와 MCP), Phase 14 (에이전트), Phase 15 (자율 시스템), Phase 17 (인프라스트럭처), Phase 18 (안전) 활용되는 Phase: P11 · P13 · P14 · P15 · P17 · P18 예상 시간: 약 30시간

문제

2025-2026년 SRE(Site Reliability Engineering; SRE) 서사는 "AI 에이전트가 인시던트(incident)를 분류(triage)하고, 사람은 조치(remediation)를 승인한다"로 굳어졌습니다. AWS DevOps Agent, Resolve AI, NeuBird, Metoro, PagerDuty AIOps는 모두 이 구조를 운영 환경에 그대로 출시했습니다. 에이전트는 프로메테우스(Prometheus) 지표, 로키(Loki) 로그, 템포(Tempo) 트레이스, kube-state-metrics, 그리고 K8s 객체로 이루어진 지식 그래프(knowledge graph)를 함께 읽습니다. 5분 안에 텔레메트리 인용(citation)을 포함한 순위가 매겨진 근본 원인 가설을 만들어내며, 슬랙을 통한 명시적인 사람 승인(human approval) 없이는 파괴적 명령을 절대 실행하지 않습니다.

어려운 부분의 대부분은 추론(reasoning)이 아니라 권한 범위 설정(scoping)과 안전(safety)입니다. 에이전트는 기본이 읽기 전용인 RBAC(Role-Based Access Control; RBAC) 표면, 하드닝된(hardened) MCP 도구 서버, 실제로 실행한 명령뿐 아니라 고려만 했던 명령까지 모두 남기는 감사 로그(audit log)가 필요합니다. 자기 능력 밖의 상황을 스스로 인식하고 상위로 에스컬레이션(escalate)할 줄 알아야 하며, 메모리 부족(Out-of-Memory; OOM) 강제 종료(kill) 연쇄가 5,000달러짜리 에이전트 청구서로 이어지지 않을 만큼 비용도 저렴해야 합니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.DevOps 문제 해결 에이전트가 원시 로그 파일만이 아닌 K8s 객체의 지식 그래프(knowledge graph) 위에서 동작하는 이유는 무엇인가요?

2.에이전트의 RBAC 표면에서 '기본 읽기 전용(read-only by default)'이란 무엇을 의미하나요?

0/2 답변 완료

개념

에이전트는 지식 그래프 위에서 동작합니다. 노드(node)는 K8s 객체(파드(Pod), 디플로이먼트(Deployment), 서비스(Service), 노드(Node), HPA(Horizontal Pod Autoscaler; HPA), PVC(PersistentVolumeClaim; PVC))와 텔레메트리 소스(프로메테우스 시계열, 로키 스트림, 템포 트레이스)이고, 간선(edge)은 소유 관계(Pod -> ReplicaSet -> Deployment), 스케줄링(Pod -> Node), 관측 관계(Pod -> Prometheus series)를 인코딩합니다. 그래프는 kube-state-metrics 동기화로 최신 상태를 유지하며, 알림이 들어올 때마다 다시 표본을 갱신합니다.

알림이 발화하면 에이전트는 영향을 받은 객체에서 출발해 근본 원인을 추적합니다. 간선을 따라 걷고, 최근 15분 텔레메트리 단편(slice)을 가져와 가설을 작성합니다. 가설은 증거(evidence)의 양과 질로 순위가 매겨집니다. 텔레메트리 인용이 얼마나 많이 뒷받침하는지, 얼마나 최근의 신호인지, 얼마나 구체적인지를 봅니다. 상위 세 개 가설은 그래프 경로 시각화(graph-path visualization)와 조치 승인 버튼을 함께 담아 슬랙으로 전달됩니다.

조치는 게이트로 가로막혀 있습니다. 기본 허용 동작은 모두 읽기 전용이고, 파괴적 동작(스케일 다운, 롤백, 파드 삭제)은 슬랙 승인을 요구합니다. ArgoCD 롤백 훅(rollback hook)은 에이전트가 절대 보유하지 않는 인증 토큰(auth token)이 필요하며, 감사 로그는 실행한 명령뿐 아니라 에이전트가 고려한 모든 명령을 함께 기록합니다. 그래야 리뷰 과정에서 아슬아슬했던 사례(near-miss)까지 잡아낼 수 있습니다.

아키텍처

PagerDuty / Alertmanager webhook
           |
           v
     FastAPI receiver
           |
           v
   LangGraph root-cause agent
           |
           +---- read-only MCP tools ----+
           |                             |
           v                             v
   K8s knowledge graph              telemetry slices
     (Neo4j / kuzu)              Prometheus, Loki, Tempo
   ownership + scheduling          last 15m, scoped
           |
           v
   hypothesis ranking (evidence weight)
           |
           v
   Slack brief + approval buttons
           |
           v (approved)
   ArgoCD rollback hook / PagerDuty escalate
           |
           v
   audit log: considered vs executed, every command

스택

  • 관측성(observability) 소스: 프로메테우스, 로키, 템포, kube-state-metrics
  • 지식 그래프: K8s 객체와 텔레메트리 간선을 함께 담는 Neo4j(managed) 또는 kuzu(embedded)
  • 에이전트: 도구별 허용 목록(per-tool allow-list)을 가진 LangGraph, 기본은 읽기 전용
  • 도구 전송 계층(tool transport): StreamableHTTP 기반 FastMCP, 승인 게이트(approval gate) 뒤에 두는 파괴적 도구는 별도 서버로 분리
  • 모델: 근본 원인 추론용 Claude Sonnet 4.7, 로그 요약(log summarization)용 Gemini 2.5 Flash
  • 조치 채널: ArgoCD 롤백 웹훅, PagerDuty 에스컬레이션, 슬랙 승인 카드(approval card)
  • 감사 로그: 추가 전용(append-only) 구조화 로그(고려 여부, 실행 여부, 승인 여부, 결과)
  • 배포: 좁은 RBAC 역할을 가진 자체 K8s 디플로이먼트, 별도 네임스페이스(namespace)

만들어보기

  1. 그래프 인제스트(Graph ingestion). kube-state-metrics를 30초마다 Neo4j 또는 kuzu에 동기화합니다. 노드는 Pod, Deployment, Node, Service, PVC, HPA이고, 간선은 OWNED_BY, SCHEDULED_ON, EXPOSES, MOUNTS, SCALES입니다. 텔레메트리 오버레이 간선으로 OBSERVED_BY(Pod가 프로메테우스 시계열로 관측됨)를 추가합니다.

  2. 알림 수신기(Alert receiver). PagerDuty 또는 Alertmanager 웹훅을 받는 FastAPI 엔드포인트를 만듭니다. 영향을 받은 객체와 SLO 위반 정보를 추출합니다.

  3. 읽기 전용 도구 표면(Read-only tool surface). kubectl, 프로메테우스 쿼리, 로키 LogQL, 템포 TraceQL을 FastMCP로 감쌉니다. 모든 도구는 좁은 RBAC 동사("get", "list", "describe")만 노출하고, 기본 서버에서는 "delete", "exec", "scale"을 제공하지 않습니다.

  4. 근본 원인 에이전트(Root-cause agent). 세 개의 노드를 가진 LangGraph로 구성합니다. sample은 최근 15분 텔레메트리 단편을 가져오고, walk는 인접한 객체를 그래프에서 조회하며, hypothesize는 텔레메트리 인용이 붙은 순위 가설 후보(ranked root-cause candidate)를 작성합니다.

  5. 증거 점수화(Evidence scoring). 각 가설의 점수는 recency × specificity × graph-path length inverse × citation count로 계산하고, 상위 3개만 반환합니다.

  6. 슬랙 브리핑(Slack brief). 가설, 그래프 경로 시각화(서버 측에서 렌더링한 서브그래프 이미지), 그리고 최대 하나의 조치 승인 버튼을 첨부(attachment)로 묶어 게시합니다.

  7. 조치 게이트(Remediation gate). 파괴적 도구(scale down, roll back, delete)는 승인 토큰 뒤에 있는 두 번째 MCP 서버에 둡니다. 에이전트는 슬랙 카드가 사람에게 승인을 받은 뒤에만 이 도구를 호출할 수 있습니다.

  8. 감사 로그(Audit log). 추가 전용 JSONL로 모든 후보 명령(candidate command)에 대해 고려되었는지, 실행되었는지, 누가 승인했는지를 기록합니다. 매일 S3로 적재(ship)합니다.

  9. 합성 인시던트 모음(Synthetic incident suite). 20개 시나리오를 만듭니다. OOMKill 연쇄(cascade), DNS 끊김(flap), HPA 스래싱(thrash), PVC 가득 참(fill), 시끄러운 이웃(noisy neighbor), 결함이 있는 사이드카(faulty sidecar), 잘못된 ConfigMap 롤아웃, 인증서 회전(certificate rotation), 이미지 풀 백오프(image-pull backoff) 등을 포함합니다. 근본 원인 정확도(root-cause accuracy)와 가설 도달 시간(time-to-hypothesis)으로 에이전트를 점수화합니다.

사용해보기

webhook: alert.pagerduty.com -> checkout-api SLO breach, error rate 14%
[graph]   affected: Deployment checkout-api (3 Pods, Node ip-10-2-3-4)
[walk]    neighbors: ReplicaSet checkout-api-abc, Service checkout-api,
           recent rollout 14m ago
[sample]  prometheus error_rate 14%, up-trend; loki 500s on /api/v2/pay
[hypo]    #1 bad rollout: latest image checkout-api:v2.41 fails /healthz
          citations: deploy.yaml (rev 42), prometheus errorRate, loki 500 stack
[slack]   [ROLL BACK to v2.40]  [ESCALATE]  [IGNORE]
          (approval required; agent does not roll back unilaterally)

제출하기

outputs/skill-devops-agent.md가 제출 산출물입니다. K8s 클러스터와 알림 소스(alert source)가 주어지면, 에이전트는 순위가 매겨진 근본 원인 가설과 슬랙 게이트를 거치는 조치 흐름(Slack-gated remediation flow)을 만들어냅니다.

가중치평가 항목측정 방법
25시나리오 모음에서의 RCA(Root Cause Analysis; RCA) 정확도20개 합성 인시던트 전체에서 근본 원인 80% 이상 정확
20안전성감사 로그상 슬랙 승인 없이 파괴적 동작 가드(destructive-action guard)가 우회된 적이 없음
20가설 도달 시간알림 발화부터 슬랙 브리핑까지의 p50이 5분 미만
20설명 가능성(Explainability)모든 가설에 그래프 경로와 텔레메트리 인용이 함께 붙음
15통합 완성도(Integration completeness)PagerDuty, Slack, ArgoCD, Prometheus가 엔드 투 엔드(end-to-end)로 동작
100

연습문제

  1. (쉬움) AWS DevOps Agent가 시연한 동일한 세 개 인시던트로 여러분의 에이전트를 실행합니다. 결과를 나란히 비교(side-by-side)해 공개하고, 에이전트의 판단이 어디서 갈라지는지 보고합니다.

  2. (중간) 에이전트가 승인 없이 실행했다면 파괴적이었을 고려된 명령을 표시하는 "아슬아슬한 사례(near-miss)" 감사 항목을 추가합니다. 1주일 동안 near-miss 발생률을 측정합니다.

  3. (중간) 가설 모델을 Claude Sonnet 4.7에서 자체 호스팅(self-hosted) Llama 3.3 70B로 교체합니다. RCA 정확도 차이와 인시던트당 비용(달러)을 측정합니다.

  4. (어려움) 인과 필터(causal filter)를 만들어 상관관계가 있는 텔레메트리 급증(correlated telemetry spike)과 실제 근본 원인을 구분합니다. 20개 시나리오의 라벨로 작은 분류기(classifier)를 학습시킵니다.

  5. (어려움) 롤백 드라이런(dry-run)을 추가합니다. 같은 매니페스트(manifest)를 가진 스테이징 클러스터(staging cluster)에서 ArgoCD 롤백을 미리 실행해 보고, 슬랙 승인 버튼을 누르기 전에 운영 클러스터에서 롤백 계획을 검증합니다.

핵심 용어

용어흔한 설명실제 의미
K8s 지식 그래프(K8s knowledge graph)"클러스터 그래프"노드는 K8s 객체와 텔레메트리 시계열, 간선은 소유·스케줄링·관측 관계를 의미한다
기본 읽기 전용(Read-only-by-default)"스코프가 좁은 RBAC"에이전트 서비스 계정은 get/list/describe 동사만 가지며, 파괴적 동사는 승인 게이트 뒤의 별도 서버에 둔다
감사 로그(Audit log)"고려 vs 실행"모든 후보 명령, 실행 여부, 승인자를 기록하는 추가 전용 레코드이다
가설 순위화(Hypothesis ranking)"증거 점수"최근성 × 구체성 × 그래프 경로 길이의 역수 × 인용 수로 산출한다
슬랙 승인 카드(Slack approval card)"HITL(Human-in-the-Loop; HITL) 게이트"조치 버튼이 달린 인터랙티브 슬랙 메시지로, 사람이 클릭하기 전까지 에이전트는 진행할 수 없다
텔레메트리 인용(Telemetry citation)"증거 포인터"주장(claim)을 뒷받침하는 프로메테우스 쿼리, 로키 셀렉터(selector), 템포 트레이스 URL이다
MTTR(Mean Time To Resolution; MTTR)"해결까지의 시간"알림 발화부터 SLO 회복까지의 벽시계 시간(wall-clock time)이다

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

devops-agent

Build a Kubernetes troubleshooting agent that walks a cluster knowledge graph, ranks root causes, and gates every remediation through Slack.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.감사 로그(audit log)는 에이전트가 '고려했지만(considered)' 실행하지 않은 명령을 기록합니다. 고려만 하고 실행하지 않은 명령을 추적하는 것이 왜 중요한가요?

2.가설 순위화(hypothesis ranking)는 최근성 x 구체성 x (1/그래프 경로 길이) x 인용 수 공식을 사용합니다. 그래프 경로 길이에 역수 가중치를 주는 이유는 무엇인가요?

3.에이전트는 가설 시각화와 최대 하나의 승인 버튼이 포함된 슬랙 브리핑을 게시합니다. 브리핑당 최대 하나의 조치 동작으로 제한하는 이유는 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다