기술

GenAI Connector로 Elastic Observability에 조직의 지식 주입하기

스타스토리. 2025. 7. 1. 10:17
반응형
핵심 요약: 본 문서는 Elastic Observability AI Assistant를 조직의 내부 데이터(런북, 기술 문서, 과거 인시던트)와 통합하여 차세대 지능형 관찰 가능성 플랫폼을 구축하는 방법을 상세히 다룬다. Knowledge Base 설계, GenAI Connector 설정, 자동화된 지식 수집, AI 기반 하이브리드 검색, 그리고 해결된 인시던트로부터 학습하는 동적 업데이트 파이프라인 구축까지 전 과정을 안내한다.

Elastic Observability의 AI Assistant는 그 자체로 강력한 도구이지만, 조직 내부의 축적된 지식과 결합될 때 그 잠재력이 폭발적으로 증가한다. 일반적인 LLM이 제공할 수 없는, 우리 조직만의 컨텍스트를 이해하는 AI를 구축하는 것이 핵심이다. 이 가이드는 기술 문서, 런북, 과거 인시던트 해결 기록을 Knowledge Base로 구축하고, GenAI Connector를 통해 외부 LLM과 연동하여 모든 엔지니어가 조직 최고의 전문가처럼 문제를 해결할 수 있는 지능형 근본 원인 분석(RCA) 시스템을 구축하는 방법을 제시한다.

1단계: 지능형 Knowledge Base 설계 및 구축

성공적인 Knowledge Base의 첫걸음은 잘 설계된 인덱스에서 시작된다. 키워드 검색을 위한 커스텀 분석기와 의미 검색을 위한 벡터 필드를 모두 포함하는 것이 중요하다.

1.1. 런북 및 기술 문서 인덱스

기술 용어 동의어 처리, 벡터 필드 등을 포함한 인덱스 매핑을 정의한다.

PUT knowledge-base-runbooks
{
  "settings": {
    "analysis": {
      "analyzer": {
        "technical_content_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase", "stop", "snowball", "technical_synonyms"]
        }
      },
      "filter": {
        "technical_synonyms": {
          "type": "synonym",
          "synonyms": ["cpu,processor", "memory,ram", "db,database", "api,endpoint"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": { "type": "text", "analyzer": "technical_content_analyzer" },
      "content": { "type": "text", "analyzer": "technical_content_analyzer" },
      "content_vector": {
        "type": "dense_vector",
        "dims": 1536,
        "index": true,
        "similarity": "cosine"
      },
      "service_names": { "type": "keyword" },
      "tags": { "type": "keyword" }
    }
  }
}

1.2. 과거 인시던트 인덱스

과거의 문제 해결 기록은 미래의 문제를 해결하는 데 가장 중요한 자산이다. 유사 인시던트 검색을 위해 벡터 필드를 포함하여 설계한다.

PUT knowledge-base-incidents
{
  "mappings": {
    "properties": {
      "incident_id": { "type": "keyword" },
      "description": { "type": "text", "analyzer": "technical_content_analyzer" },
      "description_vector": {
        "type": "dense_vector",
        "dims": 1536,
        "index": true,
        "similarity": "cosine"
      },
      "root_cause": { "type": "text" },
      "solution": { "type": "text" },
      "affected_services": { "type": "keyword" }
    }
  }
}

2단계: GenAI Connector 및 추론 모델 설정

Elasticsearch와 외부 LLM(예: Azure OpenAI)을 연결하기 위해 GenAI Connector와 Inference Endpoint를 설정한다.

📌 API 키 관리
실제 프로덕션 환경에서는 API 키를 직접 코드에 하드코딩하는 대신, Elasticsearch Keystore나 환경 변수 등 안전한 방법을 사용하여 관리해야 한다.
# 1. GenAI Connector 설정
PUT _connector/azure-openai-kb-connector
{
  "name": "Azure OpenAI Knowledge Base Connector",
  "service_type": "azureopenai",
  "configuration": { "api_key": "...", "resource_name": "...", "deployment_id": "..." }
}

# 2. Embedding 모델 설정
PUT _inference/text_embedding/azure-openai-embeddings
{
  "service": "azureopenai",
  "service_settings": { "api_key": "...", "deployment_id": "text-embedding-ada-002" }
}

# 3. Completion 모델 설정
PUT _inference/completion/azure-openai-completion
{
  "service": "azureopenai",
  "service_settings": { "api_key": "...", "deployment_id": "gpt-4-deployment" }
}

3단계: 자동화된 지식 수집 및 임베딩

Git 저장소에 저장된 마크다운 형식의 런북을 주기적으로 수집하고, 임베딩을 생성하여 Elasticsearch에 인덱싱하는 자동화 파이프라인을 구축한다.

# Python을 이용한 자동 인덱싱 파이프라인
import os
from elasticsearch import Elasticsearch
from pathlib import Path

class KnowledgeBaseIngester:
    def __init__(self, es_client, embedding_model_id):
        self.es = es_client
        self.embedding_model_id = embedding_model_id

    def ingest_runbooks_from_git(self, repo_path, index_name="knowledge-base-runbooks"):
        for file_path in Path(repo_path).rglob("*.md"):
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()
            
            # YAML frontmatter에서 메타데이터 추출
            metadata = self._extract_metadata(content) 
            
            # Inference API를 호출하여 콘텐츠 벡터 생성
            embedding_response = self.es.inference.inference(
                inference_id=self.embedding_model_id,
                body={"input": content}
            )
            content_vector = embedding_response['text_embedding'][0]['embedding']
            
            # Elasticsearch에 문서 인덱싱
            doc = {**metadata, "content": content, "content_vector": content_vector}
            self.es.index(index=index_name, body=doc, id=str(file_path))

# 사용 예제
es = Elasticsearch(...)
ingester = KnowledgeBaseIngester(es, "azure-openai-embeddings")
ingester.ingest_runbooks_from_git("/path/to/your/runbooks-repo")

4단계: AI 기반 하이브리드 검색 및 요약

사용자의 질문이나 인시던트 컨텍스트가 주어졌을 때, 의미 기반의 벡터 검색과 정확성 높은 키워드 검색을 결합한 하이브리드 검색을 수행한다. 검색된 결과는 다시 LLM에 전달되어 사용자에게 맞춤형 요약과 해결책을 제시한다.

class IntelligentKnowledgeSearch:
    def search_relevant_knowledge(self, query, context=None):
        # 1. 쿼리 임베딩 생성
        query_vector = self._get_embedding(query)
        
        # 2. 하이브리드 검색 쿼리 구성 (벡터 + 키워드)
        search_body = {
            "query": {
                "bool": {
                    "should": [
                        { "script_score": { "query": {"match_all": {}}, "script": { "source": "cosineSimilarity(params.query_vector, 'content_vector') + 1.0", "params": {"query_vector": query_vector} }}},
                        { "multi_match": { "query": query, "fields": ["title^3", "content"] }}
                    ],
                    "filter": self._create_context_filters(context) # 서비스 이름, 에러 타입 등으로 필터링
                }
            }
        }
        
        # 3. 검색 실행
        search_response = self.es.search(index="knowledge-base-*", body=search_body)
        
        # 4. LLM을 통한 검색 결과 요약 및 답변 생성
        ai_summary = self._summarize_with_ai(search_response, query)
        return ai_summary

5단계: 통합 근본 원인 분석(RCA) 및 자연어 알람

새로운 인시던트가 발생했을 때, 시스템은 자동으로 관련 런북과 과거 유사 인시던트를 검색하고, 이를 바탕으로 LLM이 종합적인 분석을 수행하여 사람이 이해하기 쉬운 '자연어 알람'을 생성한다.

[자연어 알람 예시]
🚨 Critical: 'payment-service' DB 연결 장애 발생
[What] 결제 서비스에서 DB 연결 타임아웃 에러율이 45%로 급증했습니다.
[Why] 과거 유사 인시던트(INC-2024-0156) 분석 결과, 트래픽 급증으로 인한 DB 연결 풀 고갈이 유력한 원인입니다.
[Impact] 현재 모든 결제 기능이 실패하고 있습니다.
[Action] 즉시 '데이터베이스 연결 문제 해결 가이드' 런북에 따라 연결 풀 상태를 확인하고, 1단계 조치(연결 풀 확장)를 수행해 주세요.

6단계: 지속적인 학습 (피드백 루프)

인시던트가 해결되면, 그 해결 과정과 근본 원인, 교훈 등을 AI가 요약하여 새로운 지식으로 'knowledge-base-incidents' 인덱스에 자동으로 추가한다. 이로써 시스템은 시간이 지남에 따라 더욱 똑똑해지는 자기 학습(Self-Learning) 능력을 갖추게 된다.

결론

Elastic Observability AI Assistant와 Knowledge Base의 통합은 단순한 정보 검색을 넘어, 조직의 집단 지성을 활용하는 '지능형 운영 동반자'를 만드는 과정이다. 이 시스템을 통해 얻을 수 있는 핵심적인 이점은 다음과 같다.

  • 지능형 RCA: 조직의 컨텍스트를 이해하는 AI를 통해 더 빠르고 정확한 근본 원인 분석이 가능하다.
  • 엔지니어 역량 상향 평준화: 신입 엔지니어도 숙련된 전문가의 노하우를 활용하여 문제를 해결할 수 있다.
  • 지속적인 학습 및 성장: 모든 인시던트 해결 경험이 자산화되어 시스템이 스스로 발전한다.
  • 통합 플랫폼: 흩어져 있던 기술 문서, 런북, 과거 인시던트 정보가 단일 플랫폼에서 관리되고 활용된다.

지금 바로 여러분의 조직에 잠들어 있는 지식을 깨워 차세대 관찰 가능성 플랫폼을 구축해보길 바란다.

반응형