AI 에이전트가 메트릭 이름을 환각(hallucinating)하는 것을 막기 위해 Prometheus MCP 서버를 구축하다
요약
본 글은 AI 에이전트가 실제 존재하지 않는 메트릭 이름을 지어내는 '환각(hallucination)' 문제를 해결하기 위해 Prometheus용 MCP(Model Context Protocol) 서버인 prom-mcp를 개발한 내용을 다룹니다. 이 도구는 단순 API 접근을 넘어, 트리아지 과정에 최적화된 세 가지 기능을 제공합니다.
핵심 포인트
- prom-mcp는 에이전트의 환각 루프를 근본적으로 차단합니다.
- 쿼리 전 메트릭 발견 기능으로 실제 존재하는 데이터를 확인하게 합니다.
- 경고 발생 시 규칙 정의와 함께 상세한 추론 정보를 제공합니다.
만약 AI 에이전트를 실시간 장애 상황에 투입해 본 적이 있다면, 그 실패 모드를 목격했을 것입니다. 즉, 그 에이전트는 그럴듯하게 들리는 메트릭을 지어내고(invents), 이를 쿼리하고, 빈 결과를 얻은 뒤, 또 다른 것을 자신 있게 지어냅니다. Prometheus HTTP API는 LLM에게 좋은 인터페이스가 아닙니다. 강력하지만, 에이전트가 추측하기 전에 실제로 어떤 것이 존재하는지 발견하도록 도와주는 것이 아무것도 없습니다.
저는 프로덕션 엔지니어링 분야에서 일하고 있기 때문에, 제가 원하는 에이전트의 인터페이스인 prom-mcp를 구축했습니다. 이는 Prometheus용 MCP(Model Context Protocol) 서버이며 Go 언어로 작성되었습니다.
에이전트에게 제공하는 기능
순수한 API 접근보다는 트리아지(triage)에 맞춰 설계된 세 가지 기능입니다:
- 읽기 쉬운 출력을 가진 PromQL 쿼리. JSON 형태의 벽처럼 나오는 것이 아니라, 마치 트리아지 노트처럼 보이는 즉시 및 범위 쿼리 결과.
- 경고 설명 (Alert explanations). 경고가 발생했을 때, 에이전트는 해당 경고와 그것을 생성한 규칙 정의(rule definition)를 함께 받습니다. 여기에는 표현식(expression), 레이블(labels), 주석(annotations) 등이 포함되어 있어 실제 상태에 대해 추론할 수 있게 됩니다.
- 쿼리 전 발견 (Discovery before querying). 시리즈 및 레이블 발견 도구는 에이전트가 실제로 존재하는 메트릭을 확인할 수 있게 하여, 환각 루프를 근원에서 차단합니다.
여기에 더해, 에이전트가 장애 상황을 순서대로 따라가도록 안내하는 트리아지 프롬프트도 제공됩니다: 무엇이 발생했는지, 언제부터 발생했는지, 피해 범위(blast radius)는 어디인지.
설치
의존성이 없고 단일 Go 바이너리이며, stdio 전송을 사용합니다:
claude mcp add prom -- prom-mcp
Prometheus가 http://localhost:9090에 있지 않다면 PROM_URL 환경 변수를 설정하세요. 서버가 준비되지 않았다면, prom-mcp demo를 실행하여 더미 데이터(fixtures)를 기반으로 작동하는 것을 볼 수 있습니다. Claude Desktop 사용자는 GitHub 릴리스에서 MCPB 번들을 가져올 수 있으며, 공식 MCP Registry에는 io.github.aniketatgithub/prom-mcp로 등록되어 있습니다.
레포지토리: https://github.com/aniketatgithub/prom-mcp
피드백을 받고 싶은 부분
이 도구의 형태(tool shapes)에 대한 것입니다. 만약 실제 인프라를 대상으로 에이전트를 실행한다면, 장애 상황 중간에 여러분의 메트릭 스택에게 어떤 질문들을 할 수 있기를 바라십니까? 그 목록이 저의 로드맵입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기