
SRE DevOps 팀원으로 AI를 맞이하기: 오픈 소스 Slack 기반 AI 에이전트 Reili 소개
요약
SRE 및 DevOps 엔지니어를 위한 오픈 소스 Slack 기반 AI 에이전트 Reili를 소개합니다. Datadog, GitHub, Slack 등 다양한 소스를 조사하여 조사 요약 보고서를 자동으로 생성합니다.
핵심 포인트
- Datadog, GitHub, Slack 등 다양한 데이터 소스 통합 조사
- Slack 멘션을 통한 명시적 지시 및 자율적 상황 감지 지원
- 조사 과정의 실시간 업데이트 및 결과 요약 보고 기능
- 소규모 개발 팀의 인프라 모니터링 및 대응 부담 완화
AI가 조사와 보고를 처리하게 하여, 여러분은 판단과 창조에 집중하세요
SRE (Site Reliability Engineering) 또는 DevOps 엔지니어로 일하다 보면, 반드시 긴급한 것은 아니지만 무시하기에는 위험해 보이는 알림들을 하루 종일 접하게 됩니다.
Datadog 알림일 수도 있고, AWS 또는 외부 서비스의 Deprecation (사용 중단) 공지일 수도 있으며, Slack에서 "이 에러가 좀 걱정스러워 보이네요"라고 올라오는 가벼운 메시지일 수도 있습니다.
이 모든 것들이 즉시 주요 장애(Incident)로 이어지는 것은 아닙니다. 그럼에도 불구하고 누군가는 최소한 한 번은 확인해야 합니다. 대시보드를 열고, 로그를 조사하고, 최근 변경 사항을 확인하고, 예전 노트를 찾아보고, 때로는 Slack에 "현재로서는 별다른 영향이 없는 것 같습니다. 계속 지켜보겠습니다"와 같은 답변을 남기기도 합니다.
그것이 큰 작업은 아닐지라도, 여러 소스를 넘나들며 맥락을 맞추고 결론에 도달해야 하는 작업은 엔지니어의 집중력을 꾸준히 소모시킵니다.
AI가 이러한 다양한 소스들을 조사하고, 정리하고, 핵심 사항을 전달하는 과정을 대신할 수 있을까요?
그 아이디어에서 시작하여, 저는 Slack에서 실행되는 오픈 소스 AI 에이전트인 Reili를 구축하게 되었습니다.
물론, 조직에 전담 SRE 팀이 있고 잘 구축된 On-call (당직) 로테이션이 있다면, 이러한 종류의 조사는 이미 당직자가 처리하고 있을 수도 있습니다.
하지만 모든 팀이 처음부터 그런 구조를 갖추고 있는 것은 아닙니다. 규모가 작은 개발 팀의 경우, 명확하게 지정된 On-call 담당자가 없거나 동일한 인원이 인프라와 애플리케이션 개발을 모두 책임지는 경우가 있습니다. 그런 경우, 알림과 작은 문제의 징후들은 종종 "누군가 눈치채면 확인하는" 일들이 됩니다.
그것이 바로 Reili가 지원하도록 설계된 영역입니다.
Reili란 무엇인가?
Reili는 SRE 및 DevOps 팀을 위한 AI 팀원입니다.
Reili는 Datadog, GitHub, Slack 스레드 기록 및 지식 베이스(Knowledge base)를 가로질러 조사한 후, 근거에 기반한 보고서를 Slack 스레드에 다시 게시합니다.
Reili를 멘션하여 지시하기
Reili에게 명시적으로 무언가를 요청하고 싶을 때는, Slack에서 Reili를 멘션하기만 하면 됩니다.
@Reili 이 알람을 조사해 줘.
조사가 시작되면, Reili는 스레드(thread)에 진행 상황을 업데이트합니다. 조사가 완료되면 조사 요약(investigation summary)을 보냅니다. 또한 취소(cancel) 버튼이 있어, 작업이 더 이상 필요하지 않은 경우 언제든지 중단할 수 있습니다.
멘션 없는 자율 응답 (Autonomous Responses Without Mentions)
Reili를 개발하며 제가 특히 집중했던 점 중 하나는, 누군가 @Reili라고 말할 때만 동작해서는 안 된다는 것이었습니다. Reili는 Slack 대화의 자연스러운 흐름 속에서, 무언가 처리할 가치가 있다고 판단되는 순간을 스스로 감지할 수 있어야 합니다.
Reili는 지정된 채널의 메시지를 모니터링합니다. 내부 메커니즘이 각 메시지를 평가하여 Reili가 응답해야 할지 여부를 결정합니다. 응답이 필요하다고 판단되면, Reili는 명시적으로 멘션되었을 때와 동일한 방식으로 동작합니다.
이를 통해 Reili는 알람 봇(alert bot)의 알림뿐만 아니라, 팀원의 **“이 에러는 뭐야?”**와 같은 일상적인 코멘트에도 응답할 수 있습니다.
예를 들어, 다음과 같이 팀 전체 채널을 설정할 수 있습니다:
[[channel.slack.channels]]
names = ["team-sre", "alerts-*", "incidents"]
auto_response = true
...
누군가 “이 에러는 좀 걱정스러워 보이는데”라고 쓰면, Reili는 문맥을 읽고 조사한 뒤 그 결과를 스레드에 게시합니다. @Reili를 입력할 필요도 없고, 다른 사람이 이를 인지하여 수동으로 처리할 필요도 없습니다.
“Reili가 어떤 메시지에 응답해야 하는가”에 대한 정책은 채널별로 자유롭게 정의할 수 있습니다. AWS Health의 서비스 중단(deprecation) 공지에만 응답하도록 하거나, 특정 사용자의 게시물에만 응답하도록 설정할 수 있습니다.
제가 Reili가 처리해주길 바라는 것은 사람이 결정을 내리기 전에 이루어지는 조사 단계입니다. 이를 위해 Reili는 다음과 같은 정보들을 읽고 정리합니다:
- Datadog 대시보드 (dashboards), 모니터 (monitors) 및 메트릭 (metrics)
- 관련 GitHub 저장소 (repositories)의 Diff 및 코드
- Slack 스레드 기록 및 과거 조사 노트
- 필요 시 esa 문서 및 웹 (the web)
- Slack으로 다시 게시되는 조사 결과
반면, Reili는 운영 환경 (production environments)을 직접 수정할 수 있는 권한은 없습니다. 조사는 Reili에게 위임할 수 있지만, 변경 및 복구에 관한 결정은 여전히 사람의 몫으로 남습니다. 이러한 분리는 의도적인 설계입니다.
Reili는 다음과 같은 작업은 수행하지 않습니다:
- 인프라 (Infrastructure) 변경
- 배포 (Deployments) 또는 자동 복구
- GitHub에 대한 쓰기 작업
실제 업무를 AI에게 위임하기 위한 설계
보안 및 권한 투명성
AI에게 운영 관련 정보에 대한 접근 권한을 부여하는 것에 대해 불안함을 느끼는 것은 매우 자연스러운 일입니다. 처음부터 Reili는 무엇을 안전하게 위임할 수 있는가라는 질문을 중심으로 설계되었습니다.
셸 실행 환경 없음 (No shell execution environment)
Reili는 셸 (shell) 접근 권한이 없습니다. 임의의 명령어를 실행할 수 없기 때문에 공격 표면 (attack surface)이 더 작으며, 셸 명령어를 통해 의도하지 않은 작업이 발생할 수 없습니다.
읽기 전용 접근 (Read-only access)
Datadog과 GitHub 모두에 대해 Reili는 읽기 권한 (read permissions)만 사용합니다. 대시보드를 읽을 수는 있지만, 모니터를 수정하거나 인프라를 조작할 수는 없습니다.
사용자가 권한을 제어
Datadog 및 GitHub와 같은 각 커넥터 (connector)에 대해 Reili가 요구하는 권한은 명시적으로 문서화되어 있습니다. 실제로 부여되는 권한은 Slack App 및 GitHub App 설정을 통해 사용자가 결정합니다. 호스팅된 AI 서비스에서 흔히 접하게 되는, 제공자가 정의한 권한 번들 (permission bundle)을 그대로 수락할 필요가 없습니다.
Reili는 오픈 소스 (open source)이므로, 코드를 직접 검사하여 정확히 어떤 동작을 하는지 확인할 수 있습니다.
LLM 제공자 독립성 (LLM-provider independent)
OpenAI, Anthropic, AWS Bedrock 또는 Vertex AI Gemini 중에서 AI 백엔드를 선택할 수 있습니다. Reili는 특정 제공업체에 종속되지 않으므로, 팀이 이미 신뢰하고 계약을 맺고 있는 제공업체를 계속 사용할 수 있습니다. 또한 가격과 성능 변화에 따라 제공업체를 전환할 수도 있습니다.
지속적인 운영을 위해 구축됨
만약 AI 에이전트를 도입하기 위해 전용 데이터베이스를 설정하고, 작업 큐 (job queue)를 관리하며, 퍼블릭 엔드포인트 (public endpoint)를 준비하고, 상태 관리 (state management)를 유지해야 한다면, 시작하기도 전에 부담스럽게 느껴질 수 있습니다.
Reili는 이를 방지하도록 설계되었습니다. 데이터베이스가 없는 상태 비저장 (stateless) 아키텍처를 가지며, Slack App에 연결된 단일 컨테이너로 실행됩니다. Slack Socket Mode를 사용하여 WebSocket을 통해 연결되므로, 인터넷에 어떠한 인바운드 포트 (inbound port)도 노출할 필요가 없습니다.
에이전트의 메모리 또한 Slack 메시지를 통해 기록되고 참조됩니다. Reili는 과거의 조사 결과를 Slack에 남겨두고 이를 향후 조사에서 재사용합니다. 별도의 전용 저장소를 준비할 필요가 없습니다.
설정 (Setup)
Reili는 Docker, Slack App, Datadog API 키, 그리고 GitHub App 자격 증명만 있으면 실행할 수 있습니다.
docker run --rm \
--env-file .env \
-v "$(pwd)/reili.toml:/home/reili/reili.toml:ro" \
...
팀이 이미 사용 중인 제공업체에 따라 OpenAI, Anthropic, AWS Bedrock 또는 Vertex AI Gemini 중에서 AI 백엔드를 선택할 수 있습니다.
상세한 설정 지침은 README에서 확인할 수 있습니다.
마치며
경보 조사 (Alert investigation)와 영향 평가 (impact assessment)는 항상 눈에 띄는 작업은 아니지만, 누군가는 반드시 해야 하는 일입니다.
많은 경우, 첫 번째 단계는 상황을 파악하고, 관련이 있을 법한 정보를 읽고, 인간이 의사 결정을 내리는 데 사용할 수 있는 형태로 정리하는 것입니다.
Reili를 사용하면 그 부분을 AI 팀원에게 위임할 수 있습니다.
Reili는 Slack에서의 경보 (alerts), 외부 서비스의 지원 중단 공지 (deprecation notices), 그리고 "이 에러 좀 걱정스러워 보이는데"와 같은 일상적인 코멘트에 반응합니다.
그러한 작은 신호들을 포착하고, 조사하며, 증거와 함께 보고함으로써, Reili는 엔지니어들이 "조사를 시작하는 것"에 덜 집중하고 "보고서를 바탕으로 무엇을 할지 결정하는 것"에 더 집중할 수 있도록 돕습니다.
Reili는 현재 Datadog, GitHub, esa, 그리고 웹을 정보 소스로 사용하고 있으며, 앞으로 더 많은 커넥터 (connectors)를 추가할 계획입니다. 팀에서 사용하는 외부 서비스의 수가 늘어남에 따라, Reili가 조사할 수 있는 범위 또한 함께 확장될 것입니다.
한번 사용해 보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기