Skip to main content

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 GatewayKgateway 기반 라우팅이론적 기반
12. Agent 모니터링Langfuse/LangSmith 모니터링모니터링 이론
17. OpenClaw AI Gateway (본 문서)OpenClaw 실전 배포 + Full o11y실습 구현

아키텍처 설계

이 구성은 6가지 핵심 설계 결정을 바탕으로, 엔터프라이즈 환경에서 요구하는 비용 효율성, 관측 가능성, 운영 자동화를 동시에 달성합니다.

핵심 설계 결정 요약

이 아키텍처의 각 계층은 다음과 같은 설계 결정에 기반합니다:

결정 영역선택대안핵심 근거
호스팅 플랫폼EKSEC2 단독 / AgentCoreKarpenter 자동 스케일링, o11y 스택 자유도, Spot/Graviton 조합 가능. AgentCore는 Experimental 단계로 cron 미지원, o11y 커스터마이징 제한
LLM GatewayLiteLLM Proxyllm-dBedrock 멀티 모델 구조에 최적. 100+ 프로바이더, 예산 제어, success_callback: ["langfuse"] 한 줄 연동. 자체 vLLM 추가 시 LiteLLM → llm-d → vLLM 하이브리드 가능
LLM ObservabilityLangfuse (self-hosted)Tempo / LokiLLM 네이티브: 토큰 사용량, 비용, 도구 호출 체인, 프롬프트/완료 내용 추적. Tempo/Loki는 범용 인프라 o11y로 프롬프트 수준 추적 불가
Network ObservabilityCilium Hubble (ENI 모드)CW Network Flow MonitorL3/L4/L7 가시성(HTTP 경로, 상태코드, DNS), 인터랙티브 서비스맵, $0. CW NFM은 L3/L4만 지원하며 $20-45/월
IAM 인증EKS Pod IdentityIRSAOIDC provider 불필요, aws eks create-pod-identity-association 한 줄로 매핑
컴퓨팅Graviton4 M8g + Spotx86 On-DemandARM64 20-40% 저렴, Spot 추가 절감, Karpenter 네이티브 중단 대응

Technology Stack

Compute

OpenClaw(TypeScript/Node.js)과 LiteLLM(Python)은 ARM64 완전 호환이며, multi-arch 이미지를 사용합니다.

항목구성상세
인스턴스Graviton4 M8gGA, x86 대비 20-40% 비용 절감, 에너지 효율 60% 향상
향후 전환Graviton5 M9gM8g 대비 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 RepairNMA가 보고한 비정상 노드 자동 교체

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.6Bedrock1M context, 최고 에이전트 성능
코딩 / 프로그래밍GLM-4.7Bedrock102B MoE, 코드 생성 최적화
한국어 / 한국 관련Solar Pro 3Bedrock128K context, 한국어 최적화, MoE 12B active

Networking

ComponentTechnology
CNICilium (ENI 모드)
Service MapHubble UI + Grafana
Bedrock 연결VPC Endpoint (com.amazonaws.<region>.bedrock-runtime)

Observability (3-Layer)

LayerToolTracks
NetworkCilium HubbleL7 HTTP 흐름, DNS, 서비스맵
LLMLangfuse프롬프트/응답, 토큰 비용, 도구 호출 체인
SystemOTEL → Prometheus/GrafanaCPU, 메모리, 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/월

비용 최적화 전략

StrategyDetailSavings
Graviton4 ARMx86 대비20-40%
Spot InstanceOn-Demand 대비, Karpenter 네이티브 중단 대응60-90% (컴퓨팅)
Auto-Router특화 모델 라우팅으로 비용/품질 최적화모델별 최적
시맨틱 캐싱Redis 기반, 동일/유사 요청 캐시반복 요청 ~90%
예산 제어가상 키별 월 예산, rate limiting과금 방지
VPC EndpointBedrock NAT Gateway 비용 제거데이터 전송비 절감

Deployment Guide

5.1 Infrastructure

EKS 클러스터 사전 요구사항

요구사항상세
EKS 버전1.30+
Karpenterv1.0+ (Spot 네이티브 중단 대응 포함)
EKS Add-onsPod Identity Agent, EKS Node Monitoring Agent
VPCBedrock VPC Endpoint (com.amazonaws.<region>.bedrock-runtime)
CNICilium 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
Graviton 세대 자동 전환

instance-family를 특정하지 않고 instance-generation: Gt "3" + arch: arm64로 지정했으므로, Graviton 4세대 이상의 모든 패밀리(m8g, c8g, r8g, m9g 등)가 후보에 포함됩니다. 새로운 Graviton 세대가 GA 되면 NodePool 수정 없이 Karpenter가 가격/성능 기준으로 최적 인스턴스를 자동 선택합니다.

Node Monitoring Agent — 노드 건강 상태 감시

Karpenter는 Spot 중단 이벤트에 대응하지만, 노드 자체의 시스템 레벨 이상(커널 문제, containerd 장애, 디스크/네트워크 이상 등)은 감지하지 않습니다. EKS Node Monitoring Agent(NMA)를 EKS Add-on으로 활성화하면 이 영역을 보완합니다.

감지 영역KarpenterNMA
Spot 중단 2분 전 경고감지 + 대체 노드 프로비저닝-
커널/containerd 장애-감지 → Node Condition 업데이트
디스크/네트워크 이상-감지 → Kubernetes Event 생성
Node Auto Repair 연동-비정상 노드 자동 교체 트리거
# NMA EKS Add-on 활성화
aws eks create-addon \
--cluster-name ${CLUSTER_NAME} \
--addon-name eks-node-monitoring-agent

Karpenter(Spot 중단 대응) + NMA(노드 건강 감시) + Node Auto Repair(자동 교체)를 조합하면, Spot 인스턴스 환경에서도 높은 가용성을 확보할 수 있습니다.

IAM — EKS Pod Identity

# Pod Identity Agent add-on 활성화 후:
aws eks create-pod-identity-association \
--cluster-name ${CLUSTER_NAME} \
--namespace openclaw \
--service-account openclaw-sa \
--role-arn arn:aws:iam::${ACCOUNT_ID}:role/openclaw-bedrock-role

IAM Role에 필요한 권한:

  • bedrock:InvokeModel
  • bedrock:InvokeModelWithResponseStream

OpenClaw과 LiteLLM은 동일한 ServiceAccount를 사용합니다.

5.2 LiteLLM AI Gateway

Config — 멀티 모델 + Auto-Router

model_list:
- model_name: claude-sonnet
litellm_params:
model: bedrock/anthropic.claude-sonnet-4-6

- model_name: glm-4.7
litellm_params:
model: bedrock/zhipu.glm-4.7

- model_name: solar-pro-3
litellm_params:
model: bedrock/upstage.solar-pro-3

router_settings:
routing_strategy: "content-based"
auto_router:
encoder_type: openai
encoder_name: text-embedding-3-small
routes:
- name: korean-queries
model: solar-pro-3
utterances:
- "한국어로 답변해줘"
- "한국 관련 질문"
- "Korean language query"
- "한국 뉴스"
- "한국어 번역"
description: "한국어 질의 또는 한국 관련 질의"
score_threshold: 0.5
- name: coding-queries
model: glm-4.7
utterances:
- "write code"
- "debug this function"
- "코드 작성해줘"
- "프로그래밍"
- "fix this bug"
description: "코딩, 프로그래밍, 디버깅 관련 질의"
score_threshold: 0.5
default_route: claude-sonnet

litellm_settings:
cache: true
cache_params:
type: redis
host: redis
port: 6379
success_callback: ["langfuse"]
failure_callback: ["langfuse"]

general_settings:
master_key: os.environ/LITELLM_MASTER_KEY

Secrets 생성

kubectl create secret generic litellm-secrets \
--from-literal=LITELLM_MASTER_KEY=<your-master-key>

모든 모델이 Bedrock를 통해 호출되므로 별도의 API 키가 불필요합니다. IAM 인증은 EKS Pod Identity를 통해 자동으로 처리됩니다.

  • Redis sidecar: Auto-Router 임베딩 캐시 + 시맨틱 캐시
  • Service: ClusterIP (port 4000, OpenAI-compatible API)

5.3 OpenClaw Gateway

Deployment

  • Image: ghcr.io/openclaw/openclaw:latest
  • Resources: 512Mi memory, 250m CPU
  • NodeSelector: kubernetes.io/arch: arm64
  • Service: ClusterIP (port 18789)

Config (openclaw.json)

{
"ai": {
"provider": "openai",
"baseUrl": "http://litellm-proxy:4000",
"model": "claude-sonnet"
},
"diagnostics": {
"enabled": true,
"otel": {
"enabled": true,
"endpoint": "http://otel-collector:4317",
"serviceName": "openclaw-gateway",
"traces": true,
"metrics": true,
"logs": true
}
}
}

5.4 Cilium CNI (ENI 모드) + Hubble

Cilium ENI 모드 — VPC CNI 완전 대체, 단일 eBPF 데이터패스

  • Pod IP를 ENI에서 직접 할당
  • 완전한 NetworkPolicy 지원
  • 최적 성능의 단일 데이터패스

Hubble UI 기능:

  • 인터랙티브 서비스맵: Pod 간 HTTP 요청 흐름 시각화
  • L7 HTTP 흐름: POST /v1/chat/completions → 200 OK (320ms) 확인
  • DNS 쿼리 추적: 어떤 외부 API를 호출하는지 실시간 확인
  • Hubble Grafana 대시보드: Prometheus 메트릭 연동
  • 비용: $0

5.5 LLM Observability (Langfuse)

  • Langfuse self-hosted Helm chart (PostgreSQL + Langfuse server)
  • LiteLLM success_callback: ["langfuse"]로 자동 연동

추적 항목:

  • 프롬프트/완료 내용
  • 토큰 사용량
  • 모델별 비용
  • 도구 호출 체인
  • 지연시간

5.6 System Observability (OTEL + Prometheus/Grafana)

  • OTEL Collector: Receivers OTLP (gRPC :4317), Exporters Prometheus
  • 기존 kube-prometheus-stack이 있으면 재활용, 없으면 Helm으로 신규 배포
  • OpenClaw 메트릭: openclaw.tokens, openclaw.cost.usd, openclaw.run.duration_ms, openclaw.message.*

Dashboards & Alerts

Langfuse (LLM 수준)

  • Agent Trace Explorer: 메시지 → LLM 호출 → 도구 실행 → 응답 체인
  • Token Usage: 모델별/시간별 토큰 소비
  • Cost Analytics: 일별/주별 비용 트렌드
  • Prompt/Completion Inspector: 실제 입출력 확인

Hubble (네트워크 수준)

  • 인터랙티브 서비스맵: Pod 간 HTTP 요청 흐름
  • L7 가시성: POST /v1/chat/completions → 200 OK (320ms)
  • DNS 쿼리 추적: 어떤 외부 API를 호출하는지

Grafana (시스템 수준)

  • Gateway Health: 업타임, 연결 수, 메모리, CPU
  • LiteLLM: 캐시 히트율, 요청 처리량, 지연시간
  • Pod/Node 리소스 사용량

Alert Rules

AlertCondition
예산 초과 임박LiteLLM budget > 80%
Gateway 다운Pod restart > 3 in 5min
LLM 응답 지연Latency > 5s
캐시 히트율 급락Cache hit < 30%
에러율Error rate > 5%

Verification Checklist

#CheckCommand / Action
1모든 Pod Runningkubectl get pods
2Gateway 상태openclaw status (port-forward 후)
3Auto-Router 라우팅LiteLLM UI에서 모델 목록 + 라우팅 확인
4서비스맵Hubble UI에서 Pod 간 HTTP 흐름 확인
5LLM traceLangfuse UI에서 프롬프트→도구→응답 trace
6시스템 메트릭Grafana 대시보드 확인
7Bedrock 감사CloudTrail 로그 확인
8라우팅 검증한국어/코딩/범용 질의 각각 테스트
9Spot 안정성kubectl get events 로 Karpenter 노드 전환 이벤트 검증, kubectl get nodeclaims 로 대체 노드 프로비저닝 확인

다음 단계