You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
쉽게 이야기해서 게이지는 오르락 내리락 하는 값이고, 카운터는 특정 이벤트가 발생할 때 마다 그 수를 계속 누적하는 값이다.
게이지(Guage)
💡
임의로 오르내릴 수 있는 값
ex) CPU 사용량, 메모리 사용량, 사용중인 커넥션
예를 들어서 대표적인 게이지인 CPU 사용량(system_cpu_usage)을 생각해보자. CPU 사용량의 현재 상태를 계속 측정하고 그 값을 그대로 그래프에 출력하면 과거부터 지금까지의 CPU 사용량을 확인할 수 있다.
게이지는 가장 단순하고 사용하기 쉬운 메트릭이다. 크게 고민하지 않고 있는 그대로를 사용하면 된다.
카운터(Counter)
💡
단순하게 증가하는 단일 누적 값
ex) HTTP 요청 수, 로그 발생 수
예를 들어서 고객의 HTTP 요청수를 떠올려 보면 바로 이해가 될 것이다.
HTTP 요청을 그래프로 표현해보자.
**계속 증가하는 그래프** ex) `http_server_requests_seconds_count{uri="/log"}`
02:42 ~ 02:43: 80건 요청
02:43 ~ 02:46: 0건 요청
02:46 ~ 02:48: 약 50건 요청
HTTP 요청 메트릭을 그래프로 표현해보자. 카운터는 계속 누적해서 증가하는 값이다. 따라서 계속 증가하는 그래프만 보게 될 것이다. 이렇게 증가만 하는 그래프에서는 특정 시간에 얼마나 고객의 요청이 들어왔는지 한눈에 확인하기 매우 어렵다. 이런 문제를 해결하기 위해 increase(), rate() 같은 함수를 지원한다.
increase()
: increase() 를 사용하면 이런 문제를 해결할 수 있다. 지정한 시간 단위별로 증가를 확인할 수 있다. 마지막에 [시간] 을 사용해서 범위 벡터를 선택해야 한다.
사이트에 접속한 다음에 Copy Id to clipboard 를 선택하자. 또는 ID: 11378 이라고 되어 있는 부분의 숫자를 저장하자.
1️⃣ 대시보드 불러오기
그라파나에 접속하자
왼쪽 Dashboards 메뉴 선택
New 버튼 선택 ⇒ Import 선택
불러올 대시보드 숫자(11378)를 입력하고 Load 버튼 선택
를 선택하자.
Prometheus 데이터소스를 선택하고 Import 버튼 선택
대시보드를 확인해보면 거의 대부분의 메트릭을 대시보드에 표현한 것을 확인할 수 있다. 각각의 항목들을 보고 대시보드를 어떻게 구성해야 하는지도 학습할 수 있다. 참고로 일부 데이터의 경우 스프링 부트나 기타 라이브러리의 버전이 변함에 따라서 동작하지 않는 기능들도 있다. 이런 부분들은 수정해서 사용하자.
2️⃣ 불러온 대시보드 수정하기
대시보드를 수정하려면 먼저 수정모드로 변경해야 한다.
오른쪽 상단의 설정 버튼(톱니바퀴, Dashboard settings)을 선택 ⇒ Make editable 선택
3️⃣ Jetty 통계 ⇒ Tomcat 통계
이 대시보드는 톰캣이 아니라 Jetty라는 웹 서버를 기준으로 통계를 수집한다. 이 부분을 수정하자. Jetty Statistics 부분으로 이동한 다음 설정 버튼을 통해 Title을 Tomcat Statistics로 변경한다.
4️⃣ Thread Config Max 패널 설정 변경
jetty_threads_config_max ⇒ tomcat_threads_config_max_threads 로 변경
이미 잘 만들어진 대시보드를 활용하면 편리하게 모니터링 환경을 구성할 수 있다. 그리고 가져온 대시보드들을 분석해보면 필요한 대시보드를 만드는데 좋은 참고가 될 것이다.
(5) 그라파나 - 메트릭을 통한 문제 확인
애플리케이션에 문제가 발생했을 때 그라파나를 통해서 어떻게 모니터링 하는지 확인해보자.
실제 우리가 작성한 애플리케이션에 직접 문제를 발생시킨 다음에 그라파나를 통해서 문제를 어떻게 모니터링 할 수 있는지 확인해보자.
실무에서 주로 많이 발생하는 다음 4가지 대표적인 예시를 확인해보자.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
(5) 프로메테우스 - 게이지와 카운터
메트릭은 크게 보면 게이지와 카운터 2가지로 분류할 수 있다.
쉽게 이야기해서 게이지는 오르락 내리락 하는 값이고, 카운터는 특정 이벤트가 발생할 때 마다 그 수를 계속 누적하는 값이다.
게이지(Guage)
💡임의로 오르내릴 수 있는 값
system_cpu_usage)을 생각해보자. CPU 사용량의 현재 상태를 계속 측정하고 그 값을 그대로 그래프에 출력하면 과거부터 지금까지의 CPU 사용량을 확인할 수 있다.카운터(Counter)
💡단순하게 증가하는 단일 누적 값
HTTP 요청을 그래프로 표현해보자.
HTTP 요청 메트릭을 그래프로 표현해보자. 카운터는 계속 누적해서 증가하는 값이다. 따라서 계속 증가하는 그래프만 보게 될 것이다. 이렇게 증가만 하는 그래프에서는 특정 시간에 얼마나 고객의 요청이 들어왔는지 한눈에 확인하기 매우 어렵다. 이런 문제를 해결하기 위해
increase(),rate()같은 함수를 지원한다.increase(): increase() 를 사용하면 이런 문제를 해결할 수 있다. 지정한 시간 단위별로 증가를 확인할 수 있다. 마지막에 [시간] 을 사용해서 범위 벡터를 선택해야 한다.
increase(http_server_requests_seconds_count{uri="/log"}[1m])시간 단위 요청 그래프
분당 얼마나 고객의 요청이 어느정도 증가했는지 한눈에 파악할 수 있다.
rate(): 범위 백터에서 초당 평균 증가율을 계산한다.
increase()가 숫자를 직접 카운트 한다면,rate()는 여기에 초당 평균을 나누어서 계산한다.rate(data[1m])에서[1m]이라고 하면 60초가 기준이 되므로 60을 나눈 수이다.rate(data[2m])에서[2m]이라고 하면 120초가 기준이 되므로 120을 나눈 수이다.너무 복잡하게 생각하기 보다는 초당 얼마나 증가하는지 나타내는 지표로 보면 된다.
자세한 계산 공식은 공식 메뉴얼을 참고하자.
irate(): rate() 와 유사한데, 범위 벡터에서 초당 순간 증가율을 계산한다. 급격하게 증가한 내용을 확인하기 좋다. 자세한 계산 공식은 공식 메뉴얼을 참고하자.
정리
게이지: 값이 계속 변하는 게이지는 현재 값을 그대로 그래프로 표현하면 된다.
카운터: 값이 단조롭게 증가하는 카운터는 increase(), rate() 등을 사용하여 표현하면 된다. 이렇게 하면 카운터에서 특정 시간에 얼마나 고객의 요청이 들어왔는지 확인할 수 있다.
프로메테우스의 단점은 한눈에 들어오는 대시보드를 만들어보기 어렵다는 점이다. 이 부분은 그라파나를 사용하면 된다.
2.3 그라파나
(1) 그라파나 - 설치
다운로드 - 윈도우 사용자
https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.6.windows-amd64.zip
다운로드 - MAC 사용자
https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.6.darwin-amd64.tar.gz
실행 - MAC
bin폴더로 이동./grafana-server실행 - 윈도우
bin폴더로 이동grafana-server.exe실행윈도우의 경우 Windows의 PC 보호 화면이 나올 수 있으므로, 앞의 프로메테우스 설치를 참고해서 문제를 해결하자.
별 반응이 없어도 웹 브라우저를 열어서 http://localhost:3000/ 에 접속하자.
MAC의 경우 실행하면 다음과 같은 경고 메시지가 나온다.
앞의 프로메테우스 설치를 참고해서 문제를 해결하자.
(시스템 환경설정 보안 및 개인 정보 보호로 이동해서 해결)
실행
adminadmin그 다음에 Skip을 선택하면 된다.
다음과 같은 화면이 나오면 설치 성공이다.
(2) 그라파나 - 연동
💡그라파나는 프로메테우스를 통해서 데이터를 조회하고 보여주는 역할을 한다. 쉽게 이야기해서 그라파나는 대시보드의 껍데기 역할을 한다. (데이터는 프로메테우스를 통해서 조회해야 한다!)
먼저 그라파나에서 프로메테우스를 데이터소스로 사용해서 데이터를 읽어와야 한다. 이 부분을 설정해보자.
1️⃣ 그라파나 데이터소스 추가 화면
Add data source를 선택한다.2️⃣ Prometheus 데이터 소스 설정
http://localhost:90903️⃣ 다음을 통해 설정이 완료된 것을 확인할 수 있다.
(3) 그라파나 - 대시보드 만들기
이번시간에는 그라파나를 사용해서 주요 메트릭을 대시보드로 만들어보자
먼저 다음 3가지를 꼭 수행해두어야 한다.
1️⃣ 대시보드 만들기
대시보드 저장
New버튼 선택 ⇒New Dashboard선택Save dashboard저장 버튼(disk 모양) 선택대시보드 확인
2️⃣ 패널 만들기
대시보드에 패널 만들기
대시보드가 큰 틀이라면 패널은 그 안에 모듈처럼 들어가는 실제 그래프를 보여주는 컴포넌트이다.
Add panel버튼(차트 모양) 선택Add a new panel메뉴 선택Run queries버튼 오른쪽에Builder,Code라는 버튼이 보이는데,Code를 선택하자.3️⃣ CPU 메트릭 만들기
다음 메트릭을 패널에 추가해보자.
system_cpu_usage: 시스템의 CPU 사용량process_cpu_usage: JVM 프로세스 CPU 사용량PromQL 에 system_cpu_usage 를 입력하고 Run queries 버튼을 선택하자
패널에 시스템 CPU 사용량을 그래프로 확인할 수 있다.
process_cpu_usage 도 하나의 그래프에서 함께 확인하자. 이렇게 하려면 화면 하단의
+ Query버튼을 선택해야 한다.추가한 부분의
PromQL에 process_cpu_usage 를 입력하고Run queries버튼을 선택하자패널에 프로세스 CPU 사용량이 추가된 것을 확인할 수 있다.
그래프의 데이터 이름 변경
패널 그래프 하단을 보면 범례(Legend)라고 하는 차트에 제공하는 데이터 종류를 구분하는 텍스트가 JSON으로 표시되어 있다. 이 부분을 수정해보자.
system_cpu_usage를 입력한 곳에 가서 하단의Options를 선택한다.Legend를 선택하고 Custom 을 선택한다.system cpu를 입력한다.process_cpu_usage를 입력한 곳에 가서 하단의Options를 선택한다.Legend를 선택하고 Custom 을 선택한다.process cpu를 입력한다.패널 이름 설정
오른쪽에 보면
Panel options라는 부분을 확인할 수 있다. 다음과 같이 수정하자Title: CPU 사용량패널 저장하기
화면 오른쪽 상단의
Save또는Apply버튼을 선택한다.대시보드로 돌아오면 추가된 패널을 확인할 수 있다.
4️⃣ 디스크 사용량 추가하기
패널을 추가하고 다음 항목을 입력하자
패널 옵션
Title: 디스크 사용량PromQL
disk_total_bytesLegend: 전체 용량+Query로 다음을 추가하자disk_total_bytes - disk_free_bytesLegend: 사용 용량그래프 데이터 사이즈 변경
Standard options⇒Unit⇒Data⇒bytes(SI)를 선택하자.최소값 변경
Standard options⇒Min⇒0을 선택하자.패널을 움직여서 적당한 곳에 자리를 잡아보자.
정리
지금까지 CPU 사용량, 디스크 사용량 메트릭을 대시보드에 추가했다.
이제 앞서 학습한 다음과 같은 메트릭을 하나하나 추가하면 된다.
그런데 이렇게 하나하나 직접 대시보드를 입력하는 것도 참으로 힘든 일이다. 그라파나는 이미 만들어둔 대시보드를 가져다가 사용할 수 있는 기능을 제공한다.
(4) 그라파나 - 공유 대시보드 활용
다음 사이트에 접속하자
https://grafana.com/grafana/dashboards
이미 누군가 만들어둔 수 많은 대시보드가 공개되어 있다. 우리는 스프링 부트와 마이크로미터를 사용해서 만든 대시보드를 가져다가 사용해보자
검색창에 spring이라고 검색해보면 다양한 대시보드를 확인할 수 있다.
그 중에 인기 있고, 동작하는 다음 대시보드를 불러와서 사용해보자.
스프링 부트 시스템 모니터 대시보드 불러오기
https://grafana.com/grafana/dashboards/11378-justai-system-monitor/
사이트에 접속한 다음에
Copy Id to clipboard를 선택하자. 또는ID: 11378이라고 되어 있는 부분의 숫자를 저장하자.1️⃣ 대시보드 불러오기
그라파나에 접속하자
New버튼 선택 ⇒Import선택11378)를 입력하고Load버튼 선택를 선택하자.
Import버튼 선택대시보드를 확인해보면 거의 대부분의 메트릭을 대시보드에 표현한 것을 확인할 수 있다. 각각의 항목들을 보고 대시보드를 어떻게 구성해야 하는지도 학습할 수 있다. 참고로 일부 데이터의 경우 스프링 부트나 기타 라이브러리의 버전이 변함에 따라서 동작하지 않는 기능들도 있다. 이런 부분들은 수정해서 사용하자.
2️⃣ 불러온 대시보드 수정하기
대시보드를 수정하려면 먼저 수정모드로 변경해야 한다.
오른쪽 상단의 설정 버튼(톱니바퀴, Dashboard settings)을 선택 ⇒
Make editable선택3️⃣ Jetty 통계 ⇒ Tomcat 통계
이 대시보드는 톰캣이 아니라 Jetty라는 웹 서버를 기준으로 통계를 수집한다. 이 부분을 수정하자. Jetty Statistics 부분으로 이동한 다음 설정 버튼을 통해 Title을 Tomcat Statistics로 변경한다.
4️⃣ Thread Config Max 패널 설정 변경
jetty_threads_config_max⇒tomcat_threads_config_max_threads로 변경Thread 패널 설정 변경
jetty_threads_current⇒tomcat_threads_current_threadsjetty_threads_busy⇒tomcat_threads_busy_threadsjetty_threads_idle⇒ 제거jetty_threads_jobs⇒ 제거5️⃣ 마이크로미터 대시보드 불러오기
다음 대시보드도 유용한 많은 정보를 제공한다. 이 대시보드도 추가해서 사용하자.
https://grafana.com/grafana/dashboards/4701-jvm-micrometer/
정리
이미 잘 만들어진 대시보드를 활용하면 편리하게 모니터링 환경을 구성할 수 있다. 그리고 가져온 대시보드들을 분석해보면 필요한 대시보드를 만드는데 좋은 참고가 될 것이다.
(5) 그라파나 - 메트릭을 통한 문제 확인
애플리케이션에 문제가 발생했을 때 그라파나를 통해서 어떻게 모니터링 하는지 확인해보자.
실제 우리가 작성한 애플리케이션에 직접 문제를 발생시킨 다음에 그라파나를 통해서 문제를 어떻게 모니터링 할 수 있는지 확인해보자.
실무에서 주로 많이 발생하는 다음 4가지 대표적인 예시를 확인해보자.
1️⃣ CPU 사용량 초과
CPU에 간단히 부하를 주는 코드를 작성해보자.
TrafficController- cpu() 추가실행
http://localhost:8080/cpu
결과
대시보드를 확인해보면 CPU 사용량이 증가하는 것을 확인할 수 있다. 아마 요청 하나당 코어 하나를 100% 사용할 것이다. 더 많이 요청하면 더 많은 CPU를 사용한다.
2️⃣ JVM 메모리 사용량 초과
메모리 사용을 누적하는 코드를 추가해보자.
TrafficController- jvm() 추가리스트에 문자를 계속해서 추가한다.
실행
http://localhost:8080/jvm
(여러 번 요청하고 JVM 메모리 사용량을 확인하자)
결과
계속 요청하면서 대시보드를 확인해보면 JVM 메모리 사용량이 계속 증가하다가 최대치를 넘는 순간 메트릭이 잡히지 않는다.
JVM 내부에서 OOM이 발생했기 때문이다.
기다려보면 애플리케이션 로그에서 다음과 같은 오류를 확인할 수 있다.
java.lang.OutOfMemoryError: Java heap space
3️⃣ 커넥션 풀 고갈
TrafficController- jdbc() 추가실행
http://localhost:8080/jdbc
(10번 이상 실행하자)
결과
Active 커넥션이 커넥션 풀의 최대 숫자인 10개를 넘어가게 되면, 커넥션을 획득하기 위해 대기(Pending)하게 된다. 그래서 커넥션 획득 부분에서 쓰레드가 대기하게 되고 결과적으로 HTTP 요청을 응답하지 못한다.
DB 커넥션을 획득하기 위해 대기하던 톰캣 쓰레드가 30초 이상 DB 커넥션을 획득하지 못하면 다음과 같은 예외가 발생하면서 커넥션 획득을 포기한다.
Connection is not available, request timed out after 30004ms.
4️⃣ 에러 로그 급증
애플리케이션에서
ERROR레벨의 로그가 급증한다면 심각한 문제가 발생한 것으로 이해할 수 있다.TrafficController- errorLog() 추가실행
http://localhost:8080/error-log
(여러 번 실행하자)
결과
ERROR Logs,logback_events_total메트릭에서ERROR로그가 급증하는 것을 확인할 수 있다.Beta Was this translation helpful? Give feedback.
All reactions