LOGO

Blog 블로그

블로그

Docker 기반 자동화 기능을 추가한 Jira 모니터링 시스템 ①

2024-07-10

[시리즈 미리보기]

① Docker 기반 자동화 기능을 추가한 Jira 모니터링 시스템 ◀

② Nginx, Prometheus, Grafana 구축 및 연동하기

 


 

 

 

첫 번째와 두 번째 글에 걸쳐 Docker 환경에서 Jira Data Center Version을 설치하고 모니터링을 위해 Jira에 Prometheus와 Grafana를 연동하는 가이드를 써볼 예정입니다. 이번 편에서는 Docker의 개념을 살펴보고 함께 Docker 위에 Jira를 구축해 봅시다.

 

 

 

1. 왜 Docker에 구축하였는가?

 


Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너(Container)로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하기 위해 필요한 모든 것이 포함되어 있습니다.


컨테이너(Container)는 가상화 기술을 사용해서 소프트웨어 애플리케이션을 실행하기 위해 필요한 모든 종속성을 포함하는 경량 소프트웨어 패키지입니다. 가상화 기술은 과거에도 가상 머신으로 존재하였으나, 컨테이너는 어플리케이션에 필요한 최소 단위만 올라가기 때문에 보다 가볍고 효율적입니다. 또한 각 컨테이너는 독립된 개발 환경이고 이를 이미지로 배포한다면 다른 서버에서도 개발 환경을 복제할 수 있습니다. 그 외에도 표준화된 코드 배포를 활용해 컨테이너를 통해 마이크로 서비스 아키텍처를 구축하고 확장할 수 있다는 장점이 있습니다.

 

 

2. Docker 기본 지식

 

Jira 모니터링 구성도와 구축을 위한 파일들을 살펴보기 전에 간단하게 Docker 지식을 알려드리겠습니다.

 

 

2-1. Docker image: 컨테이너 실행에 필요한 파일과 설정 값 등을 포함한 일종의 Template
2-2. Dockerfile: Docker Image 생성을 위해 컨테이너에 설치해야 하는 패키지, 소스코드, 실행해야 하는 명령어와 쉘 스크립트 등이 적혀있는 파일
2-3. pull: Docker Hub에서 이미지 다운로드
2-4. push: 컨테이너 이미지를 Docker Hub 및 원격 레파지토리에 업로드
2-5. run: Docker Process 기동
2-6. commit: docker container 기반 이미지 생성
2-7. build: Dockerfile을 참조하여 도커 이미지 생성
2-8. Docker compose: 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리할 수 있는 파일

 

 

3. Jira Monitoring Architecture를 위한 docker-compose 파일 작성

 

DB는 mysql8, Load Balancer는 Nginx를 이용하여 아래와 같은 모니터링 아키텍처를 구성해보았습니다.

 

 

어플리케이션의 배포 및 관리 편의성을 위해 docker compose로 작성했습니다. Docker-compose up 명령어를 입력하면 mysql8부터 grafana가 설치된 컨테이너까지 순차적으로 생성됩니다.

 


[docker-compose.yaml]

 

 

3-1. services: 생성될 컨테이너를 묶어놓은 단위
3-2. image: 서비스의 컨테이너를 생성할 때 쓰일 이미지
3-3. volumes: 마운트되는 파일 경로 설정
3-4. restart: 컨테이너가 종료된 후 다시 시작할지 여부 결정
3-5. environment: 서비스의 컨테이너 내부에서 사용할 환경 변수 지정
3-6. networks: 서비스가 소속될 네트워크 지정
3-7. depends_on: 특정 컨테이너에 대한 의존 관계 명시
3-8. build: 컨테이너를 기동하기 전에 build 진행하는 경로
3-9. ports: 호스트 머신과 Docker 컨테이너 간 포트 매핑
3-10. expose: 내부의 다른 컨테이너들만 액세스가 가능한 포트 지정

 

 

4. docker-compose 배포 흐름 및 자동화 프로세스

 

 

No.

Task

1

Mysql8 서버 배포 후 환경변수에 있는 jiradb 테이블 생성

2

Jira main node 배포 후 브라우저에서 수동으로 license 설정, DB연결 설정

local에 준비된 server.xml 파일 적용 (scheme="http or https" proxyName="" proxyPort="80" 등이 추가된 각자 환경에 맞는 파일을 미리 준비)

3

Jira main node가 정상적으로 배포된 경우, sub node 배포

브라우저에서 Prometheus Exporter Plugin 수동 설치

Jira main node 배포 후 Nginx와 Prometheus 배포

4

Prometheus 배포 후 Prometheus와 Grafana 브라우저에서 수동으로 연동

 

자동화 프로세스는 이번 편에서 A를 설명하고 다음 편에 이어서 B와 C를 설명해드리겠습니다.

 

No.

Automation Task

A

A Main node 배포 후 dbconfig.xml 파일 작성완료 → shared-home 디렉토리로 dbconfig.xml 파일 복사 → sub node 배포 시 완성된 dbconfig.xml을 복사해 사용

 

Docker-compose.yaml에 적혀있던 Jira 배포와 관련있는 dockerfile과 자동화 프로세스를 구현해주는 쉘 스크립트를 살펴봅시다.

 

[jira.dockerfile]

 

4-1. FROM: 생성할 이미지의 베이스가 될 이미지를 결정하는 것으로 Dockerfile 작성 시 필수 설정
4-2. RUN: Docker Image를 만드는 과정에서 추가로 실행할 명령어를 입력
4-3. WORKDIRr: 작업 디렉토리를 지정
4-4. COPY: 호스트의 파일 및 디렉토리를 복사하는 것으로 COPY 형식으로 사용
4-5. CMD: 컨테이너에서 실행할 Command 입력

 

아래의 쉘 스크립트는 Jira main node 기동 후 15초 뒤 실행될 dbconfig.sh입니다. Jira rest api를 통해 Main node가 정상적으로 실행된 걸 확인하고, 생성된 dbconfig.xml을 자동으로 shared-home으로 복사하는 기능을 합니다. 이로써 sub node 기동 시 매 노드마다 별도로 dbconfig.xml을 수동으로 옮길 필요가 없습니다.

 

[dbconfig.sh]

 

Jira clustering 시 실행될 dockerfile입니다.

 

[jira-scale.dockerfile]

 

위의 jira-scale.dockerfile에서 실행되는 jirastart.sh는 복사해온 dbconfig.xml을 sub node의 home-directory로 자동으로 옮겨주고 5분 후에 sub node 서버의 jira service를 구동시킵니다.

 

 

Jira와 mysql8 연동을 시켜준 뒤 Prometheus와 연결을 위해 Prometheus Exporter PRO For Jira 플러그인을 설치합니다.

 

 

다음 편에서는 이번 주제에 이어서 Jira Monitoring Architecture중 Jira를 제외한 Nginx, Prometheus, Grafana를 구축한 뒤 연동하는 과정을 살펴보겠습니다.

 


 

[참고 자료]

컨테이너 vs 가상 머신 | 아틀라시안 (atlassian.com)
‘Docker란 무엇인가’가 무엇인지 모르겠다 (velog.io)
Docker의 역할과 장점 (velog.io)
Docker란 무엇입니까? | AWS (amazon.com)
[Docker] 그래서 도커(Docker)랑 컨테이너(Container)가 뭐냐구요 (tistory.com)
[Docker] Dockerfile 개념 및 작성법 (tistory.com)
https://seosh817.tistory.com/381
https://docs.docker.com/reference/dockerfile/
https://hackerpark.tistory.com/entry/Docker-Dockerfile%EC%9D%98-%EA%B5%AC%EC%A1%B0%EC%99%80-%EB%AC%B8%EB%B2%95
https://velog.io/@rnjsdb72/Docker-%EB%AA%85%EB%A0%B9%EC%96%B4
https://soobing.github.io/infra/docker-command/
https://seosh817.tistory.com/387
https://byungwoo.oopy.io/2758a690-6ec7-42d0-ae41-5ebc75f4e57a
https://velog.io/@jaden_kim/Nginx-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1
https://hyeon9mak.github.io/nginx-upstream-multi-server/
[Docker Command] docker 명령어 뽀개기 (tistory.com)
[Docker] ports와 expose의 차이 (tistory.com)

 

 

 

교육안내
문의하기