GitLab의 Root Cause Analysis 기능은 실패한 CI/CD 파이프라인의 근본 원인을 파악하고, 해결 방법을 제안하는 인공지능(AI) 기반 기능입니다. 이 기능은 GA(Generally Available) 버전으로, GitLab AI 어시스턴트인 GitLab Duo Chat에서 이용할 수 있습니다. 사용자는 GitLab Duo Chat에 로그를 분석해 CI/CD job 실패의 근본 원인을 파악하도록 요청할 수 있죠. 이 기능은 현재(2024년 9월 30일 기준) Anthropic의 대규모 언어 모델(LLM)인 Claude 3.5 Sonnet을 사용합니다.
그동안 CI/CD job 실패와 에러의 근본 원인, 해결 방법을 찾기 위해 구글링이나 인터넷 커뮤니티 검색에 시간을 쓴 개발자, 엔지니어가 많았는데요. GitLab의 Root Cause Analysis 기능을 사용하면 이러한 수고를 크게 줄이고, 문제를 빨리 해결할 수 있습니다. 이 글에서는 Root Cause Analysis 기능의 개념과 사용 방법, 동작 방식을 살펴보고, 엔지니어 관점에서 기능을 논평하고자 합니다.
Root Cause Analysis란?
Root Cause Analysis 영상. 출처=GitLab
GitLab의 Root Cause Analysis 기능은 로그를 분석해 CI/CD job 로그 실패의 근본 원인을 파악하고 해결 방법을 제안합니다. 이 기능은 AI 기반 도움으로 로그를 분석하고 수정안을 제안해 조직이 소프트웨어를 더 안전하고, 더 빠르게 릴리즈하도록 지원합니다.
일반적으로 파이프라인이 실패하는 이유는 여러 가지입니다. 코드의 구문 오류, 파이프라인이 의존하는 의존성 누락, 빌드 프로세스 도중 테스트 실패, Kubernetes와 Infrastructure as Code(IaC) 배포 시간 초과가 그 예죠. 이러한 실패 원인을 정확히 확인하고, 문제를 해결하려면 파이프라인에서 생성된 로그를 철저히 검토해야 합니다.
그러나 로그 데이터는 수동 분석하려면 어렵고, 시간이 오래 걸립니다. 이는 다양한 잠재적 실패 원인이 있는 애플리케이션 로그와 시스템 메시지로 구성됐죠. 로그는 복잡하고, 구조화되지 않은 게 특징입니다.
생성형 AI를 로그 분석에 활용하면 파이프라인 오류를 확인하고, 문제의 근본 원인을 파악하며, 수정하는 시간을 크게 줄일 수 있습니다. 또 파이프라인 수정에 필요한 전문 지식을 간편하게 얻을 수 있죠. GitLab의 Root Cause Analysis 기능은 생성형 AI 기반 기능으로 이러한 점에서 유용합니다.
GitLab은 Root Cause Analysis 기능을 연습하는 데 사용하도록 다음 시나리오를 제시합니다.
- Kubernetes 배포 오류나 시간 초과가 발생할 때
- OpenTofu 또는 Terraform IaC 파이프라인이 클라우드 리소스를 프로비저닝하지 못할 때
- CI/CD에서 난해한 권한 오류로 Ansible 플레이북이 실패할 때
- Java 스택 트레이스가 10 페이지에 이를 때
- 셸 스크립트가 실행 오류를 강조할 때
- Perl 스크립트가 스크립트의 유일한 줄인 한 줄에서 실패할 때
- CI/CD job이 시간 초과하고, 어느 섹션이 원인인지 불분명할 때
- 네트워크 연결 시간 초과가 발생했는데 DNS 문제가 아니라고 생각할 때
Root Cause Analysis 사용 방법
GitLab에서 Root Cause Analysis 기능을 사용하려면 CI/CD job을 볼 수 있는 권한이 있어야 합니다. 또 유료 GitLab Duo 엔터프라이즈 seat이 필요합니다.
Root Cause Analysis 기능으로 실패한 CI/CD job을 트러블슈팅하는 방법은 아래와 같습니다.
- GitLab 홈페이지 왼쪽 사이드바에서 Search or go to를 클릭하고, 프로젝트를 찾습니다.
- Build > Jobs를 클릭합니다.
- 실패한 CI/CD job을 클릭합니다.
- job 로그 페이지에서 다음 사항 중 하나를 수행합니다.
- job 로그 아래에 Troubleshoot을 클릭합니다.
- GitLab Duo Chat을 열고,
/troubleshoot
을 입력합니다.
- GitLab Duo Chat 창에 실패 원인 분석과 해결 방법 예시가 아래와 같이 나타납니다.
GitLab Duo Chat에 표시된 CI/CD job 실패의 근본 원인 분석 내용과 해결 방법 내용. 출처=GitLab
Root Cause Analysis 기능은 CI/CD job 로그의 일부를 GitLab AI 게이트웨이로 전달하는 방식으로 작동합니다. GitLab은 job이 실패한 원인에 통찰을 제공하기 위해 미리 작성된 프롬프트와 함께 ‘전송된 부분이 대규모 언어 모델(LLM) 토큰 제한에 맞는지’ 확인합니다. 이 프롬프트는 사용자가 실패한 job을 수정하는 방법에 예시를 제공하도록 LLM에 요청합니다.
저자 의견
GitLab은 AI를 활용해 개발자와 엔지니어의 반복 업무를 자동화하고, 문제를 쉽게 해결하도록 돕는 걸 성장과 판매 증진의 핵심 포인트로 삼습니다. 앞으로도 고객이 원하는 다양한 자동화 기능을 AI와 함께 출시할 걸로 예상됩니다. 여러분도 이 부분을 주목해 보시면 좋겠습니다.
저는 그동안 파이프라인이 수행되다가 실패하면 이를 해결하기 위해 로그를 찾아보고, 에러 메시지를 구글로 검색하며 문제를 해결하곤 했습니다. 그렇다 보니 AI가 이러한 일을 대신 해주고, 엔지니어는 해결 방안만 적용하면 좋겠다고 생각하기도 했습니다. AI가 .gitlab-ci.yml
파일을 알아서 수정해도 좋겠고요. Root Cause Analysis 기능이 이러한 바람을 일부 충족해 반갑습니다. 향후 .gitlab-ci.yml
파일의 자동 수정도 지원해 주길 바랍니다.
GitLab 공식 블로그에는 Root Cause Analysis 기능 작동 방식의 2개 예시가 있습니다. 하나는 Python 의존성 오류 분석, 다른 하나는 누락된 Go 런타임 분석입니다. 이 예시를 살펴보면 옆에 조력자가 있어 든든한 느낌이 듭니다. 현실에서는 이보다 더 많은 경우의 수와 사례가 나올 걸로 생각합니다. 엔지니어들도 이러한 AI 조력자와 함께라면 기술 문제를 더 쉽고 빠르게 해결할 수 있을 겁니다.
아울러 GitLab Duo Chat과 연동하면 기술, 언어의 전문 지식이 부족해도 적절한 프롬프트로 AI의 방대한 지식과 데이터에 기반해 다양한 빌드/배포 이슈를 수정하고, 파이프라인을 개선할 수 있을 걸로 예상됩니다. 앞으로 GitLab의 AI 기능이 더 기대됩니다.
맺음말
지금까지 Root Cause Analysis 기능의 개념과 사용 방법, 동작 방식을 살펴보고, 엔지니어 관점에서 기능을 논평했습니다. 이 글의 요점은 아래와 같습니다.
- GitLab의 Root Cause Analysis 기능은 실패한 CI/CD 파이프라인의 근본 원인을 파악하고, 해결 방법을 제안하는 AI 기반 기능입니다.
- 파이프라인은 코드의 구문 오류, 파이프라인이 의존하는 의존성 누락, 빌드 프로세스 도중 테스트 실패, Kubernetes와 IaC 배포 시간 초과 등 여러 가지 이유로 실패합니다.
- 파이프라인에서 생성된 로그를 검토해야 이러한 실패 원인을 정확히 확인하고, 문제를 해결할 수 있습니다.
- Root Cause Analysis와 같은 AI 기반 기능을 활용하면 파이프라인 오류를 확인하고, 문제의 근본 원인을 파악하며, 수정하는 시간을 크게 줄일 수 있습니다.
참고 자료
- Rutvik Shah·Michael Friedrich, “Developing GitLab Duo: Blending AI and Root Cause Analysis to fix CI/CD pipelines”, GitLab, 2024.6.6, https://about.gitlab.com/blog/2024/06/06/developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd/
- “Ask GitLab Duo Chat”, GitLab, https://docs.gitlab.com/ee/user/gitlab_duo_chat/
인포그랩의 DevOps 전문가와 함께 더 많은 GitLab 정보와 데모를 확인하세요.