본문 바로가기
DevOps

Prometheus , Grafana (docker-compose) 적용 해보기 (1)

by 앙헬디마리아 2021. 5. 4.
728x90

 

 

현재 운영되고 있는 서버에 도커를 설치하게 되었고 host 서버에 설치되어 있는 Grafana와 Prometheus를 도커로 옮기기로 결정하였다. 

 

일단 이런 모니터링툴을 도입하게 된 계기는 현재 배치프로젝트를 돌리는데 얼마나 많은 리소스를 사용하고 있으며, 이러한 리소스를 관리 차원에서 눈으로 직접 확인하기위해 적용 했다. 

 

이런 Prometheus와 Grafana는 배치 프로젝트 뿐만아니라 다양한 정보(DB, API) 등 을 수집하여 모니터링을 띄워줄 수 있다. 

 

 

Prometheus(프로메테우스) 란?

 

오픈소스로 된 모니터링 툴이다.

 

 

프로메테우스 아키텍쳐

 

간단히 설명하자면 아래와 같다.

Jobs/exportes는 실제 로 *매트릭을 수집하는 프로세스라고 보면된다. 

 

여기서 매트릭 (Metrics)이란 타임스탬프와 보통 한 두가지 숫자 값을 포함하는 이벤트 이다.  

로그와 달리 매트릭은 주기적으로 보내며 리소스 사용모니터링, 테이버테이스 실행 매트릭 등 에서 사용된다. 

 

다시 본론으로 돌아가 exporter 가 매트릭을 수집하고 HTTP 통신을 통해 매트릭 데이터를 가져갈 수 있게 /metrics 라는 HTTP endpoint를 제공한다.

 

그러면 Prometheus server가 이 endpoint로 HTTP GET 요청을 날려 매트릭 정보를 수집(Pull) 한다. 

 

수집한 정보를 Prometheus가 제공하는 간단한 웹뷰를 통해 조회할 수 있고, 혹은 Grafana라는 시계열 데이터에 대한 대시보드를 제공해주는 Data Visualization Tool로 조회할 수 있다.

 

그래서 보통 Prometheus와 Grafana를 함께 사용한다. 

 

왜 Prometheus를 사용하는지에 대한 의문을 가질것 같아 장점을 가져왔다.

 

  • 다차원 데이터 모델 가능 (Metrics 이름과 key-value를 활용하면 다차원 데이터 모델이 된다. 뒤에서 다시 설명)
  • 다차원 데이터 모델을 활용할 수 있는 유연한 쿼리 언어 (PromQL)
  • 분산 스토리지에 대해서 어떠한 의존성도 없음. 
  • 모든 데이터는 HTTP (REST) Pull 기반으로 가져온다. 물론 Push도 가능은 함
  • 모니터링 타겟은 프로메테우스의 YAML 설정값을 통해 Discovery
  • Vertical - Horizontal Federation 가능 (상위-하위 구조를 통한 Aggregation 가능)

 

 

 

 

 Grafana란?  

 

 

암모나이트 화석같이 생겼다 ㅋ

 

위에서 짧게 설명했듯이 대시보드를 제공해주는 Tool이다.

시각화한 그래프에서 특정수치를 넘으면 알람을 보내줄 수 있는 기능도 있다. (이거로 텔레그램 알람을 현재 보내는중) 

 

텔레그램으로 알람을 보내는법은 나중에 다시 설명하기로 하고...

 

일단 현재 실행되고 있는 Grafana를 보자.

 

 

리소스를 얼마나 사용하고 있는지 한눈에 보기 편하지않은가..?

 

Grafana의 데이터들은 Prometheus에서 수집한 것이다. 

 

Prometheus에서 수집되는 데이터는 다음과 같다.

  • 로그 이벤트
  • process cpu 정보
  • hikaricp 풀 정보 (DB 연결 정보)
  • http 서버 요청/응답 정보
  • jvm 메모리 정보

Grafana는 Prometheus에서 수집된 매트릭을 이용하여 시각화를 해주는 툴이다. 

 

Prometheus 적용

 

 

먼저 저렇게 리소스를 확인할 프로젝트의 pom.xml에 의존성을 추가해줘야 한다. 

 

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>io.micrometer</groupId>
			<artifactId>micrometer-registry-prometheus</artifactId>
		</dependency>

 

application properties에도 

 

spring.application.name=CF-Engine
management.metrics.export.prometheus.pushgateway.base-url=http://주소:포트번호
management.endpoints.web.exposure.include=prometheus
management.metrics.tags.application=${spring.application.name}

 

설정해준다.

 

이제 Application을 실행하고 http://localhost:8080/actuator로 아래와 같이 Prometheus 메트릭 노출 Endpoint가 존재하는지 확인한다.

 

노출된 Endpoint Link인 http://localhost:8080/actuator/prometheus로 아래와 같이 Prometheus가 수집할 Metric들이 노출되는지 확인한다.

 

 

 

 

먼저 도커 컨테이너를 실행하기 앞서 Prometheus의 설정파일을 쉽게 관리하기위해 Promethues Contaier 안에 있는 

prometheus.yml을 host의 prometheus.yml로 마운트 시킬 것이다.

 

 

/data/prometheus 디렉토리를 생성하고 prometheus.yml을 vi 편집기로 열고 아래처럼 입력해주자.

 

scrape_cofigs 말고도 Alertmanager 설정등 다른 설정도 할수 있는데 참조해 놓은 블로그에서 다루고 있으니 확인하면 좋을듯 하다.

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
scrape_configs:
  - job_name: 'springboot'
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['x.x.x.x:9090']

targets은 현재 배치프로젝트가 실행되고 있는 서버이다. 

 

다음으론 위에 작성된 파일을 컨테이너와 공유하면서 prometheus를 실행시킬 명령어를 입력해야 한다. 

 

docker run --rm -d -p 9090:9090 -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

9090포트로 바인딩을 시켜주고 아까 생성한 prometheus.yml 파일을 마운트시켜주면서 컨테이너를 실행시켰다.

 

 

일단 여기까지 하면 Prometheus의 설정을 끝났고..

 

이제 Grafana 설치 및 Prometheus , Grafana를 Compose 해주면 된다. 

 

 

2탄에서 이어집니다. 

 

yous3163.tistory.com/42

 

Prometheus , Grafana (docker-compose) 적용 해보기 (2)

yous3163.tistory.com/41 Prometheus , Grafana (docker-compose) 적용 해보기 (1) 현재 운영되고 있는 서버에 도커를 설치하게 되었고 host 서버에 설치되어 있는 Grafana와 Prometheus를 도커로 옮기기로 결정하..

yous3163.tistory.com

 

 

참조


medium.com/finda-tech/prometheus%EB%9E%80-cf52c9a8785f

 

Prometheus란?

오픈소스 모니터링 툴 Prometheus에 대해서 알아보자.

medium.com

 

 

 

 

 

728x90