Skip to main content
Mandacode mandacode
Meerkat: AI Agent로 로그 분석의 패러다임을 바꾸다
·
Go Observability OpenTelemetry RAG

Meerkat: AI Agent로 로그 분석의 패러다임을 바꾸다

규칙 기반 알림의 한계를 넘어 AI Agent가 직접 인프라를 분석하는 미어캣의 설계 철학과 구현 이야기

문제의식

클러스터를 운영하면서 발생하는 오류들, 매번 로그를 확인하고 분석하여 오류의 원인을 찾거나 심지어 오류조차 탐지가 안 되는 경우가 많았습니다. 또한 개인이 클러스터를 운영하면서 개발까지 하려니 시간 효율이 떨어진다는 것을 느꼈습니다.

미어캣 프로젝트는 이 문제를 해결하고자 시작하였습니다. 로그를 직접 찾아보지 않아도 똑똑하게 분석해 주고 정리까지 완벽하게 해주는 AI Agent가 있다면 클러스터 운영 비용을 감소시킬 수 있다고 보았습니다.

핵심 설계 1: RAG 기반 로그 벡터 저장

미어캣은 Analyzer와 Vectors라는 두 서비스로 구성됩니다.

Analyzer는 데이터들을 취합하여 에러 원인을 분석하고, Vectors는 OpenTelemetry 를 통해 전달된 로그들을 의미 있는 데이터로 저장하는 역할을 합니다.

Vectors는 로그를 단순히 저장하지 않습니다. OpenTelemetry 로 들어온 로그를 템플릿 추출로 중복을 제거하고, 임베딩 모델을 거쳐 벡터화한 뒤 Milvus와 같은 벡터 데이터베이스에 저장합니다. 한 서비스에서 중복되는 에러 로그를 방지하고 벡터화된 데이터를 사용하여 검색 효율을 크게 개선합니다.

graph LR
    subgraph "데이터 흐름"
        App[애플리케이션] -- OTLP Logs --> Vectors
        Vectors -- 임베딩 저장 --> Milvus[(Milvus)]
        Analyzer -- 의미 검색 --> Vectors
    end

핵심 설계 2: Tool 기반 Metrics/Logs 분석

Analyzer는 에러에 대한 원인을 알아서 분석하기 위해 OpenCode/Claude와 같은 코딩 에이전트의 Tool과 같은 개념을 이용하였습니다. Vectors, Prometheus 등 외부 의존성과 통신하며 원인을 분석할 수 있도록 인터페이스를 제작하여 루프 안에서 동적으로 원인을 조사할 수 있도록 개발하였습니다.

sequenceDiagram
    participant User as 사용자
    participant Analyzer as Analyzer
    participant LLM as LLM
    participant Tools as 도구들

    User->>Analyzer: 분석 요청
    Analyzer->>LLM: 컨텍스트 + 사용 가능한 도구 목록

    loop 에이전트 루프
        LLM-->>Analyzer: 도구 호출 또는 최종 답변

        alt 도구 호출
            Analyzer->>Tools: Prometheus/Loki/Vectors 쿼리
            Tools-->>Analyzer: 결과
        else 최종 답변
            Analyzer-->>User: 분석 완료
        end
    end

운영 환경에서의 고려

시스템의 특성상 Analyzer는 각 애플리케이션으로부터 오는 오류 및 반복되는 오류들로 인해 단기간에 많은 요청을 받게 될 수 있습니다. 이에 따라 단일 서버 동기 요청으로 처리할 경우 처리량 저하, 타임아웃과 같은 문제가 발생할 수 있습니다.

이 부분을 워커 풀로 해결하고자 하였습니다. 병렬 처리를 통한 처리 효율을 높이고 모든 고루틴이 LLM 응답을 기다리는 치명적인 문제를 방지할 수 있습니다. 확장성 측면에서도 Analyzer를 여러 개로 확장하여도 워커 풀이 서비스 앞단에서 처리를 조절하는 기능을 해주며 자연스러운 확장이 가능해집니다.

개선의 여지

미어캣을 제작하며 로그 모니터링 서비스 특징을 유지하면서 외부 인프라 서비스들과 느슨한 결합을 만들기 위해 노력하였습니다. 그럼에도 OpenTelemetry나 Prometheus, Loki, ELK 등 각기 다른 책임, 프로토콜 및 요청/응답 스키마가 달라 여러 환경에서 적용하기에 어려움이 있습니다. 따라서 향후 다양한 스펙에 대한 업데이트가 이루어져야 하며, 다양한 인프라 서비스들과 환경에 적용할 수 있도록 하는 것이 목표입니다.

또한 로그 또는 메트릭 검색에 있어서 해당 서비스에서 요구하는 문법이 다르거나 복잡한 경우가 있습니다. 이에 대하여 Tool을 더 명확한 구조로 만들어 에이전트가 쉽게 이해할 수 있는 시스템을 만드는 것이 중요하다고 생각합니다.

마치며

여러 외부 서비스를 고려하며 진행된 프로젝트로 아직은 불안정한 형태의 프로젝트입니다. 하지만 미어캣 서비스를 제작하고 운영해 오며 인프라 운영 효율을 극적으로 향상할 수 있었습니다. 직접 로그를 분석하고 원인을 파악하는 과정을 해결하며 AI Agent 기반 인프라 운영 시스템의 가능성 또한 확인할 수 있었습니다.