Sentry with Docker (v9.1.2)

NOWNIZ·2023년 1월 26일
0

Blah Blah

목록 보기
4/9

Introduction

  • 현재 관리되고 있는 로깅 솔루션 중, Sentry가 있다. 꽤 오래 전에 구축된 플랫폼이라 기존 DV, PR의 Sentry는 이력관리가 잘 되고 있지 않고 실 사용 여부도 명확하지 않았다.
  • 이번 AICC / JOBDA 프로젝트를 통해 Jainwon 계정에 새로 DV / ST 환경 Sentry를 구축함에 따라 새로운 구축 과정 (Docker) 및 이력을 정리한다.

What is Sentry?

Sentry는 실시간 이벤트 로깅 및 집계 플랫폼이다. 오류를 모니터링하고 사후 처리를 위한 정보를 추출하는 데에 특화되어 있다. (by Sentry.)

Official github : github.com/getsentry/sentry

How to use Sentry image

※ Docker의 전반적인 install 및 Setting이 끝났다는 전제 하에 진행

Sentry는 Redis + DB (Postgres)와 함께 run 시켜야한다. (로그인 Session 유지 및 데이터 관리)

Data Volume 동기화를 위해 Data volume을 미리 생성

docker volume create sentry-postgres-volume
docker volume create sentry-worker-volume
docker volume create sentry-nginx-volume
  1. Redis Container 실행
docker run -d --name sentry-redis redis
  1. Postgres Container 실행 (/var/lib/postgresql/data 와 볼륨 동기화)
docker run -d --name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry -v sentry-postgres-volume:/var/lib/postgresql/data postgres
  1. Sentry 관련 container 들에 적용시킬 secret key를 생성한다. 이는 SENTRY_SECRET_KEY 옵션으로 적용될 수 있다.
docker run --rm sentry config generate-secret-key
  1. 새로 Postgres DB를 생성했다면 Secret Key를 upgrade 시켜준다. (bash 명령은 사용하지 않으나, -it 옵션은 초기에 사용하지 않으면 실패하니 꼭 사용하자)
docker run -it --rm -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-postgres:postgres --link sentry-redis:redis sentry upgrade
  1. Sentry 를 시작한다! (/var/lib/sentry/files/와 동기화 - worker node)
docker run -d --name sentry -v sentry-worker-volume:/var/lib/sentry/files -e SENTRY_SECRET_KEY='<secret-key>' -p 4443:9000 --link sentry-redis:redis --link sentry-postgres:postgres sentry
  1. Sentry 시작 시에, 기본 구성으로 Cron과 Worker의 구성이 필요하다.
docker run -d --name sentry-cron -v sentry-worker-volume:/var/lib/sentry/files -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-redis:redis --link sentry-postgres:postgres sentry run cron
docker run -d --name sentry-worker -v sentry-worker-volume:/var/lib/sentry/files -e SENTRY_SECRET_KEY='<secret-key>' --link sentry-redis:redis --link sentry-postgres:postgres sentry run worker

※ 주의!

Worker를 제대로 실행시켜주지 않으면 다음과 같은 창이 뜨게 된다. (Backlog task가 계속 쌓이게 됨)

여기까지 Sentry 구축은 완료되지만! 보안 요건에 따른 NLB 타겟그룹 정책때문에 별도의 웹 포트포워딩이 필요하다!

Nginx for Port-forwarding

  1. Nginx Container 실행
docker run -d --name sentry-nginx -p 4080:4080 -v sentry-nginx-volume:/etc/nginx/ nginx
  1. Nginx 내부 config를 설정해야 하는데, exec를 통한 수동 변경 또는 volume을 통한 config 파일 동기화 또는 Dockerfile 작성을 통한 설정 방법을 선택할 수 있다.
docker exec -it sentry-nginx /bin/bash

→ 위 1번과정에서 볼륨 동기화를 시켜줬다면, Host 단에서 conf 파일을 수정할 수 있다.

  1. 설정해줘야 하는 파일의 경로는 /etc/nginx/nginx.conf 이며 설정해야할 내용은 다음과 같다.
server {
    listen 4080 default_server;
    server_name _;

    location /health {
            return 200 "OK";
    }

    return 301 https://$host$request_uri;
}
  1. nginx 컨테이너를 재시작하면 끝!

Systemctl 등록

서버 인스턴스 구동 시, Docker 프로세스가 자동으로 시작될 수 있도록 system service을 등록해야 한다.

  1. systemctl 설정
vim /usr/lib/systemd/system/sentry.service
  1. service 파일 작성
[Unit]
Wants=docker.service
After=docker.service

[Service]
RemainAfterExit=yes
ExecStart=/usr/bin/docker start sentry
ExecStop=/usr/bin/docker stop sentry

[Install]
WantedBy=multi-user.target
  1. 나머지 Sentry Docker image의 service 파일 작성
  • sentry.service
  • sentry-postgres.service
  • sentry-redis.service
  • sentry-worker.service
  • sentry-cron.service
  • sentry-nginx.service
  1. systemctl enable을 통해 /etc/systemd/system/에 서비스 등록

  2. /etc/systemd/system/multi-user.target.wants/ 에 심볼릭 링크 생성

  3. systemctl daemon-reload

  4. AMI 작업 시작

ETC

sentry 관련 CLI 명령을 사용하고 싶다면, 컨테이너 내부에서 sentry config [list, get, set, …][OPTIONS] 를 사용하면 된다.

ex ) Sentry ROOT URL 조회 : sentry config get system.url-prefix

→ 추후에 v21.9.0을 Docker-compose로 다시 띄우게 된다.

profile
DevOps & Cloud Engineering

0개의 댓글