OpenClaw AI Agent Gateway 배포 및 Full Observability
📅 작성일: 2026-02-25 | ⏱️ 읽는 시간: 약 15분
개요
OpenClaw(226k+ GitHub stars)은 범용 AI 에이전트 프레임워크로, 다양한 LLM을 활용한 자율 에이전트 워크플로우를 제공합니다. AWS에서는 aws-samples/sample-OpenClaw-on-AWS-with-Bedrock 샘플이 EC2 + CloudFormation 기반의 빠른 시작 가이드를 제공하며, 단일 인스턴스에서 Bedrock 모델 하나를 연동하는 간단한 구성입니다. 프로토타이핑이나 개인 사용에는 충분하지만, 엔터프라이즈 환경에서는 다른 접근이 필요합니다.
이 문서에서는 기존 EKS 클러스터 위에 OpenClaw을 배포하고, 멀티 모델 라우팅과 3계층 관측성을 결합하여 프로덕션 운영이 가능한 구조를 구성합니다.
| EC2 단독 배포 | EKS 기반 배포 (본 문서) | |
|---|---|---|
| 인프라 | EC2 + CloudFormation, 인스턴스 단위 관리 | 기존 EKS 클러스터에 Pod 추가, Karpenter 자동 스케일링 |
| LLM 연동 | Bedrock 단일 모델 | LiteLLM Auto-Router → 질의 내용 기반 Bedrock 멀티 모델 (Claude/GLM/Solar) |
| 관측성 | CloudWatch 기본 메트릭 | 3-Layer: 네트워크(Hubble) + LLM(Langfuse) + 시스템(OTEL/Prometheus) |
| 비용 제어 | 인스턴스 크기 조절 | Graviton4 ARM + Spot + 시맨틱 캐싱 + 예산 제어 |
| 확장성 | 수동 스케일링 | HPA/Karpenter 자동 스케일링, Spot 인스턴스 네이티브 중단 대응 |
관련 문서
| 문서 | 내용 | 관계 |
|---|---|---|
| 9. Inference Gateway | Kgateway 기반 라우팅 | 이론적 기반 |
| 12. Agent 모니터링 | Langfuse/LangSmith 모니터링 | 모니터링 이론 |
| 17. OpenClaw AI Gateway (본 문서) | OpenClaw 실전 배포 + Full o11y | 실습 구현 |
아키텍처 설계
이 구성은 6가지 핵심 설계 결정을 바탕으로, 엔터프라이즈 환경에서 요구하는 비용 효율성, 관측 가능성, 운영 자동화를 동시에 달성합니다.
핵심 설계 결정 요약
이 아키텍처의 각 계층은 다음과 같은 설계 결정에 기반합니다:
| 결정 영역 | 선택 | 대안 | 핵심 근거 |
|---|---|---|---|
| 호스팅 플랫폼 | EKS | EC2 단독 / AgentCore | Karpenter 자동 스케일링, o11y 스택 자유도, Spot/Graviton 조합 가능. AgentCore는 Experimental 단계로 cron 미지원, o11y 커스터마이징 제한 |
| LLM Gateway | LiteLLM Proxy | llm-d | Bedrock 멀티 모델 구조에 최적. 100+ 프로바이더, 예산 제어, success_callback: ["langfuse"] 한 줄 연동. 자체 vLLM 추가 시 LiteLLM → llm-d → vLLM 하이브리드 가능 |
| LLM Observability | Langfuse (self-hosted) | Tempo / Loki | LLM 네이티브: 토큰 사용량, 비용, 도구 호출 체인, 프롬프트/완료 내용 추적. Tempo/Loki는 범용 인프라 o11y로 프롬프트 수준 추적 불가 |
| Network Observability | Cilium Hubble (ENI 모드) | CW Network Flow Monitor | L3/L4/L7 가시성(HTTP 경로, 상태코드, DNS), 인터랙티브 서비스맵, $0. CW NFM은 L3/L4만 지원하며 $20-45/월 |
| IAM 인증 | EKS Pod Identity | IRSA | OIDC provider 불필요, aws eks create-pod-identity-association 한 줄로 매핑 |
| 컴퓨팅 | Graviton4 M8g + Spot | x86 On-Demand | ARM64 20-40% 저렴, Spot 추가 절감, Karpenter 네이티브 중단 대응 |
Technology Stack
Compute
OpenClaw(TypeScript/Node.js)과 LiteLLM(Python)은 ARM64 완전 호환이며, multi-arch 이미지를 사용합니다.
| 항목 | 구성 | 상세 |
|---|---|---|
| 인스턴스 | Graviton4 M8g | GA, x86 대비 20-40% 비용 절감, 에너지 효율 60% 향상 |
| 향후 전환 | Graviton5 M9g | M8g 대비 25% 성능 향상, 2026 GA 예정. GA 후 전환 시 동일 비용에서 추가 성능 확보 |
| 구매 옵션 | Spot Instance 우선 | On-Demand 대비 60-90% 절감. Karpenter 네이티브 중단 대응 + NMA 노드 건강 감시 |
Spot Instance 안정 운영
OpenClaw 게이트웨이는 상태 비저장(stateless) 워크로드이므로 Spot Instance에 적합합니다. 안정 운영을 위해 3가지 계층을 조합합니다:
| 계층 | 도구 | 역할 |
|---|---|---|
| Spot 중단 대응 | Karpenter v1.0+ | 2분 전 경고 감지 → 대체 노드 프로비저닝 → Pod 재스케줄링 |
| 노드 건강 감시 | NMA (EKS Add-on) | 커널/containerd/디스크/네트워크 이상 감지 → Node Condition 업데이트 |
| 자동 복구 | Node Auto Repair | NMA가 보고한 비정상 노드 자동 교체 |
Karpenter NodePool, EC2NodeClass, NMA 설정은 5.1 Infrastructure에서 상세히 다룹니다.
Pod 설정 — graceful shutdown + AZ 분산:
spec:
terminationGracePeriodSeconds: 120 # 진행 중 LLM 응답 완료 대기
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: openclaw-gateway
terminationGracePeriodSeconds: 120으로 Spot 중단 시 진행 중인 LLM 응답이 완료될 시간을 확보하고, topologySpreadConstraints로 AZ 간 Pod를 분산하여 단일 AZ 장애에 대비합니다.
LLM Models — Content-Based Routing
| 질의 유형 | 모델 | 프로바이더 | 근거 |
|---|---|---|---|
| 범용 (기본) | Claude Sonnet 4.6 | Bedrock | 1M context, 최고 에이전트 성능 |
| 코딩 / 프로그래밍 | GLM-4.7 | Bedrock | 102B MoE, 코드 생성 최적화 |
| 한국어 / 한국 관련 | Solar Pro 3 | Bedrock | 128K context, 한국어 최적화, MoE 12B active |
Networking
| Component | Technology |
|---|---|
| CNI | Cilium (ENI 모드) |
| Service Map | Hubble UI + Grafana |
| Bedrock 연결 | VPC Endpoint (com.amazonaws.<region>.bedrock-runtime) |
Observability (3-Layer)
| Layer | Tool | Tracks |
|---|---|---|
| Network | Cilium Hubble | L7 HTTP 흐름, DNS, 서비스맵 |
| LLM | Langfuse | 프롬프트/응답, 토큰 비용, 도구 호출 체인 |
| System | OTEL → Prometheus/Grafana | CPU, 메모리, Pod 헬스, 커스텀 메트릭 |
Cost Analysis
| 항목 | 예상 월 비용 |
|---|---|
| Gateway + LiteLLM (ARM) | ~$30 |
| Bedrock API (Claude/GLM/Solar) | ~$15-40 |
| Langfuse (self-hosted) | ~$10 |
| Redis (캐시) | ~$5 |
| Cilium + Hubble | $0 |
| Prometheus/Grafana | $0 (기존 스택) |
| 합계 | $60-85/월 |
비용 최적화 전략
| Strategy | Detail | Savings |
|---|---|---|
| Graviton4 ARM | x86 대비 | 20-40% |
| Spot Instance | On-Demand 대비, Karpenter 네이티브 중단 대응 | 60-90% (컴퓨팅) |
| Auto-Router | 특화 모델 라우팅으로 비용/품질 최적화 | 모델별 최적 |
| 시맨틱 캐싱 | Redis 기반, 동일/유사 요청 캐시 | 반복 요청 ~90% |
| 예산 제어 | 가상 키별 월 예산, rate limiting | 과금 방지 |
| VPC Endpoint | Bedrock NAT Gateway 비용 제거 | 데이터 전송비 절감 |
Deployment Guide
5.1 Infrastructure
EKS 클러스터 사전 요구사항
| 요구사항 | 상세 |
|---|---|
| EKS 버전 | 1.30+ |
| Karpenter | v1.0+ (Spot 네이티브 중단 대응 포함) |
| EKS Add-ons | Pod Identity Agent, EKS Node Monitoring Agent |
| VPC | Bedrock VPC Endpoint (com.amazonaws.<region>.bedrock-runtime) |
| CNI | Cilium ENI 모드 (Hubble L7 가시성 필요 시) 또는 VPC CNI |
신규 클러스터 생성 시 EKS Auto Mode를 권장합니다. 기존 클러스터가 있다면 위 요구사항만 충족하면 됩니다.
Karpenter — 비용 최적화 노드 구성
Graviton4 M8g Spot 우선 구성으로 컴퓨팅 비용을 최소화합니다.
# EC2NodeClass — Graviton4 ARM64 노드 설정
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
name: openclaw-arm64
spec:
role: "KarpenterNodeRole-${CLUSTER_NAME}"
amiSelectorTerms:
- alias: al2023@latest # Amazon Linux 2023, ARM64 자동 선택
subnetSelectorTerms:
- tags:
karpenter.sh/discovery: "${CLUSTER_NAME}"
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery: "${CLUSTER_NAME}"
blockDeviceMappings:
- deviceName: /dev/xvda
ebs:
volumeSize: 30Gi
volumeType: gp3
deleteOnTermination: true
# NodePool — Graviton 4세대 이상 전체, Spot 우선, On-Demand 폴백
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: openclaw-gateway
spec:
template:
metadata:
labels:
workload-type: ai-gateway
spec:
requirements:
- key: kubernetes.io/arch
operator: In
values: ["arm64"]
- key: karpenter.sh/capacity-type
operator: In
values: ["spot", "on-demand"] # Spot 우선, 가용 시
- key: karpenter.k8s.aws/instance-generation
operator: Gt
values: ["3"] # 4세대 이상 → m8g, c8g, r8g, m9g 등 모두 포함
- key: karpenter.k8s.aws/instance-size
operator: In
values: ["medium", "large"]
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: openclaw-arm64
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
budgets:
- nodes: "1" # 한 번에 최대 1개 노드만 축출 → 가용성 보장
limits:
cpu: "8" # 최대 8 vCPU — 비용 상한
memory: 16Gi
instance-family를 특정하지 않고 instance-generation: Gt "3" + arch: arm64로 지정했으므로, Graviton 4세대 이상의 모든 패밀리(m8g, c8g, r8g, m9g 등)가 후보에 포함됩니다. 새로운 Graviton 세대가 GA 되면 NodePool 수정 없이 Karpenter가 가격/성능 기준으로 최적 인스턴스를 자동 선택합니다.