안녕하세요! 오늘은 최근에 완성한 마이크로서비스 기반 로그 및 트레이스 분석 시스템의 개발 과정과 아키텍처에 대해 공유하려고 합니다. 특히 Model Context Protocol(MCP)을 활용한 접근 방식이 어떻게 효율적인 모니터링 솔루션으로 이어졌는지 설명드리겠습니다.
본 시스템은 마이크로서비스 아키텍처 환경에서 발생하는 로그와 트레이스 데이터를 통합적으로 수집하고, 분석하는 플랫폼입니다. 여기에 대규모 언어 모델(LLM)을 접목해 복잡한 시스템 로그와 트레이스 데이터를 자연어로 해석하고, 운영자가 직관적으로 이해할 수 있도록 지원합니다.
아래는 시스템 전반의 구성 요소와 데이터 흐름을 간단한 블록 다이어그램 형식으로 표현한 이미지입니다.
모니터링 시스템을 개발하면서 가장 먼저 고민했던 것은 "컴포넌트 간 상호작용을 어떻게 일관되게 관리할 것인가?"였습니다. 이에 도입한 것이 Model Context Protocol(MCP)입니다.
MCP와 LangGraph 간, 그리고 MCP와 API 서버 간 통신에는 JSON-RPC 2.0을 사용했습니다.
method
, params
, id
가 명확하게 구조화{
"jsonrpc": "2.0",
"method": "query_loki",
"params": {
"query": "{service=\"order-service\"}",
"start": "2023-05-01T10:00:00Z",
"end": "2023-05-01T11:00:00Z"
},
"id": 1
}
"지난 3시간 동안 order-service에서 발생한 에러 로그 보여줘"
LOG_QUERY
로 인식, service=\"order-service\"
및 시간 범위 추출"product-service의 API 호출 지연이 있는 트레이스 보여줘"
TRACE_QUERY
로 분류하고 쿼리 수행"order-service의 에러 로그와 관련된 트레이스를 찾아서 분석해줘"
services:
langgraph:
build: ./langgraph
ports:
- "8001:8001"
environment:
- GOOGLE_API_KEY=${GOOGLE_API_KEY}
- MCP_URL=http://loki-mcp:8003
- TEMPO_MCP_URL=http://tempo-mcp:8004
loki-api:
build: ./loki-api
ports:
- "8002:8002"
environment:
- LOKI_URL=${LOKI_URL}
loki-mcp:
build: ./loki-mcp
ports:
- "8003:8003"
environment:
- LOKI_API_URL=http://loki-api:8002
tempo-api:
build: ./tempo-api
ports:
- "8005:8005"
environment:
- TEMPO_URL=${TEMPO_URL}
tempo-mcp:
build: ./tempo-mcp
ports:
- "8004:8004"
environment:
- TEMPO_API_URL=http://tempo-api:8005
streamlit:
build: ./streamlit
ports:
- "8501:8501"
environment:
- LANGGRAPH_URL=http://langgraph:8001
이상으로 LLM 기반 마이크로서비스 로그/트레이스 분석 시스템에 대한 개발기를 마칩니다. MCP의 도입과 JSON-RPC 구조화 통신 방식이 모니터링의 직관성과 확장성을 크게 향상시켰습니다.