
이번에는 분석용 AI Agent를 구축한 내용을 정리해보겠습니다.

📌 주요 포인트
- 기존 파이프라인 재활용 (GitOps, Alert)
- SSOT(Single Source Of Truth): GitHub
- AWS ECR 사용
우선 에이전트 개발을 위한 추가 파이프라인을 구축하지 않고자 했습니다.(관리 포인트를 줄이고자)
앞서 구축한 GitOps 파이프라인과 Alert 파이프라인을 재활용 하는 방법을 선택했습니다.
또 이번에도 GitHub 소스 코드를 단일 진실 공급원으로 두어 관리 포인트를 줄였습니다.
마지막으로 에이전트 개발 코드를 이미지로 관리하고자 AWS의 Elastic Container Registry(ECR)을 도입했습니다.
사진에서 볼 수 있듯이 ArgoCD core 가 ECR을 바라보지 못하는(변경사항 등을 감지하지 못하는) 문제가 있었습니다.
이는 ArgoCD core가 Git만 보도록 의도적으로 설계 되어 있기 때문이었습니다.
📌 참고 문서 (설계 의도)
https://github.com/argoproj/argo-cd/blob/master/docs/proposals/headless-argocd.md#provide-an-easy-way-to-deploy-argo-cd-without-apiui
📌 참고 문서 (매니페스트)
https://github.com/argoproj/argo-cd/blob/master/manifests/core-install.yaml
(desired state를 넣는 통로가 Git에 연결된 Application/ApplicationSet CRD 뿐이므로 구조적으로 Git만 바라보는 형태)
ArgoCD의 Image Updater 라는 컴포넌트를 추가 구축을 하면 이 문제를 해결할 수 있었습니다.
하지만 부트캠프 당시 프로젝트 규모 및 추가 구축에 드는 리소스를 고려해보았습니다.
✅ 해당 컴포넌트를 추가 구축하지 않고 CI 단계에서 ArgoCD가 변경사항을 감지할 수 있도록 values.yaml 파일 내 image.tag 한 줄만 자동으로 변경해주는 자동화 봇 PR을 구축했습니다.
(프로젝트 당시 비교를 위한 표)

에이전트 개발 코드를 병합하면, CI가 돌 때 자동으로 봇 PR이 생성됩니다. 그 내용은 사진과 같이 ArgoCD가 감지할 수 있는 values.yaml 파일의 image.tag 를 자동으로 변경해줍니다. 개발자(나)는 에이전트 코드 병합과 동시에 올라오는 이미지 태그 변경 PR을 병합하기만 하면 되는 플로우로 위 문제를 해결했습니다.
신속한 알람(Alert)과 에이전트 분석 내용은 워크플로우를 분리
Workflow를 간단하게 도식화 해보았습니다.
loki.fetch() : +-15m Log 수집vm.fetch() : +- 15m Metric 수집runbook.find() : 매칭되는 runbook 탐색
위 과정을 통해 온프레미스 노드에서 이상 신호 감지 시 즉시 알람이 발생하고 (인프라 리소스 감지 봇 - Slack 댓글), 이어서 해당 댓글의 스레드에 분석용 AI Agent(AI 분석 봇 - Slack 댓글의 스레드)가 작성한 내용이 작성됩니다.
🤔(나): 근데 AI한테 "한 번"만 물어보는걸 '에이전트'라고 할 수 있을까? 또 분석 내용과 해결 가이드라인을 조금 더 자세하게 알려줄 수는 없을까?

'Agentic Loop' 라는 용어가 있더군요?! 용어를 정의한 곳마다 약간의(?) 의미 차이가 있었지만, 저는 'Agent가 스스로 판단하여 반복적으로 작업하고 만족하는 결과 도출 시 반복 작업 종료'를 목표로 고도화를 진행해보았습니다.
PromQL : VictoriaMetrics의 시계열 메트릭 데이터를 조회/집계/연산하기 위한 쿼리 언어LogQL : Loki에서 로그를 라벨로 필터링하고 메트릭처럼 집계할 수 있게 해주는 로그 쿼리 언어list_recent_alerts : Alertmanager에서 최근 발생했거나 현재 활성 상태인 alert 목록을 조회하는 함수Bedrock 첫 호출 시 위에서 수집한 1차 컨텍스트와 Tool Set을 함께 전달합니다.
이때 Agent가 스스로 판단하기에 답변을 할 수 있다면 즉시 답변을 보내고, 답변 결과가 부족하다고 판단된다면 Tool을 호출하여 결과를 추가하며 반복적인 작업(loop)을 하게 됩니다.
이렇게 개선된 답변을 Slack 댓글의 스레드에 남기게 되는 구조입니다.
🤔(나): 에이전트가 스스로 판단하여 반복적인 작업을 하는 것은 좋은데,, 너무 많은 권한을 주는건 아닐까? (
감히 AI 주제에?)
이러한 고민을 하며 안정망 을 만들어야겠다(?) 라는 생각이 들었고, 나름의 안정 장치들을 마련해보았습니다.


Observability 회고
이렇게 부트캠프의 최종 프로젝트를 잘 마무리하게 되었습니다. 애플리케이션 레벨이 아닌 온프레미스 노드의 리소스를 관측은 이번에 처음 해보았는데 고려해야하는 부분들이 기존과 달라서 학습에 시간을 꽤 많이 쏟았던 것 같습니다.
어떻게 보면 옵저버빌리티에서 가장 기본적이고, 기초적인 내용을 구축한 것 같은데 이번 기회에 제대로 구축하길 잘한 것 같습니다.
또 처음 써보는 다양한 오픈소스들(OpenTelemetry, VictoriaMetrics, Loki, ArgoCD 등)이 있었는데 역시 클라우드 네이티브 생태계는 강력하고 재밌는 기술들이 참 많은 것 같습니다. 특히, ArgoCD와 OpenTelemetry는 평소에 관심을 갖고 있었는데 이번 기회에 나름 잘(?) 써보았기에 좋은 경험이었습니다.(이제 홈랩에 붙이면 딱일 것 같습니다.ㅎㅎ)
협업 회고
음,, 많이 힘들었습니다. 이미 어느정도 진행이 된 프로젝트가 아닌, 아이디어 기획부터 시작하는 프로젝트이다보니 개발 외적으로 많은 에너지가 쓰인 것 같습니다. 주제 선정에만 4주가 걸렸던 것 같고(?).. 개발에 익숙하지 않은 팀원들도 있었기에 팀원 간의 작업 속도나 기술적인 소통에도 큰 어려움이 많았던 것 같습니다.
최대한 이를 줄여보고자 팀 내 기술 세미나도 진행해보고, 팀원 간 공유를 위한 문서화에 많은 시간을 쏟았던 것 같습니다..(모두에게 도움이 되었던 순간이었으면 좋겠네요..ㅎㅎ)
새로운 협업 툴도 많이 사용하게 되었는데 대표적으로 Jira 와 Confluence 를 깊게 사용해볼 수 있어서 좋았습니다. (혼자 Jira를 써보았을 때는 큰 효과를 못봤습니다.ㅋㅋ)개인적으로 시간이 더 주어졌더라면, 많은 것들을 구축해보았을텐데 프로젝트 기간이 짧았다는 점에 아쉬움이 많이 남는 것 같습니다.
마지막으로,취업에 성공했음에도끝까지 프로젝트에 함께 참여해준 여*환 에게 매우매우 많이 고맙다는 말을 전하고 싶습니다.ㅎㅎ
https://github.com/TEAM-High-Cloud/Observability
(ReadME 작성도 해야겠네요...)
최고의 동료 Claude.. 둘이서 많은 작업을 했습니다. ㅋㅋ