조사 Loop는 Ingest, Frame, Investigate, Evaluate로 이어진다
장애 조사는 “database CPU 상승→slow query 확인→최근 배포와 대조”처럼 관측에 따라 다음 query가 달라집니다. 원문은 LangGraph 기반으로 추론과 tool 실행을 상태로 나누는 구조를 설명합니다. “완벽한 분리”보다 각 상태의 입력, 출력과 budget이 code에 명시되는지 확인해야 합니다.
워크플로는 다음 단계로 설명할 수 있습니다.
- Ingest: PagerDuty나 메트릭 시스템에서 알람의 컨텍스트를 수집합니다.
- Frame: 영향받는 서비스와 의존성을 파악하고, 여러 개의 가설(Hypothesis)을 설정합니다.
- Investigate: 어떤 툴을 사용해 어떤 쿼리를 날릴지 계획하고, 실제로 실행합니다.
- Evaluate: 수집된 증거로 가설을 기각, 유지하고 budget이나 종료 조건까지 반복합니다.
“충분한 확신”을 모델의 self-score 하나로 정하면 안 됩니다. 가설별 source 수, 독립적인 신호, 반증 query와 남은 미확인 항목을 구조화하고 최대 step, 시간에 닿으면 결론 미확정으로 끝냅니다. CPU 상승과 배포가 같은 시각에 있었다는 상관을 원인으로 바꾸지 않게 causal 근거를 요구합니다.
tool query에는 incident 시간창, service, environment와 filter를 기록합니다. 서로 다른 timezone이나 sampling 때문에 지표와 log가 어긋날 수 있으므로 RCA report에서 실제 조회 범위를 보여 줍니다. 같은 query를 반복하거나 범위를 무한히 넓히는 경우를 budget에서 감지합니다.
eBPF, OpenTelemetry 주장은 구성 요소별로 확인한다
원문은 eBPF와 OpenTelemetry를 결합한 OS 수준 관측과 synthetic log를 설명합니다. 이 기능이 OpenSRE repository 자체에 포함되는지, 별도 Tracer infrastructure 또는 선택적 connector인지 의존성과 실행 경로에서 확인해야 합니다. kernel 권한, 지원 OS, version과 overhead도 별도 평가 대상입니다.
synthetic log는 관측에서 만든 해석이지 application이 직접 남긴 원문 log와 같지 않습니다. report에 observed, derived, inferred provenance를 표시하고 생성 규칙과 원 event를 연결합니다. 추론된 stall을 확정 error처럼 취급하면 잘못된 가설이 뒤 query를 지배할 수 있습니다.
E2E, Synthetic test는 답뿐 아니라 조사 경로를 평가해야 한다
원문은 tests/e2e/와 tests/synthetic/ 카탈로그를 언급합니다. 실제 존재, fixture, score 방식은 선택한 commit에서 확인합니다. 최종 원인 문자열뿐 아니라 red herring을 사실로 채택했는지, 필요한 source를 조회했는지, tool budget과 시간 안에 끝났는지를 평가하는 접근이 중요합니다.
과거 incident를 fixture로 만들 때 production secret과 PII를 제거하고 timestamp, service 관계는 유지합니다. 정답 RCA와 최소 필요 evidence를 사람이 표시하며, 여러 원인이 함께 있었던 incident를 단일 label로 단순화하지 않습니다. model, connector version 변경마다 같은 set을 다시 실행합니다.
[비교 분석: 기존 방식 vs OpenSRE]
| 비교 항목 | 전통적 장애 대응 (Human SRE) | 일반 AI 코파일럿 / 챗봇 | OpenSRE Agent |
|---|
| 트리거 방식 | 사람이 알람을 보고 수동으로 조사 시작 | 사람이 직접 로그를 긁어다 프롬프트에 붙여넣음 | 알람 발생 시 자동으로 조사 파이프라인 트리거 |
| 데이터 수집 | 여러 도구의 query를 사람이 구성 | 제공된 log, 검색 범위에 좌우 | 지원 connector 범위에서 query를 연속 실행 |
| 추론 방식 | 엔지니어의 경험과 직관 (Siloed Knowledge) | 단발성 패턴 매칭 및 요약 | LangGraph 기반 가설 설정 및 반복적 검증 루프 |
| 결과물 | 조사 기록과 post-mortem | 텍스트 요약 | 근거가 연결된 가설, 미확인 항목, 제안 report |
다음 YAML과 Python은 tool budget과 조사 loop를 추상화한 의사 코드입니다. 실제 schema, model, connector 설정으로 복사하지 말고 repository의 현재 example과 대조해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
| # opensre-config.yaml (Agent Configuration)
agent:
reasoning_model: "claude-3-5-sonnet" # 복잡한 가설 수립 및 평가용
execution_model: "gpt-4o-mini" # 단순 툴 파라미터 생성용
budget:
max_steps: 15 # 무한 루프(Hallucination) 방지용 하드 리밋
max_execution_time: "5m"
tools:
- name: "kubernetes_cluster"
permissions: ["get", "list", "logs"] # 철저한 Read-only 원칙
- name: "datadog_apm"
- name: "github_repo"
repo: "my-company/backend-monorepo"
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # OpenSRE 내부 조사 루프의 핵심 로직 (Pseudo-code)
def investigate_incident(alert_context):
hypothesis_board = frame_problem(alert_context)
while not hypothesis_board.is_confident() and check_budget():
# 1. 현재 가설을 검증하기 위한 쿼리 계획 수립
plan = reasoning_llm.plan_next_step(hypothesis_board)
# 2. 툴 실행 (예: K8s 로그 조회, Datadog 트레이스 검색)
evidence = execute_tools(plan.tools_to_use, plan.queries)
# 3. 노이즈(Red Herring) 필터링 및 가설 업데이트
hypothesis_board = evaluator_llm.synthesize(hypothesis_board, evidence)
return generate_rca_report(hypothesis_board)
|