Post

그라파나 설정하기

그라파나 설정하기

기존 서비스에 whatap이라는 apm을 사용해서 모니터링 중인데, 리눅스 서버 모니터링만 하고 있는 상태다. 자금 문제, 서버 스펙문제 등으로 인해 어플리케이션 모니터링은 불가능한 상태였는데, 힙사이즈나 GC 타이밍을 좀 보고싶어졌다. 운영중인 서비스가 메모리 관련 이슈가 분명 있는 것 같은데, 힙덤프를 떠봐도 메모리 누수 같은 문제는 보이지 않아서 해당 시점의 자세한 상황을 봐야 알 것 같았다.

이전에도 핀포인트나 스카우터 같은걸 설치해 보려는 시도는 했으나, 에이전트를 구동하자마자 서버가 뻗는 걸 봤기에 엄두도 못내고 있었는데, 그라파나는 웬지 될 것 같아서(?) 프라이빗하게 돌리고 있는 웹서비스에 실험을 해봤다. 얘는 터져도 큰 여파가 없기에…

설치 과정

Node Exporter

먼저 Node Exporter를 설치해준다. 그라파나는 조금 독특한게, 에이전트-서버 구성인 기존 apm들과는 다르게 클라이언트-서버-시각화 이런식으로 구성되어 있는 것 같다.

여기서 각 역할들을 대입해보자면 클라이언트(Node Exporter)-서버(Prometheus)-시각화(Grafana) 인 것 같다.

node exporter

먼저 위의 링크에서 자신의 서버 스펙과 맞는 파일을 다운로드해준다. 나는 amd64로 다운로드했다.

1
2
3
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz

압축해제한 폴더로 이동 후 서버를 실행시켜준다.

1
2
3
4
nohup ./node_exporter --web.listen-address=:실행시킬_포트번호 &

# ex)
# nohup ./node_exporter --web.listen-address=:8080 &

스크린샷 2024-03-12 233958

ip:port/metrics 로 접속시 수집된 정보를 확인할 수 있다.

만약 접속이 안된다면 방화벽 설정이나 클라우드 서비스 제공자의 보안 규칙을 확인해보자. CentOS 7 기준 방화벽 스크립트는 미래의 누군가를 위해 써놔야겠다.

1
2
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload

spring actuator

스프링 부트로 돌아가는 어플리케이션 모니터링을 위한 추가 설정을 해줬다. 전체적인 서버 자원만 모니터링한다면 해당 과정은 생략해도 된다.

1
2
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'io.micrometer:micrometer-registry-prometheus'

build.gradle에 다음과 같이 추가해 준다.

1
2
3
4
5
management:
  endpoints:
    web:
      exposure:
        include: health, info, prometheus

application.yml에는 다음과 같이 추가해준다.

Prometheus

Prometheus

위의 링크로 접속해서 서버와 맞는 파일을 다운로드 해준다.

1
2
3
wget https://github.com/prometheus/prometheus/releases/download/v2.48.1/prometheus-2.48.1.linux-amd64.tar.gz

tar xvfz prometheus-2.48.1.linux-amd64.tar.gz

압축을 해제한 폴더에 들어가 prometheus.yml 파일을 수정해주어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    
    # node exporter가 설치된 서버의 아이피:포트
    static_configs:
      - targets: ["아이피:포트"]

    # 스프링 어플리케이션이 실행되는 서버의 아이피:포트
  - job_name: "spring-boot"
    metrics_path: "/actuator/prometheus"
    static_configs:
      - targets: ["아이피:포트"]

다음과 같이 상황에 맞게 설정해준다. 이제 프로메테우스를 실행해본다.

1
nohup ./prometheus --config.file=prometheus.yml --web.listen-address=:실행할_포트번호 > prometheus.log 2>&1 &

아이피:포트번호 로 접속해본다. 정상적으로 설정되었다면 이런 창이 뜬다.

스크린샷 2024-03-12 235146

여기서 상단 메뉴의 Status -> Targets로 들어가본다.

스크린샷 2024-03-12 235242

Status가 초록초록하다면 잘 수집하고 있다는 뜻이다.

Grafana

grafana

위의 링크로 접속해서 설치해준다. 압축파일로 받는게 편한 것 같다.

1
2
3
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.0.5.linux-amd64.tar.gz

tar -zxvf grafana-enterprise-9.0.5.linux-amd64.tar.gz

압축해제후 /bin 폴더에서 서버를 실행해준다.

1
nohup ./grafana-server > grafana.log 2>&1 &

기본 실행 포트는 3000번이다. 서버 실행 후 아이피:3000 으로 접속하면 로그인 창이 뜨는데, 초기 설정은 id 비밀번호 모두 admin이다. 로그인 후 비밀번호 변경 창이 뜨니까 바꿔주자.

grafana dashboard 로 가서 템플릿을 줍줍해야 한다. 그전에 Configuration -> Data sources에 가서 프로메테우스를 등록해주자. Add Datasource를 클릭한다.

스크린샷 2024-03-13 000059

프로메테우스를 선택한다.

스크린샷 2024-03-13 000133

값을 알맞게 잘 넣고 맨 하단의 Save & test 버튼을 눌러 확인한다. 테스트가 성공했다면 초록불과 함께 저장된다.

스크린샷 2024-03-13 000213

이제 템플릿을 줍줍할 시간이다.

Node Exporter Full, JVM (Micrometer), Spring Boot 2.1 System Monitor 등 필요하거나 마음에 드는 템플릿의 id값을 복사해온다.

Dashboard -> import에 들어간 후 id값을 넣어주고, 몇 가지 설정만 하면 대시보드 확인이 가능하다. 나는 이미 추가된 상태라 빨간 경고들이 뜬다.

스크린샷 2024-03-13 000609

설정 완료 시 다음과 같은 대시보드들을 확인할 수 있다.

스크린샷 2024-03-12 172909

후기

생각보다 메모리 사용량이 얼마 안되는 것 같다. 데이터를 가공해서 보내는 기존의 에이전트 방식이 아니라 그런가, 메모리 사용량을 잡아봤는데 10MB 언저리다. 운영중인 서비스에 도입해봐도 큰 문제가 없을 것 같다.

스크린샷 2024-03-12 172620

참고

  • https://velog.io/@sojukang/%EC%84%B8%EC%83%81%EC%97%90%EC%84%9C-%EC%A0%9C%EC%9D%BC-%EC%89%AC%EC%9A%B4-Prometheus-Grafana-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EC%84%A4%EC%A0%95

  • https://hapajay.tistory.com/82

  • https://owin2828.github.io/devlog/2020/03/13/etc-6.html

This post is licensed under CC BY 4.0 by the author.

© . Some rights reserved.

Using the Jekyll theme Chirpy