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

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 키를 직접 코드에 하드코딩하는 대신, 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를 통해 더 빠르고 정확한 근본 원인 분석이 가능하다.
- 엔지니어 역량 상향 평준화: 신입 엔지니어도 숙련된 전문가의 노하우를 활용하여 문제를 해결할 수 있다.
- 지속적인 학습 및 성장: 모든 인시던트 해결 경험이 자산화되어 시스템이 스스로 발전한다.
- 통합 플랫폼: 흩어져 있던 기술 문서, 런북, 과거 인시던트 정보가 단일 플랫폼에서 관리되고 활용된다.
지금 바로 여러분의 조직에 잠들어 있는 지식을 깨워 차세대 관찰 가능성 플랫폼을 구축해보길 바란다.