////
Search

6장 - 안정적 운영을 완성하는 모니터링, 프로메테우스와 그라파나

Created
2022/09/03 11:25
Tags
컨테이너 인프라 환경에서 가장 권장하는 모니터링 도구는 프로메테우스와 그라파나

6.1 컨테이너 인프라 환경 모니터링 하기

bpytop은 현재 노드에 대한 정보만 보여줄 뿐 다수의 노드로 구성된 클러스터 정보를 모두 표현하기는 어렵다.
때문에 이러한 정보를 수집/분류해 저장해야 함
거의 모든 모니터링은 수집 → 통합 → 시각화 구조로 되어있음
모니터링을 위한 3단계 구조
우리가 구축한 컨테이너 인프라 환경에서는 모니터링 데이터를 프로메테우스로 수집 하고 정보를 한곳에 모아 그라파나로 시각화합니다.

6.1.1 모니터링 도구 선택하기

프로메테우스와 그라파나는 오픈 소스 도구다.
오픈 소스는 가능한 한 단일 도구에서 단일 기능만을 구현하는 것을 선호함
데이터의 수집과 통합, 시각화는 서로 다른 영역이고 이를 함께 구현하지 않으려는 경향이 있음
프로메테우스와 그라파나의 혼합 구조를 사용하는 이유는 크게 2가지
오픈 소스이기 때문에 비용이 들지 않음
서비스형 모니터링 도구들은 대부분 외부에 데이터를 저장해 모니터링 하기 때문에 보안성을 위해서 프+그 조합을 사용함

데이터 수집과 통합 도구

구분
프로메테우스
데이터독
뉴 렐릭
인플럭스DB
가격
무료
유료
유료
유/무료
형태
설치형
서비스형
서비스형
서비스형/설치형
참고 사항
매우 많음
많음
많음
많음
기능 확장성
매우 많음
좋음
많음
좋음
프로메테우스
사운드클라우드에서 자사 서비스의 모니터링을 위해 개발한 도구
중앙 서버에서 에이전트의 데이터를 수집하는 풀 방식을 사용하므로 노드와 컨테이너 상태를 모두 수집해 모니터링 가능
데이터독
SaaS형태의 모니터링 도구
뉴 렐릭
애플리케이션 성능 모니터링에 더 특화되어 있음
인플럭스DB
인플럭스에서 개발한 시계열 데이터베이스
인플럭스가 프로메테우스에 비해 쓰기가 우수함
프로메테우스보다 구성이 상대적으로 어려움

데이터 시각화 도구

구분
그라파나
키바나
크로노그래피
가격
유/무료
유/무료
유/무료
형태
서비스형/설치형
서비스형/설치형
서비스형/설치형
시각화 대상
다양한 대상 시각화 기능
엘라스틱서치
인플럭스DB
정보량
많음
많음
적음
기능 확장성
좋음
좋음
적음

6.1.2 쿠버네티스 환경에 적합한 모니터링 데이터 수집 방법

리소스 메트릭 파이프라인 형태인 메트릭 서버의 모니터링 구조
쿠버네티스 노드는 kubelet을 통해 파드를 관리하며, 파드의 CPU나 메모리 같은 메트릭 정보를 수집하기 위해 kubelet에 내장된 cAdvisor을 사용함
cAdvisor은 구글이 만든 컨테이너 메트릭 수집도구로, 쿠버네티스 클러스터 위에 배포된 여러 컨테이너가 사용하는 메트릭 정보를 수집한 후 이를 가공해 kubelet에 전달하는 역할을 함
메트릭 서버에서 수집한 데이터로 여러 기능을 수행하도록 구성한 것을 리소스 메트릭 파이프라인 이라함
메트릭 서버는 집계한 데이터를 메모리에만 저장하므로 데이터를 영구적으로 보존하기 어렵고 현재 시점의 데이터만 출려됨
그래서 메트릭 데이터를 저장 공간에 따로 저장하는 완전한 모티너링 파이프라인으로 구축하기를 권장함
완전한 모니터링 파이프라인 형태인 프로메테우스의 모니터링 구조
프로메테우스는 여러 수집대상이 공개하는 메트릭 데이터를 모아 시계열 데이터베이스에 저장

6.2 프로메테우스로 모니터링 데이터 수집과 통합

프로메테우스는 많은 종류의 오브젝트를 설치함
프로메테우스 서버
프로메테우스의 주요 기능을 수행하는 요소
노드 익스포터 외 여러 대상에서 메트릭을 수집해 오는 수집기
수집한 시계열 메트릭 데이터를 저장하는 시계열 데이터베이스
저장된 데이터를 질의하거나 수집 대상의 상태를 확인하는 웹 UI
노드 익스포터
노드의 시스템 메트릭 정보를 HTTP로 공개하는 역할을 함
설치된 노드에서 특정 파일들을 읽고, 이를 프로메테우스 서버가 수집할 수 있는 메트릭 데이터로 변환 후 노드 익스포터에 HTTP 서버로 공개함
쿠버 스테이트 메트릭
API 서버로 쿠버네티스 클러스터의 여러 메트릭 데이터를 수집해 프로메테우스가 수집할 수 있는 메트릭 데이터로 변환 후 공개하는 역할
얼럿매니저
프로메테우스에 경보 규칙을 설정하고 경보 이벤트 발생시 경보 메시지 대상에게 전달하는 역할
프로메테우스에 설치시 서버에 주기적으로 경보를 보낼 대상을 감시해 시스템 안정성 높힘
푸시게이트
배치와 스케줄 작업 시 수행되는 일회성 작업들의 상태를 저장하고 모아서 프로메테우스가 주기적으로 가져갈 수 있도록 공개
일반적으로 짧은 시간동안 실행되고 종료되는 배치성 프로그램의 메트릭을 저장하거나 외부에서 접근할 수 없는 내부 시스템의 메트릭을 프록시 형태로 제공하는 용도로 사용

서비스 디스커버리로 수집 대상 가져오기

프로메테우스는 수집 대상을 자동으로 인식하고 필요한 정보를 수집
정보를 수집하기 위해 에이전트를 설정해야 하지만, 쿠버네티스는 사용자가 에이전트에 추가로 입력할 필요 없이 자동으로 매트릭을 수집할 수 있음
프로메테우스 서버가 수집 대상을 가져오는 방법인 서비스 디스커버리 덕분임
서비스 디스커버리의 순서
1. 프로메테우스 서버는 컨피그맵에 기록된 내용을 바탕으로 대상을 읽어옴 2. 읽어온 대상에 대한 메트릭을 가져오기 위해 API 서버에 정보를 요청함 3. 요청을 통해 알아온 메트릭 데이터를 수집하기 시작
SQL
복사
[사진 6-15 넣기]
서비스 디스커버리 방법은 대상에 따라 크게 2가지 경로로 나뉨
쿠버네티스 API 서버에 직접 연결돼 메트릭을 수집하는 cAdvistor
API 서버가 경로를 알려주어 메트릭을 수집하는 에이전트
프로메테우스는 에이전트를 보통 익스포터라 부름

멀티 컨테이너 패턴

파드 내부에 컨테이너 여러 개를 구성하는 방법은 몇 가지 있음
[사진 6-23 넣기]
사이드카
메인 컨테이너의 기능을 확장하거나 기능을 향상하고자 할 때 추가하는 패턴
앰배서더
사용자가 외부에서 접근할 때 앰배서더 컨테이너를 통해 통신이 이루어지는 형태
세부적인 외부 접근 대상이나 방법은 앰배서더 컨테이너에 위임
어댑터
메인 컨테이너의 정보를 외부에서 사용할 수 있는 형식으로 변환하는 컨테이너가 추가된 형식의 패턴

6.3 PromQL로 메트릭 데이터 추출하기

수집된 메트릭 데이터를 그대로 사용하기보다는 필요한 메트릭 데이터를 다시 한 번 가공해서 추출하는 경우가 더 많음
필요한 메트릭 데이터를 정확하게 추출하려면 PromQL을 알아야함

6.3.1 메트릭 데이터의 구조

메트릭 값의 종류

카운터 타입
node_cpu_seconds_total, kube_pod_container_status_restarts_total 등 누적되는 데이터
카운터에 누적된 값으로 구간변 변화율을 파악해 해당 값이 어느 정도로 추세로 증가했는지 알 수 있음
이벤트나 오류 등의 급증하는 구간을 파악하는데 적합
게이지 타입
특정 시점의 값을 표현하는 데 사용하는 메트릭 타입
카운터가 누적된 값을 표현해 증가만을 고려하는 것과 달리 게이지는 시점별로 증가나 감소를 모두 표현할 수 있음
히스토그램
사전에 미리 정의한 구간 안에 있는 메트릭 값의 빈도를 측정
익스포터를 구현하는 단계에서 정의한 구간을 버킷이라 함
서머리
히스토그램과 비슷한 구간 내에 있는 메트릭 값의 빈도를 측정
히스토그램과 달리 구간이 지정되어 있는 것이 아닌 프로메테우스 자체로 0~1 구간을 미리 정해 놓음

메트릭 레이블

모든 메트릭 데이터는 하나 이상의 레이블을 가짐
프로메테우스의 레이블은 일반적인 주석이 아닌 메트릭 데이터의 다양한 내용을 표현하는 유일한 방법
따라서 단순히 1~2개의 레이블이 아닌 제공하고 싶은 다수의 내용을 키-밸류 형태로 넣음

메트릭 레이블 매처

메트릭 레이블에 조건을 줘서 검색하는 방법을 레이블 매치라고 함
= 조건에 넣은 값과 값이 같은 메트릭을 보여줌
!= 조건에 넣은 값과 레이블 값이 다른 메트릭을 보여줌
=~ 조건에 넣은 정규 표현식에 해당하는 메트릭을 보여줌
!~ 조건에 넣은 정규 표현식에 해당하지 않는 메트릭을 보여줌

6.3.2 PromQL 연산자

비교 연산자 (==, !=, >, <, >=, <=)
레이블 매처와 유사한 형태지만 비교 대상이 숫자임
논리 연산자 (and, or)
수집된 메트릭에서 보고 싶은 범위를 지정하는 연산자
산술 연산자 (사측연산, 나머지, 지수)
연산자로 사용자가 원하는 값으로 변환
집계 연산자 (avg, sum, count)
수집된 메트릭을 종합하고 분석하는 연산자

6.3.3 PromQL 데이터 타입

레인지 셀렉터
메트릭 데이터를 받아노는 구간
레인지 벡터
구간이 있는 데이터 타입
스트링 타입
문자열을 표현
스칼라타입
실수 값을 표현
인스턴트 백터
일반적인 PromQL의 데이터 타입을 총칭하는 용어