LOGO

Blog 블로그

블로그

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

2024-08-16

[시리즈 미리보기]

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

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

 


 

 

 

2편에서는 이전 포스트에서 예고했던 대로 Jira Monitoring Architecture중 Jira를 제외한 나머지구성, 즉 Nginx, Prometheus, Grafana를 구축한 뒤 연동하는 과정을 살펴보겠습니다.

 

 

No.

Automation Task

A

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

B

Main node 배포 후 cluster check rest api를 main node로 호출 à 추가로 생성 혹은 제거된 node를 감지해서 nginx.conf 파일 수정 à 재기동 작업 수행

D

Main node 배포 후 cluster check rest api를 main node로 호출 à 추가로 생성 혹은 제거된 node를 감지해서 Prometheus.yml 파일 수정 à 재기동 작업 수행

 

 

1. Nginx 구축과 자동화

 

첫번째 포스트의 Docker-compose.yaml에서 Nginx 컨테이너를 생성하기 위해 nginx.dockerfile을 명시했습니다. 작성된 Nginx.dockerfile은 아래에서 확인할 수 있습니다.

 

[nginx.dockerfile]

Nginx와 python3 사용을 위한 모듈을 설치합니다. 위 파일의 마지막에서 confup.sh을 실행하게 되는데 이는 5분마다 Jira rest api로 Jira main node가 실행이 잘 됐다면 python script를 실행하는 역할을 합니다.

 


[confup.sh]


confup.py 스크립트에서는 Jira rest api로 클러스터링 된 모든 노드의 ID를 가져온 뒤 기존nginx.conf 파일 내 nodeId와 달라진 부분이 있다면, nginx.conf 파일을 다시 쓰고 재기동하는 로직입니다.

 


[confup.py]

 

[nginx.conf]



1-1. upstream: nginx와 연결한 웹 어플리케이션 서버를 지정하는 것으로 보통 IP:PORT로 지정
1-2. ip_hash: 클라이언트 IP주소를 해시값으로 변환하여 특정서버에서 처리함으로 사용자가 항상 동일한 서버로 연결
1-3. server: request를 처리하기 위한 하나 이상의 server block 지정으로 listen은 nginx가 수신하는 port이고 location은 nginx에 정의되어 있는 웹사이트 특정 URL 조작하는 역할
1-4. proxy_set_header X-Forwarded-For: 클라이언트의 실제 IP 주소를 백엔드 서버에 전달
1-5. proxy_set_header X-Forwarded-Proto: 요청 프로토콜(HTTP 또는 HTTPS)을 백엔드 서버에 전달
1-6. proxy_set_header Host: 호스트 헤더를 백엔드 서버에 전달
1-7. proxy_set_header X-Real-IP: 클라이언트의 실제 IP 주소를 X-Real-IP 헤더에 설정

 

 

2. 프로메테우스(Prometheus)란

 

프로메테우스는 메트릭 수집, 시각화, 알림, 서비스 디스커버리 기능을 모두 제공하는 오픈 소스 모니터링 시스템입니다.

 

 

프로메테우스는 크게 4가지 기능을 제공합니다. 먼저, 메트릭 수집으로 다양한 대상으로부터 시계열 데이터를 수집합니다. 두번째는 시각화 기능으로 수집된 메트릭 데이터를 그래프, 테이블 등의 형태로 시각화할 수 있습니다. 세번째로 설정된 임계값을 초과하거나 특정 조건을 충족할 때 알림을 보내주는 기능이 있습니다. 마지막으로 모니터링 대상을 자동으로 검색하고 추가해주는 서비스 디스커버리 기능이 있습니다. 이외에도 내장된 쿼리 언어인 PromQL을 사용하여 저장된 데이터에 대한 쿼리 및 분석 기능을 제공하거나 Kubernetes와 같은 컨테이너 오케스트레이션 플랫폼과의 통합이 잘 구성되어 있다는 장점이 있습니다.

 

프로메테우스 생성을 위해 Docker-compose.yaml에서 사용되었던 Prometheus.dockerfile입니다.

 

[prometheus.dockerfile]

 

[Prometheus.yml]



2-1. scrape_configs: target별 맞춤 설정으로 다양한 데이터 수집
2-2. job name: 메트릭 수집하는 작업명
2-3. metrics_path: 수집한 메트릭 정보를 볼 수 있는 URI
2-4. targets: 메트릭 수집해올 대상


Jira Clustering 시 Prometheus container에서는 Prometheus.yml 파일에 모니터링할 sub node 정보를 자동으로 최신화하고 재기동하기 위해서 5분마다 check_yaml.py 스크립트를 실행합니다.

 

[check_yaml.py]

 

 

3. 그라파나(Grafana)란

 

멀티플랫폼 오픈소스인 그라파나는 메트릭 분석 및 메트릭 정보 시각화를 제공해주는 웹 어플리케이션입니다. 그라파나 자체는 데이터 수집을 하지 않고, 외부시스템에서 데이터를 가져와서 커스텀 대시보드에 표시하여 사용자가 시스템 상태를 쉽게 확인할 수 있도록 도와줍니다.

 

 

그라파나는 3가지 장점이 있습니다. 프로메테우스 외에도 다른 시스템이나 데이터베이스에서 데이터를 쉽게 가져올 수 있습니다. 그래프를 그리는 것도 UI로 간편하게 사용할 수 있습니다. 또한, 타 사용자들이 만들어놓은 대시보드를 import 해서 이용하거나 사용자 정의 대시보드를 만들 수 있어 원하는 정보를 원하는 방식으로 표시할 수 있습니다. 그 밖의 장점으로는 알람 기능이나 다양한 플러그인으로 기능 확장이 용이하다는 점들이 있습니다.

 

[grafana.dockerfile]

 

 

4. 모니터링 예시

 

지라 각 노드와 연결한 프로메테우스와 노드 별로 모니터링 정보를 담은 그라파나 대시보드입니다.

 

 

 


 

[참고 자료]

Prometheus란 무엇인가 :: 구르미의 개발 이야기 (tistory.com)
Prometheus란? (velog.io)
[Grafana] Grafana란 (tistory.com)
Grafana란? :: 매일매일 꾸준히 (tistory.com)
Grafana란?. 시계열 데이터에 대한 대시보드를 제공해주는 Data… | by ShinChul Bang | finda 기술 블로그 | Medium
마이그레이션 | 프로메테우스 (prometheus.io)
구성 | 프로메테우스 (prometheus.io)
프로메테우스(Prometheus) Configuration (tistory.com)

 

 

교육안내
문의하기