GitLab Self-Managed에서 Observability 설정
GitLab v19.1Offering: GitLab Self-Managed
Observability 데이터는 GitLab.com 인스턴스 외부의 별도 애플리케이션에서 수집됩니다. GitLab Self-Managed의 경우, 데이터 저장 위치를 직접 제어할 수 있습니다. GitLab Self-Managed 인스턴스에서 Observability를 설정하려면 다음 단계를 수행합니다:
Status: Experiment
Observability 데이터는 GitLab.com 인스턴스 외부의 별도 애플리케이션에서 수집됩니다. GitLab 인스턴스에 문제가 발생해도 Observability 데이터 수집이나 조회에 영향을 미치지 않으며, 그 반대도 마찬가지입니다.
GitLab Self-Managed의 경우, 데이터 저장 위치를 직접 제어할 수 있습니다.
워크플로#
GitLab Self-Managed 인스턴스에서 Observability를 설정하려면 다음 단계를 수행합니다:
-
사전 요구 사항을 충족하는지 확인합니다.
-
서버와 스토리지를 프로비저닝합니다.
-
Docker를 구성하고 컨테이너에 Observability를 설치합니다.
-
네트워크 접근을 구성합니다.
-
그룹의 URL을 구성합니다.
사전 요구 사항#
- 다음 사양을 갖춘 EC2 인스턴스 또는 유사한 가상 머신이 필요합니다:
최소 사양: t3.large (2 vCPU, 8 GB RAM).
-
권장 사양: 프로덕션 사용을 위해
t3.xlarge(4 vCPU, 16 GB RAM). -
최소 100 GB 스토리지 공간.
-
Docker 및 Docker Compose가 설치되어 있어야 합니다.
-
GitLab 버전이 18.1 이상이어야 합니다.
-
GitLab 인스턴스가 Observability 인스턴스에 연결되어 있어야 합니다.
서버 및 스토리지 프로비저닝#
AWS EC2의 경우:
-
최소 2 vCPU 및 8 GB RAM을 갖춘 EC2 인스턴스를 시작합니다.
-
최소 100 GB의 EBS 볼륨을 추가합니다.
-
SSH를 사용하여 인스턴스에 연결합니다.
스토리지 볼륨 마운트#
sudo mkdir -p /mnt/data
sudo mount /dev/xvdbb /mnt/data # Replace xvdbb with your volume name
sudo chown -R $(whoami):$(whoami) /mnt/data
영구 마운트를 위해 /etc/fstab에 추가합니다:
echo '/dev/xvdbb /mnt/data ext4 defaults,nofail 0 2' | sudo tee -a /etc/fstab
Docker 설치#
Ubuntu/Debian의 경우:
sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $(whoami)
Amazon Linux의 경우:
sudo dnf update
sudo dnf install -y docker
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $(whoami)
로그아웃 후 다시 로그인하거나 다음을 실행합니다:
newgrp docker
마운트된 볼륨을 사용하도록 Docker 구성#
sudo mkdir -p /mnt/data/docker
sudo bash -c 'cat > /etc/docker/daemon.json << EOF
{
"data-root": "/mnt/data/docker"
}
EOF'
sudo systemctl restart docker
다음 명령으로 확인합니다:
docker info | grep "Docker Root Dir"
GitLab Observability 설치#
cd /mnt/data
git clone -b main https://gitlab.com/gitlab-org/embody-team/experimental-observability/gitlab_o11y.git
cd gitlab_o11y/deploy/docker
docker-compose up -d
타임아웃 오류가 발생하는 경우 다음을 사용합니다:
COMPOSE_HTTP_TIMEOUT=300 docker-compose up -d
선택 사항: 외부 ClickHouse 데이터베이스 사용#
원하는 경우 자체 ClickHouse 데이터베이스를 사용할 수 있습니다.
사전 요구 사항:
- 외부 ClickHouse 인스턴스에 접근할 수 있으며, 필요한 인증 자격 증명으로 올바르게 구성되어 있는지 확인합니다.
docker-compose up -d를 실행하기 전에 다음 단계를 완료합니다:
-
docker-compose.yml파일을 엽니다. -
다음 항목을 주석 처리합니다:
clickhouse 및 zookeeper 서비스.
-
x-clickhouse-defaults및x-clickhouse-depend섹션. -
다음 파일에서
clickhouse:9000의 모든 항목을 관련 ClickHouse 엔드포인트 및 TCP 포트(예:my-clickhouse.example.com:9000)로 교체합니다. ClickHouse 인스턴스에 인증이 필요한 경우, 자격 증명을 포함하도록 연결 문자열도 업데이트해야 할 수 있습니다:
docker-compose.yml
-
otel-collector-config.yaml -
prometheus-config.yml
GitLab Observability의 네트워크 접근 구성#
텔레메트리 데이터를 올바르게 수신하려면 GitLab Observability 인스턴스의 보안 그룹에서 특정 포트를 열어야 합니다:
-
AWS 콘솔 > EC2 > 보안 그룹으로 이동합니다.
-
GitLab Observability 인스턴스에 연결된 보안 그룹을 선택합니다.
-
인바운드 규칙 편집을 선택합니다.
-
다음 규칙을 추가합니다:
유형: Custom TCP, 포트: 8080, 소스: 사용자 IP 또는 0.0.0.0/0 (UI 접근용)
-
유형: Custom TCP, 포트: 4317, 소스: 사용자 IP 또는 0.0.0.0/0 (OTLP gRPC용)
-
유형: Custom TCP, 포트: 4318, 소스: 사용자 IP 또는 0.0.0.0/0 (OTLP HTTP용)
-
유형: Custom TCP, 포트: 9411, 소스: 사용자 IP 또는 0.0.0.0/0 (Zipkin용 - 선택 사항)
-
유형: Custom TCP, 포트: 14268, 소스: 사용자 IP 또는 0.0.0.0/0 (Jaeger HTTP용 - 선택 사항)
-
유형: Custom TCP, 포트: 14250, 소스: 사용자 IP 또는 0.0.0.0/0 (Jaeger gRPC용 - 선택 사항)
-
규칙 저장을 선택합니다.
이제 다음 주소에서 GitLab Observability UI에 접근할 수 있습니다:
http://[your-instance-ip]:8080
그룹의 URL 구성#
Rails 콘솔을 사용하여 그룹의 GitLab Observability URL을 구성합니다:
- Rails 콘솔에 접근합니다:
docker exec -it gitlab gitlab-rails console
- 그룹의 Observability 설정을 구성합니다:
group = Group.find_by_path('your-group-name')
Observability::GroupO11ySetting.create!(
group_id: group.id,
o11y_service_url: 'your-o11y-instance-url',
o11y_service_user_email: 'your-email@example.com',
o11y_service_password: 'your-secure-password',
o11y_service_post_message_encryption_key: 'your-super-secret-encryption-key-here-32-chars-minimum'
)
다음 항목을 교체합니다:
your-group-name을 실제 그룹 경로로 교체합니다.
-
your-o11y-instance-url을 GitLab Observability 인스턴스 URL로 교체합니다(예:http://192.168.1.100:8080). -
이메일과 비밀번호를 원하는 자격 증명으로 교체합니다.
-
암호화 키를 32자 이상의 보안 문자열로 교체합니다.