EFK 스택을 구축하여 GitLab의 로그를 수집하면, 로그 데이터를 시각화하여 대시보드를 생성할 수 있습니다. 이를 활용하면 운영에 필요한 다양한 정보와 인사이트를 얻어, 데이터를 기반으로 의사결정을 내리는 데 도움이 됩니다. 또한, 시스템 관리자가 터미널에서 로그 파일에 직접 액세스하지 않고도, Web UI에서 로그를 분석하여 GitLab 시스템에서 발생하는 문제를 해결하는데 활용할 수 있습니다. Show 이번 글에서는 EFK 스택을 설치하고 구성하여 GitLab 로그를 수집한 후, Git Activity 대시보드를 만드는 방법을 알아보겠습니다. EFK 스택은 Elasticsearch, Fluentd, Kibana로 구성된 스택을 의미하는 약어입니다. 이 세 가지 도구를 결합하여 확장 가능하고 유연하며 사용하기 쉬운 로그 수집 및 분석 파이프라인을 구축할 수 있습니다. Elasticsearch는
Apache Lucene 기반의 분산 검색 및 분석 엔진입니다. 정해진 스키마가 없는 JSON 문서로 데이터를 저장합니다.
로그 모니터링 시스템의 필요성#자체 관리형 GitLab의 Admin Area > Monitoring > Logs 메뉴를 통해 GitLab의 여러 로그 파일을 볼 수 있었으나, GitLab 13.0부터 다중 노드 설정에서는 로깅이 작동하지 않고 일부 정보를 표시하여 관리자에게 혼란을 줄 수 있어 Admin Area에서 이 기능이 제거되었습니다. GitLab에는 GitLab 내의
모든 서비스와 구성 요소가 시스템 로그를 출력하는 고급 로그 시스템이 포함되어 있습니다. 이에 따라 GitLab Rails, GitLab Shell, NGINX, PostgreSQL, Puma 등의 로그가 EFK 스택으로 로그 모니터링 시스템을 구축하면, 로그를 분석하기 위해 터미널에서 여러 로그 파일에 액세스하지 않고도 Kibana Discover 메뉴에서 이러한 로그 파일의 내용을 확인할 수 있습니다. 아키텍처#Fluent Bit가 GitLab의 로그를 수집하여 Fluentd로 전송합니다.
EFK Stack 설치 및 구성#Docker Engine 및 Docker Compose를 설치하고, Docker Compose를 이용하여 EFK(Elasticsearch + Fluentd + Kibana) Stack을 설치합니다. Timezone 설정#Chrony 설치#시간을 동기화하는 NTP(Network Time Protocol) 데몬(daemon)인 Chrony를 설치합니다. Timezone 및 시간 동기화 상태를 확인합니다. EFK Stack 구성#Elasticsearch의 데이터를 저장할 수 있을 만큼의 여유 공간이 있는 경로에 EFK Stack 작업 디렉토리 (Working directory)를 생성합니다.
아래 내용으로 작성하고 저장합니다. Elasticsearch plugin이 포함된 커스텀 Fluentd 이미지 생성을 위한 아래 내용으로 작성하고 저장합니다. Fluentd 구성 파일 아래 내용으로 작성하고 저장합니다. Elasticsearch의 데이터를 영속적(Persistent)으로 저장하기 위한 바인드 마운트(Bind mount)용 디렉토리를 생성합니다.
Fluent Bit 설치 및 구성#로그를 수집하여 Fluentd에 전달하는 Fluent Bit를 GitLab이 설치된 서버에 설치합니다. Fluent Bit 설치#키링(keyring)에 Fluent Bit 서버의 GPG key를 추가합니다. 그러면 서명된 패키지를 얻을 수 있습니다. APT 서버 엔트리를 소스 목록에 추가합니다.
APT 패키지 인덱스를 업데이트합니다. 아래 명령을 실행하여 최신
서비스 상태를 확인합니다. Fluent Bit 구성#GitLab에서 Git 명령을 수행한 프로토콜(Protocol)에 따라 기록되는 로그 파일이 다릅니다. HTTP/HTTPS는
GitLab의 Git 관련 로그를 수집하고 필터링하여 Fluentd에 전달하도록 구성합니다. JSON Parser의 아래 내용으로 수정합니다. GitLab의 로그 파일 중 Git 관련 로그만 수집하도록 아래와 같이 작성하고 저장합니다.
시스템 부팅 시 자동 재시작하도록 설정합니다. Dashboard 구성#웹 브라우저에서 Index Templates#Elasticsearch는 고가용성과 필요에 따라 확장할 수 있도록 하나 이상의 노드(서버)로 구성된 클러스터(Cluster)로 실행됩니다. Elasticsearch는 데이터를 JSON 형식의 문서로 저장하는데, 비슷한 특성을 가진 문서의 모음을 색인(인덱스, Index)라고 합니다. 색인은 방대한 양의 데이터를 저장할 수 있는데, 이 데이터가 단일 노드의 하드웨어 한도를 초과할 수도 있고 단일 노드에서 검색 요청 처리 시 속도가 너무 느려질 수 있습니다. Elasticsearch는 이러한 문제를 해결하고자 색인을 이른바 샤드(shard)라는 조각으로 분할하여 저장합니다. 또한, 특정 샤드/노드에 문제가 생겼을 경우에 대비하여 페일오버 메커니즘(Failover Mechanism)이 있으며, 색인의 샤드에 대해 하나 이상의 복사본을 생성할 수 있는데, 이를 리플리카 샤드(Replica shard), 줄여서 리플리카(Replica)라고 합니다. Elasticsearch 7.0 이상 버전에서 Shard와 Replica의 기본값은 1입니다. Stack Management > Data > Index Management 메뉴의 Indices 탭에서 위와 같이 인덱스를 일일이 수정하지 않고, Index Template을 생성하여 인덱스가 사용할 Mappings, Settings을 설정해 두면, 인덱스가 생성될 때 자동으로 적용되게 할 수 있습니다. Indices#Index Template을 생성하고 Indices 탭으로 이동하면 모든 인덱스의 Health가 Index Patterns#Stack Management > Kibana > Index Patterns로 이동하여 Create index pattern 버튼을 클릭합니다. Discover#햄버거 아이콘을 클릭하고 Analytics > Discover 메뉴로 이동합니다. Visualize Library#Analytics > Visualize Library 메뉴로 이동하여 Create visualization 버튼을 클릭합니다. Git Activity Dashboard#Analytics > Dashboard 메뉴로 이동하여 Create dashboard 버튼을
클릭합니다. 맺음말#지금까지 EFK 스택을 구축하고 Fluent Bit로 GitLab 로그를 수집하여, Elasticsearch에 색인을 저장하고 설정한 후, 로그 데이터를 가시화하여 Git Activity 대시보드를 구성하는 방법을 알아보았습니다. 인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab과 대시보드 구축 관련하여 지원이 필요하시면 문의하기로 연락 주십시오. |