Grafana와 Prometheus는 현대적인 애플리케이션과 인프라스트럭처 모니터링을 위한 사실상의 표준 오픈소스 도구 조합이다. Prometheus는 시계열 데이터베이스와 강력한 쿼리 언어를 갖춘 메트릭 수집 및 경고 시스템이며, Grafana는 이러한 메트릭 데이터를 시각적으로 분석하고 대시보드로 표현하는 플랫폼이다. 두 도구는 함께 작동하여 시스템의 상태, 성능, 비즈니스 지표 등을 실시간으로 관찰하고 문제를 조기에 발견할 수 있는 환경을 제공한다.
이 조합의 핵심 가치는 오픈소스 생태계와 확장성에 있다. Prometheus는 풀 기반 모델을 통해 다양한 대상에서 메트릭을 수집하고, 다차원 데이터 모델과 PromQL이라는 유연한 쿼리 언어로 데이터를 처리한다. 수집된 데이터는 Grafana에 연결되어 직관적인 그래프, 차트, 게이지 등 다양한 시각화 요소로 변환된다. 이를 통해 개발자, 운영팀, 관리자는 복잡한 데이터를 쉽게 이해하고 인사이트를 도출할 수 있다.
주요 적용 분야는 클라우드 네이티브 환경과 마이크로서비스 아키텍처 모니터링이다. 컨테이너 오케스트레이션 플랫폼인 쿠버네티스와의 통합이 뛰어나며, 수많은 공식 및 커뮤니티 익스포터를 통해 애플리케이션, 데이터베이스, 하드웨어, 심지어 비즈니스 프로세스까지 광범위한 모니터링이 가능하다. 결과적으로 이 기술 스택은 시스템의 가용성과 성능을 보장하는 데 필수적인 역할을 한다.
Prometheus는 SoundCloud에서 개발한 오픈 소스 시스템 모니터링 및 경보 툴킷이다. 시계열 데이터베이스를 기반으로 하여, 다차원 데이터 모델과 유연한 쿼리 언어를 제공하는 것이 특징이다. 주로 컨테이너화된 환경과 마이크로서비스 아키텍처에서 애플리케이션 및 인프라의 성능 메트릭을 수집하고 분석하는 데 널리 사용된다.
Prometheus의 핵심 데이터 모델은 메트릭 이름과 키-값 쌍(레이블)으로 식별되는 시계열이다. 주요 메트릭 유형은 다음과 같다.
메트릭 유형 | 설명 | 예시 |
|---|---|---|
단조 증가하는 값. 재시작 시 0으로 초기화될 수 있다. | 총 HTTP 요청 수, 처리된 작업 수 | |
증가하거나 감소할 수 있는 현재 값. | CPU 사용률, 메모리 사용량, 활성 연결 수 | |
관측값을 버킷으로 샘플링하고, 합계와 개수를 제공한다. | HTTP 요청 지연 시간 분포 | |
Histogram과 유사하지만, 클라이언트 측에서 계산된 분위수를 제공한다. |
데이터 수집은 주로 풀(pull) 방식을 사용한다. Prometheus 서버는 설정된 대상(타겟)의 HTTP 엔드포인트에서 정기적으로 메트릭을 스크랩한다. 또한, 단기 실행 작업의 메트릭을 푸시할 수 있는 Pushgateway도 지원한다.
설치 및 구성은 비교적 간단하다. 공식 웹사이트에서 바이너리를 다운로드하거나, Docker 컨테이너, Kubernetes Helm 차트 등을 통해 배포할 수 있다. 핵심 구성 파일은 prometheus.yml로, 여기서 스크랩할 대상, 빈도, 규칙 파일 경로 등을 정의한다. 기본적으로 9090 포트에서 웹 UI와 API를 제공한다.
프로메테우스의 데이터 모델은 메트릭 이름과 키-값 쌍의 레이블로 식별되는 시계열 데이터를 중심으로 구성된다. 모든 메트릭은 고유한 이름을 가지며, 이 이름은 측정 대상의 일반적인 특성을 나타낸다(예: http_requests_total). 세부적인 차이(예: 요청 메서드, 엔드포인트, HTTP 상태 코드)는 레이블을 통해 구분된다. 이 레이블 시스템은 단일 메트릭 스트림을 다양한 차원으로 필터링, 그룹화, 집계하는 데 핵심적인 역할을 한다.
프로메테우스는 주로 네 가지 핵심 메트릭 유형을 지원한다. 가장 기본적인 형태는 단일 숫자 값을 가지는 카운터이다. 카운터는 단조 증가하는 값으로, 총 요청 수나 발생한 오류 수와 같은 누적량을 표현하는 데 사용된다. 게이지는 증가와 감소가 모두 가능한 현재의 측정값을 나타낸다. 메모리 사용량이나 활성 연결 수, 현재 온도와 같이 오르내릴 수 있는 값에 적합하다.
보다 복잡한 분포를 분석하기 위한 유형으로 히스토그램과 서머리가 있다. 히스토그램은 관찰값(주로 요청 지연 시간)을 버킷으로 나누어 샘플링하며, 각 버킷의 카운트와 모든 관찰값의 합을 제공한다. 이를 통해 특정 백분위수(예: 95번째 백분위수)의 응답 시간을 근사적으로 계산할 수 있다. 서머리도 유사하게 백분위수를 계산하지만, 슬라이딩 시간 창 내에서 계산을 수행하여 시간에 따른 변화를 더 정확하게 추적할 수 있다.
메트릭 유형 | 설명 | 주요 사용 사례 |
|---|---|---|
단조 증가하는 누적 카운트 값 | 총 HTTP 요청 수, 발생한 오류 수 | |
증가/감소가 가능한 현재의 측정값 | 메모리 사용량, 활성 스레드 수, 대기열 길이 | |
버킷으로 구분된 관찰값의 샘플링과 합계 | 요청 지연 시간 분포, 응답 크기 분포 | |
슬라이딩 시간 창 내의 관찰값에 대한 백분위수 계산 | 서비스 수준 목표(SLO) 모니터링 |
이러한 모든 메트릭 데이터는 타임스탬프와 함께 저장된다. 프로메테우스는 풀 기반 모델을 채택하여 정해진 간격으로 대상 애플리케이션의 HTTP 엔드포인트에서 메트릭을 수집한다. 수집된 원시 데이터는 프로메QL을 통해 쿼리, 집계, 변환되어 그라파나와 같은 시각화 도구에서 차트와 대시보드로 표현될 수 있는 형태가 된다.
PromQL은 Prometheus의 핵심 기능으로, 시계열 데이터를 선택하고 집계하는 데 사용되는 함수형 쿼리 언어이다. 이 언어를 통해 사용자는 저장된 메트릭 데이터를 실시간으로 조회하고, 계산하며, 결과를 시각화할 수 있다. PromQL의 기본 데이터 타입은 인스턴턴트 벡터와 레인지 벡터로 구분된다. 인스턴트 벡터는 특정 시점의 모든 시계열 샘플 값을 포함하고, 레인지 벡터는 지정된 시간 범위 내의 시계열 데이터를 포함한다.
PromQL의 표현식은 주로 메트릭 이름과 레이블 필터를 조합하여 구성된다. 예를 들어, http_requests_total{job="api-server", status="200"}은 job 레이블이 "api-server"이고 status 레이블이 "200"인 http_requests_total 메트릭의 모든 시계열을 선택한다. 레이블 매칭 연산자로는 =, !=, =~, !~를 사용할 수 있다.
연산자 유형 | 설명 | 예시 |
|---|---|---|
산술 연산자 | +, -, *, /, %, ^ |
|
비교 연산자 | ==, !=, >, <, >=, <= |
|
집계 연산자 | sum(), avg(), min(), max(), count() |
|
논리 연산자 | and, or, unless |
|
PromQL은 다양한 함수를 제공하여 데이터 분석을 지원한다. rate() 함수는 카운터 메트릭의 초당 평균 증가율을 계산하는 데 필수적이다. 예를 들어 rate(http_requests_total[5m])은 지난 5분 동안의 초당 HTTP 요청률을 반환한다. increase() 함수는 특정 시간 범위 동안의 절대 증가량을 계산한다. 히스토그램 및 서머리 메트릭을 다룰 때는 histogram_quantile() 함수를 사용하여 백분위수(예: 95번째 백분위수 지연 시간)를 계산할 수 있다. 이러한 함수와 연산자를 조합하여 복잡한 모니터링 로직과 경고 조건을 정의할 수 있다.
Prometheus의 설치는 공식 웹사이트에서 제공하는 바이너리 파일을 다운로드하거나, Docker 컨테이너, 패키지 관리자를 통해 수행할 수 있다. 주요 구성 요소로는 메트릭을 수집하고 저장하는 Prometheus 서버, 어플리케이션에서 메트릭을 노출하기 위한 클라이언트 라이브러리, 단기 작업을 모니터링하기 위한 Pushgateway, 그리고 알람을 처리하는 Alertmanager가 있다.
설치 후 핵심 구성 파일은 prometheus.yml이다. 이 파일은 글로벌 설정, 스크랩 설정, 규칙 파일의 위치, 알람 설정 등을 정의한다. 기본적인 구성은 다음과 같은 구조를 가진다.
```yaml
global:
scrape_interval: 15s
scrape_configs:
job_name: 'prometheus'
static_configs:
targets: ['localhost:9090']
```
scrape_configs 섹션은 Prometheus 서버가 메트릭을 수집할 대상(타겟)을 지정한다. 각 job은 논리적 그룹을 나타내며, static_configs를 통해 정적 IP 목록을 설정하거나, 서비스 디스커버리를 활용하여 Kubernetes, Consul, AWS 등의 동적 환경에서 타겟을 자동으로 발견하도록 구성할 수 있다.
서비스를 시작한 후, http://localhost:9090에서 Prometheus 웹 UI에 접근하여 상태를 확인하고 기본적인 PromQL 쿼리를 실행해볼 수 있다. 정상적으로 실행되면, up{job="prometheus"} 쿼리의 결과값이 1로 표시된다.
Grafana는 시계열 데이터를 시각화하고 분석하기 위한 오픈 소스 플랫폼이다. 주로 인프라와 애플리케이션 모니터링에 사용되며, 다양한 데이터 소스로부터 데이터를 쿼리하여 실시간 대시보드를 생성한다. 사용자는 웹 인터페이스를 통해 직관적으로 데이터를 탐색하고, 시스템 상태를 한눈에 파악할 수 있다. Grafana의 핵심 강점은 풍부한 시각화 옵션과 확장성에 있다.
Grafana의 작업 공간은 대시보드로 구성된다. 각 대시보드는 여러 개의 패널을 포함할 수 있으며, 패널은 데이터를 차트, 테이블, 게이지 등 다양한 형태로 표현하는 기본 단위이다. 사용자는 패널을 드래그 앤 드롭으로 자유롭게 배치하고 크기를 조절하여 맞춤형 뷰를 만들 수 있다. 각 패널은 독립적으로 데이터 소스와 쿼리를 설정하며, 이를 통해 단일 대시보드에서도 여러 시스템의 메트릭을 통합하여 볼 수 있다.
Grafana는 Prometheus, InfluxDB, Elasticsearch, MySQL 등 수십 가지 공식 및 커뮤니티 데이터 소스를 지원한다. 데이터 소스를 연결하려면 관리 메뉴에서 해당 데이터베이스의 유형, 접속 주소, 인증 정보 등을 설정하면 된다. 일단 연결되면, 모든 대시보드와 패널에서 이 데이터 소스를 선택하여 쿼리를 작성할 수 있다. 이는 다양한 모니터링 도구의 데이터를 하나의 플랫폼으로 통합하는 데 핵심적인 기능이다.
시각화 패널의 종류는 매우 다양하다. 가장 일반적인 것은 시계열 데이터를 선 그래프로 보여주는 "Graph" 패널이다. "Stat" 패널은 단일 숫자 값을 강조하여 표시하며, "Gauge" 패널은 게이지 형태로 현재 값을 보여준다. "Table" 패널은 데이터를 표 형식으로 정리하고, "Heatmap" 패널은 데이터의 분포와 밀도를 색상으로 표현한다. 또한, 텍스트 정보를 표시하는 "Text" 패널이나 로고를 넣는 "Dashboard list" 패널 등 비시각적 요소도 활용할 수 있다.
Grafana의 핵심 작업 공간은 대시보드이다. 대시보드는 하나 이상의 패널로 구성되며, 각 패널은 특정 데이터 소스에서 가져온 데이터를 시각적으로 표현한다. 대시보드는 시스템 상태, 애플리케이션 성능, 비즈니스 지표 등 다양한 정보를 한눈에 모아 보여주는 통합 보드 역할을 한다.
대시보드는 계층적 구조를 가진다. 최상위는 대시보드 자체이며, 그 안에는 행(Row)과 패널이 배치된다. 행은 패널을 논리적으로 그룹화하는 컨테이너 역할을 한다. 사용자는 행을 접거나 펼쳐서 대시보드 레이아웃을 정리할 수 있다. 각 패널은 독립적인 질의와 시각화 설정을 가지며, 그래프, 통계, 테이블, 게이지, 히트맵 등 다양한 형태로 데이터를 표시한다.
패널의 주요 구성 요소는 다음과 같다.
구성 요소 | 설명 |
|---|---|
데이터 소스 쿼리 | Prometheus의 PromQL이나 다른 데이터 소스의 쿼리를 정의하여 원하는 메트릭을 가져온다. |
시각화 타입 | 그래프, 싱글 스탯, 테이블, 바이주얼라이제이션 등 데이터를 표현할 방식을 선택한다. |
패널 옵션 | 제목, 설명, 투명도, 배경, 링크 등 패널의 외관과 동작을 세부 조정한다. |
필드 오버라이드 | 특정 시계열 데이터에 대해 색상, 단위, 임계값 표시 등을 개별적으로 재정의할 수 있다. |
이 구조는 사용자가 복잡한 모니터링 환경에서도 필요한 정보를 체계적으로 구성하고, 상황에 맞게 대시보드를 커스터마이즈할 수 있도록 한다. 대시보드와 패널은 JSON 형식으로 정의되어 버전 관리 및 공유가 용이하다.
Grafana는 다양한 데이터베이스와 시계열 데이터 소스를 연결하여 통합된 시각화를 제공하는 플랫폼이다. 데이터 소스 연결은 Grafana의 핵심 기능으로, Prometheus, InfluxDB, Graphite, Elasticsearch, MySQL, PostgreSQL 등 수십 가지 공식 및 커뮤니티 플러그인을 지원한다. 각 데이터 소스는 특정 쿼리 언어나 API를 통해 데이터를 조회하며, Grafana는 이를 표준화된 형식으로 변환하여 대시보드에 렌더링한다. 관리자는 웹 인터페이스의 'Configuration' > 'Data Sources' 메뉴에서 데이터 소스를 추가하고 구성한다.
데이터 소스 추가 과정은 일반적으로 몇 가지 공통 단계를 따른다. 먼저, 데이터 소스의 유형(예: Prometheus)을 선택한 후, 네트워크 접근 정보(URL, 포트)와 필요한 인증 정보(사용자 이름, 비밀번호, API 토큰 등)를 입력한다. 고급 설정에서는 최대 쿼리 타임아웃, 요청 간격, 알림 연동 등을 구성할 수 있다. 중요한 단계는 'Save & Test' 버튼을 클릭하여 Grafana가 해당 데이터 소스에 성공적으로 연결되고 기본 쿼리를 수행할 수 있는지 확인하는 것이다. 연결 테스트가 실패하면 네트워크 연결, 인증 정보, 데이터 소스 서비스 상태 등을 점검해야 한다.
구성 항목 | 설명 | 예시 |
|---|---|---|
Name | 대시보드에서 참조할 데이터 소스의 식별자 |
|
Type | 데이터 소스의 종류 |
|
URL | 데이터 소스 서버의 HTTP/HTTPS 주소 |
|
Access | 데이터 소스 접근 방식(브라우저/서버) |
|
Auth | 기본 인증, 자격 증명 위임 등의 설정 |
|
하나의 Grafana 인스턴스는 여러 개의 데이터 소스를 동시에 관리할 수 있으며, 대시보드 내의 서로 다른 패널이 각기 다른 데이터 소스를 참조하는 것도 가능하다. 이는 복합적인 모니터링 환경에서 중앙 집중식 뷰를 구성하는 데 필수적이다. 또한, 데이터 소스 연결 정보는 Grafana의 데이터베이스에 암호화되어 저장되며, 구성은 파일로 내보내거나 Terraform 같은 인프라 코드 도구를 통해 관리할 수 있다.
Grafana는 다양한 유형의 시각화 패널을 제공하여 메트릭 데이터를 효과적으로 표현할 수 있게 한다. 기본적인 패널로는 시간에 따른 데이터 흐름을 보여주는 시계열 그래프가 있으며, 이는 Prometheus에서 수집한 대부분의 데이터를 표시하는 데 가장 널리 사용된다. 현재 상태를 한눈에 파악하기 위해 단일 숫자 값을 크게 보여주는 스텟 패널도 자주 활용된다. 이 외에도 데이터 분포를 보여주는 히스토그램, 여러 시스템의 상태를 색상으로 구분해 표시하는 히트맵, 그리고 관계나 계층 구조를 시각화하는 노드 그래프 등이 있다.
각 패널은 사용자의 필요에 맞게 세밀하게 커스터마이징이 가능하다. 예를 들어, 시계열 그래프에서는 선의 색상, 두께, 그래프 유형(선, 막대, 점)을 변경할 수 있으며, Y축의 범위와 단위, 그리드 선의 간격 등을 조정할 수 있다. 스텟 패널에서는 값의 서식(예: 초, 퍼센트, 바이트), 배경 색상의 임계값, 그리고 값에 연결할 링크를 설정할 수 있다. 이러한 설정은 패널 옵션을 통해 직관적으로 구성할 수 있다.
보다 복잡한 데이터 표현을 위해 게이지, 바 차트, 파이 차트와 같은 전통적인 차트 유형도 지원한다. 또한, 로그나 이벤트 목록을 표 형식으로 보여주는 테이블 패널, 지리적 위치 데이터를 표시하는 지도 패널, 그리고 사용자가 직접 HTML과 JavaScript를 사용해 커스텀 시각화를 만들 수 있는 텍스트 패널도 포함되어 있다. 이러한 다양한 패널을 조합하여 하나의 대시보드에서 인프라, 애플리케이션, 비즈니스 메트릭을 포괄적으로 모니터링할 수 있다.
패널 유형 | 주요 용도 | 특징 |
|---|---|---|
시간 경과에 따른 메트릭 추이 시각화 | 선, 막대, 영역 그래프 지원, PromQL 쿼리와 직접 연동 | |
현재의 단일 핵심 지표 강조 | 큰 폰트로 표시, 임계값에 따른 색상 변화, 대시보드 요약에 적합 | |
시간대별 데이터 밀도 또는 값 분포 시각화 | 색상 강도로 값을 표현, 주로 요청 빈도나 지연 시간 분포에 사용 | |
측정값이 목표 범위 내에 있는지 표시 | 속도계나 반원형 게이지 형태, 시스템 한계치 모니터링에 유용 | |
로그, 이벤트 또는 정형화된 데이터 목록 표시 | 정렬 및 필터링 가능, 텍스트 기반 데이터 표시에 최적화 |
Grafana에서 Prometheus를 데이터 소스로 추가하는 것은 웹 UI를 통한 간단한 과정이다. 데이터 소스 설정 페이지에서 Prometheus 서버의 URL(예: http://prometheus:9090)을 입력하고, 필요에 따라 인증 정보나 스크랩 간격을 설정한다. 연결이 성공하면 Grafana는 해당 Prometheus 인스턴스에 저장된 모든 메트릭에 접근할 수 있게 된다.
대시보드를 구축할 때는 PromQL을 사용하여 원하는 메트릭을 쿼리한다. Grafana의 쿼리 편집기는 PromQL 구문을 지원하며, 자동 완성 기능을 통해 메트릭 이름이나 레이블을 쉽게 찾을 수 있다. 예를 들어, node_cpu_seconds_total{mode="idle"}과 같은 쿼리를 입력하여 CPU 유휴 시간을 가져오거나, rate(http_requests_total[5m])와 같이 함수를 적용해 요청률을 계산할 수 있다.
시각화 요소 | PromQL 쿼리 예시 | 설명 |
|---|---|---|
단순 그래프 |
| 서비스 가용성 상태를 0 또는 1로 표시 |
요청률 |
| 5분 간격의 초당 HTTP 요청률 계산 |
오류 비율 |
| 5xx 상태 코드의 요청 비율 계산 |
메모리 사용량 |
| 사용 중인 메모리 바이트 수 |
연동의 핵심은 PromQL의 강력한 집계 및 연산 기능을 Grafana의 다양한 시각화 패널(그래프, 싱글 스탯, 게이지, 테이블 등)과 결합하는 것이다. 이를 통해 정적 수치뿐만 아니라 시간에 따른 추이, 여러 서비스 간 비교, 임계값 초과 여부 등을 직관적인 대시보드로 만들 수 있다. 또한, 대시보드에 템플릿 변수를 정의하여 사용자가 환경, 서비스, 인스턴스 등을 동적으로 필터링할 수 있게 구성하는 것이 일반적이다.
Grafana에서 Prometheus를 데이터 소스로 추가하는 것은 메트릭 시각화를 위한 핵심 설정 단계이다. 이 과정은 Grafana 웹 인터페이스를 통해 이루어지며, Prometheus 서버의 네트워크 위치와 접근 정보를 구성하는 것을 포함한다.
구체적인 추가 절차는 다음과 같다. 먼저 Grafana 좌측 메뉴에서 톱니바퀴 아이콘의 '설정'을 클릭한 후, '데이터 소스' 메뉴로 이동한다. '데이터 소스 추가' 버튼을 눌러 목록에서 'Prometheus'를 선택한다. 구성 페이지에서는 주로 'HTTP' 섹션의 'URL' 필드에 Prometheus 서버의 주소(예: http://prometheus-server:9090)를 입력한다. 접근 제어가 필요한 경우 '인증' 섹션에서 적절한 방법을 선택하고 자격 증명을 제공한다. 설정이 완료되면 '저장 후 테스트' 버튼을 눌러 연결이 성공적으로 설정되었는지 확인한다[1].
성공적으로 추가된 Prometheus 데이터 소스는 이후 모든 대시보드에서 선택하여 사용할 수 있다. 데이터 소스 설정에는 쿼리 시간 초과, HTTP 메서드, 스크래핑 간격 오버라이드 등 고급 옵션도 포함되어 있으며, 특정 모니터링 요구사항에 맞게 조정할 수 있다. 하나의 Grafana 인스턴스에는 여러 개의 서로 다른 Prometheus 서버나 클러스터를 데이터 소스로 등록하는 것도 가능하여, 복잡한 환경에서의 통합 뷰를 구성하는 데 유용하다.
Grafana 대시보드에서 PromQL을 사용하려면, 먼저 Prometheus를 데이터 소스로 정상적으로 추가해야 합니다. 데이터 소스 연결 후, 새로운 패널을 생성하거나 기존 패널을 편집할 때 '쿼리' 편집기에서 PromQL 표현식을 직접 작성합니다. 쿼리 입력 필드에는 rate(http_requests_total[5m])나 up{job="api-server"}와 같은 PromQL 쿼리를 입력하고, 실행 결과를 즉시 확인하며 조정할 수 있습니다.
PromQL을 활용한 대시보드 구축은 단순한 현재 값 표시를 넘어, 시간 경과에 따른 추이 분석과 비교에 초점을 맞춥니다. 예를 들어, 애플리케이션의 HTTP 요청 오류율을 모니터링하는 패널을 만들기 위해 rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) 같은 복합 쿼리를 사용할 수 있습니다. 또한 sum by (job) (rate(process_cpu_seconds_total[5m]))와 같이 집계 함수와 by 절을 결합해 서비스별 CPU 사용률을 그룹화하여 표시하는 차트를 구성할 수 있습니다.
시각화 목적 | 예시 PromQL 쿼리 | 설명 |
|---|---|---|
서비스 가용성 |
| 타겟의 상태(1=정상, 0=중단)를 표시합니다. |
요청 처리량 |
| 지난 5분간 초당 평균 HTTP 요청 수를 계산합니다. |
메모리 사용량 |
| 프로세스의 상주 메모리 크기를 바이트 단위로 표시합니다. |
에러 비율 |
| 5xx 오류 응답의 비율을 백분율로 계산합니다. |
효과적인 대시보드를 구축하기 위해서는 적절한 시각화 유형(예: 시계열 그래프, 게이지, 히트맵, 상태 표시판)을 선택하는 것이 중요합니다. 예를 들어, 현재 값을 강조할 때는 싱글 스텟이나 게이지를, 추이를 보여줄 때는 시계열 그래프를 사용합니다. Grafana의 레전드 기능을 활용해 시리즈별 레이블을 포맷팅하거나, [[label_name]] 패턴을 사용해 메트릭 라벨 값을 패널 제목에 동적으로 삽입할 수 있습니다. 이를 통해 하나의 대시보드 템플릿으로 여러 서비스나 환경에 재사용이 가능해집니다.
애너테이션은 대시보드의 시계열 그래프에 특정 이벤트(예: 배포, 장애, 설정 변경)를 마커로 표시하는 기능이다. 이를 통해 메트릭 변화의 원인을 직관적으로 파악할 수 있다. 애너테이션은 Grafana의 데이터 소스에서 직접 쿼리하거나, 수동으로 추가할 수 있다. Prometheus를 데이터 소스로 사용할 경우, 특정 라벨을 가진 메트릭을 애너테이션 쿼리로 지정하여 해당 이벤트가 발생할 때마다 자동으로 표시되게 구성할 수 있다. 또한, 알람 설정은 Prometheus Alertmanager에서 발생한 알람을 Grafana 대시보드에 애너테이션으로 연동하여, 장애 발생 시점과 시스템 지표의 상관관계를 명확히 분석하는 데 유용하다.
템플릿 변수는 대시보드를 동적이고 재사용 가능하게 만드는 핵심 요소이다. 변수를 정의하면 대시보드 상단에 드롭다운 선택기가 생성되며, 사용자의 선택에 따라 패널의 쿼리, 패널 제목, 심지어 전체 대시보드의 내용이 실시간으로 변경된다. 주요 변수 유형은 다음과 같다.
변수 유형 | 설명 | 사용 예시 |
|---|---|---|
| 데이터 소스에 쿼리를 보내 결과 목록을 생성 | Prometheus에서 |
| 사용자가 쉼표로 구분한 값 목록을 직접 정의 |
|
| 그래프의 시간 간격(해상도)을 전환 |
|
| 대시보드에서 사용할 데이터 소스를 전환 | 여러 Prometheus 서버 또는 다른 데이터 소스 간 전환 |
이 변수들은 PromQL 쿼리 내에서 $variable_name 형태로 참조된다. 예를 들어, up{job="$job", instance="$instance"}와 같은 쿼리를 작성하면, 사용자가 선택한 job과 instance에 해당하는 메트릭만 필터링하여 표시한다.
구축한 대시보드는 팀 내 공유 및 협업을 위해 다양한 방식으로 배포할 수 있다. Grafana는 대시보드 JSON 모델을 내보내고 가져오는 기능을 제공하여, 버전 관리 시스템(Git)에 저장하고 변경 사항을 추적하는 것이 일반적이다. 또한, 대시보드 링크를 공유하거나, 특정 시간 범위와 변수 값이 설정된 상태의 스냅샷을 생성하여 정적 보고서처럼 배포할 수 있다. 조직 내에서 표준화된 대시보드 템플릿을 만들고, 템플릿 변수를 적극 활용하면, 각 서비스나 팀이 동일한 구조의 대시보드를 자신의 메트릭에 맞게 쉽게 적용할 수 있어 효율성이 크게 향상된다.
애너테이션은 대시보드의 시계열 그래프에 특정 이벤트를 마커로 표시하는 기능이다. 예를 들어, 서버 재배포, 코드 릴리스, 주요 인시던트 발생 시간 등을 그래프 위에 수직선과 텍스트로 표시할 수 있다. 이를 통해 메트릭 변화와 특정 운영 이벤트 간의 인과 관계를 시각적으로 파악하는 데 도움을 준다. 애너테이션은 수동으로 추가하거나, Prometheus의 알람 규칙이나 외부 시스템(예: GitLab, Jenkins)의 웹훅을 통해 자동으로 생성될 수 있다.
Grafana의 알람 기능은 정의된 조건을 기반으로 위험 상황을 감지하고 사용자에게 통지한다. 알람 규칙은 PromQL 쿼리를 사용하여 작성되며, 특정 메트릭 값이 임계치를 초과하거나 비정상적인 패턴을 보일 때 트리거된다. 알람이 발생하면 사전에 구성된 통지 채널(예: Slack, 이메일, PagerDuty, 웹훅)을 통해 관련 팀원에게 즉시 알림이 전송된다.
알람 설정은 일반적으로 다음 단계로 구성된다.
1. 알람 규칙 정의: 평가 빈도(예: 1분), 조건(예: up{job="api-server"} == 0), 지속 시간 등을 설정한다.
2. 통지 정책 설정: 어떤 알람이 어떤 채널로 전송될지, 알람 그룹핑 및 반복 규칙을 정의한다.
3. 통지 채널 구성: 각 채널별로 연결 정보와 메시지 템플릿을 설정한다.
효과적인 모니터링을 위해서는 애너테이션과 알람을 함께 활용하는 것이 중요하다. 애너테이션은 과거 이벤트를 기록하여 근본 원인 분석(RCA)을 지원하고, 알람은 실시간으로 문제를 감지하여 신속한 대응을 가능하게 한다.
템플릿 변수는 대시보드 상단에 드롭다운 메뉴나 입력 필드를 생성하여, 사용자가 동적으로 패널의 데이터를 필터링하거나 변경할 수 있게 해주는 기능이다. 이를 통해 단일 대시보드로 여러 환경, 서비스, 인스턴스의 데이터를 상황에 맞게 조회할 수 있다. 변수는 PromQL 쿼리의 결과나 수동 목록, 데이터베이스 쿼리 등 다양한 소스로부터 값을 가져올 수 있다.
변수는 크게 쿼리 변수, 사용자 지정 변수, 상수 변수, 데이터소스 변수, 간격 변수 등으로 구분된다. 가장 일반적인 쿼리 변수의 경우, Prometheus 데이터 소스에 대해 PromQL 쿼리를 실행하여 변수 옵션 목록을 생성한다. 예를 들어, label_values(node_uname_info, instance) 쿼리는 instance 라벨의 모든 값을 변수 옵션으로 나열한다. 변수를 정의한 후에는 패널의 PromQL 쿼리나 패널 제목에서 $변수명 구문을 사용하여 참조한다.
변수 유형 | 설명 | 일반적인 사용 예 |
|---|---|---|
쿼리 변수 | 데이터 소스에 쿼리를 실행하여 값 목록 생성 |
|
사용자 지정 변수 | 사용자가 수동으로 쉼표로 구분된 값 목록 정의 |
|
간격 변수 | 시간 범위 선택을 위한 미리 정의된 간격 목록 제공 |
|
데이터소스 변수 | 대시보드에서 사용 가능한 데이터 소스 목록 전환 | Prometheus, Loki 데이터 소스 선택 |
고급 활용법으로는 변수 값에 따라 표시되는 패널 자체를 제어하는 '반복' 기능이 있다. 이를 통해 동일한 패널을 각 서버나 서비스별로 자동 생성하여 나열할 수 있다. 또한, 변수 값에 정규 표현식을 적용하거나, 여러 변수를 연결하여 종속적인 드롭다운을 구성하는 것도 가능하다. 이러한 템플릿 변수의 적절한 활용은 대시보드의 재사용성과 유지보수성을 크게 향상시킨다.
대시보드 공유는 Grafana에서 구축한 시각화 결과를 팀원이나 다른 이해관계자와 공유하여 협업과 의사 결정을 용이하게 하는 기능이다. Grafana는 이를 위해 다양한 공유 방식을 제공한다.
공유 방식은 크게 링크 공유, 스냅샷 생성, 대시보드를 라이브러리 패널이나 JSON 모델로 내보내기 등으로 구분된다. 직접 링크를 공유하면 수신자는 실시간으로 업데이트되는 대시보드를 볼 수 있다. 반면, 스냅샷은 특정 시점의 대시보드 상태를 정적으로 저장한 후 공유하는 방식으로, 당시의 데이터와 설정이 고정되어 이후 변경 사항의 영향을 받지 않는다. 이는 문제 상황을 기록하거나 보고서 작성 시 유용하다. 또한, 대시보드나 개별 패널을 JSON 형식으로 내보내고 가져오는 기능을 통해 설정을 코드처럼 버전 관리하거나 팀 간 템플릿으로 재사용할 수 있다.
효율적인 팀 협업을 위해서는 대시보드에 템플릿 변수를 적극 활용하는 것이 좋다. 예를 들어, 서비스, 인스턴스, 환경(prod/dev) 등의 변수를 정의하면 팀원 각자가 관심 있는 필터를 적용하여 동일한 대시보드를 다양한 관점에서 사용할 수 있다. 대시보드 폴더를 구성하고 적절한 권한(Viewer, Editor, Admin)을 부여함으로써 팀별 또는 프로젝트별로 자산을 체계적으로 관리할 수 있다. 변경 내역 추적을 위해 Grafana의 버전 관리 기능을 사용하여 누가, 언제, 어떤 수정을 했는지 확인할 수 있다.
공유 방식 | 특징 | 주요 사용 사례 |
|---|---|---|
링크 공유 | 실시간 데이터를 보여줌, 권한에 따라 접근 제어 가능 | 일상적인 모니터링, 팀 내 실시간 정보 공유 |
스냅샷 | 특정 시점의 정적 이미지 생성, 데이터와 레이아웃 고정 | 인시던트 보고, 상태 기록, 외부 발표 자료 |
JSON 내보내기/가져오기 | 대시보드 설정을 텍스트 파일로 저장 | 버전 관리(Git), 템플릿 배포, 설정 백업 |
라이브러리 패널 | 패널을 재사용 가능한 컴포넌트로 저장 | 표준화된 차트를 여러 대시보드에서 일관되게 사용 |
마이크로서비스 환경에서는 수백 개의 서비스 인스턴스가 분산되어 동작하며, 각 인스턴스는 고유한 메트릭을 생성합니다. 프로메테우스는 풀 기반 모델을 채택하여 이러한 분산된 대상에서 주기적으로 메트릭을 수집합니다. 각 서비스는 메트릭을 노출하는 엔드포인트를 제공하며, 프로메테우스 서버는 설정된 잡을 통해 이 엔드포인트들을 스크래핑합니다. 이 아키텍처는 중앙 집중식 에이전트가 필요 없다는 장점이 있지만, 서비스 디스커버리 메커니즘(예: 쿠버네티스 서비스 디스커버리)과 연동하여 동적으로 변화하는 인스턴스 목록을 관리해야 합니다.
그라파나는 이러한 분산된 프로메테우스 데이터 소스들을 하나의 통합된 뷰로 제공하는 역할을 합니다. 여러 개의 프로메테우스 서버(예: 데이터센터별 또는 팀별)를 데이터 소스로 등록하고, 템플릿 변수를 활용하여 사용자가 특정 네임스페이스, 클러스터 또는 서비스를 선택하면 관련된 모든 메트릭을 조회할 수 있는 대시보드를 설계할 수 있습니다. 이는 복잡한 분산 시스템의 상태를 한눈에 파악하는 데 필수적입니다.
클라우드 네이티브 환경에서는 컨테이너와 오케스트레이션 플랫폼이 핵심 요소입니다. 프로메테우스는 쿠버네티스와의 통합이 매우 뛰어나, 파드, 노드, 디플로이먼트 등 쿠버네티스 리소스의 상태를 자동으로 모니터링할 수 있는 메트릭을 수집합니다. 일반적인 패턴은 다음과 같습니다.
모니터링 대상 | 수집 방법 | 주요 메트릭 예시 |
|---|---|---|
쿠버네티스 클러스터 | pod 상태, deployment replica 수 | |
컨테이너 리소스 | cAdvisor (노드 익스포터 내장) | CPU/메모리 사용률, 파일시스템 사용량 |
애플리케이션 | 서비스별 커스텀 메트릭 엔드포인트 | 요청 지연 시간, 비즈니스 트랜잭션 수 |
이러한 계층적 접근 방식은 인프라, 플랫폼, 애플리케이션 메트릭을 명확히 분리하여 문제의 근본 원인을 빠르게 추적하는 데 도움을 줍니다. 그라파나 대시보드는 이러한 각 계층의 메트릭을 통합하거나 별도의 뷰로 제공하여 운영 팀과 개발 팀이 각자의 관심사에 맞게 모니터링할 수 있게 합니다.
마이크로서비스 아키텍처는 단일 애플리케이션을 여러 개의 소규모, 독립적 서비스로 분해한다. 이는 확장성과 유연성을 높이지만, 분산된 서비스 간의 상태와 성능을 통합적으로 관찰하는 것을 복잡하게 만든다. 프로메테우스와 그라파나는 이러한 환경에서 효과적인 모니터링과 시각화 체계를 구축하는 데 핵심적인 역할을 한다.
각 마이크로서비스는 자체 프로메테우스 익스포터를 통해 애플리케이션 메트릭(예: HTTP 요청 수, 지연 시간, 에러율)과 시스템 메트릭(예: CPU, 메모리 사용량)을 노출한다. 중앙 프로메테우스 서버는 설정된 스크레이핑 간격으로 모든 서비스의 익스포터 엔드포인트에서 메트릭을 수집하여 시계열 데이터베이스에 저장한다. 이를 통해 서비스별 성능 데이터를 통합적으로 수집하고 저장할 수 있다.
그라파나는 이 통합 데이터 소스를 활용하여 종합적인 관점의 대시보드를 구성한다. 핵심 패턴은 다음과 같다.
시각화 패턴 | 설명 | 활용 예 |
|---|---|---|
서비스 매트릭스 | 모든 마이크로서비스의 핵심 지표를 한눈에 비교 | 요청률(RPS), 지연 시간(p95), 에러율을 서비스별 테이블로 표시 |
서비스 맵 | 서비스 간 의존성과 트랜잭션 흐름을 시각화 | 분산 추적 데이터와 연동하여 호출 관계를 그래프로 표현 |
비교/드릴다운 | 전체 상태와 개별 서비스 상태를 계층적으로 탐색 | 템플릿 변수를 사용해 서비스명으로 필터링하거나, 상위 대시보드에서 특정 서비스 패널로 링크 |
이러한 접근 방식은 장애 지점의 신속한 격리와 근본 원인 분석(RCA)을 가능하게 한다. 예를 들어, 한 서비스의 지연 시간 증가가 다운스트림 서비스의 에러율 상승으로 이어지는 연쇄 장애를 대시보드에서 명확히 추적할 수 있다. 또한, 쿠버네티스와 같은 오케스트레이션 플랫폼과 통합하면 컨테이너와 파드 수준의 메트릭까지 통합된 관찰성을 제공한다.
클라우드 네이티브 모니터링은 컨테이너, 오케스트레이션, 마이크로서비스 아키텍처, 데브옵스 문화와 같은 클라우드 네이티브 원칙에 기반한 시스템을 관찰하는 접근 방식이다. 이 환경에서는 인프라와 애플리케이션이 동적이고 일시적이며 분산되어 있기 때문에 기존의 모니터링 방식과는 근본적으로 다른 전략이 요구된다. 프로메테우스와 그라파나는 이러한 요구 사항에 부합하는 핵심 도구로 자리 잡았다. 프로메테우스의 풀 기반 모델과 다차원 데이터 모델은 컨테이너 오케스트레이터에서 자주 발생하는 서비스 디스커버리와 동적인 환경 변화를 효과적으로 처리할 수 있다.
클라우드 네이티브 환경에서의 모니터링은 일반적으로 다음 계층을 포괄한다.
모니터링 계층 | 주요 관찰 대상 | 관련 메트릭/도구 예시 |
|---|---|---|
인프라 계층 | CPU/메모리 사용률, 디스크 I/O, 네트워크 트래픽 | |
오케스트레이션 계층 | 파드 상태, 레플리카 수, 리소스 요청/제한 | |
애플리케이션 계층 | 마이크로서비스, 비즈니스 로직, API 엔드포인트 | HTTP 요청 수/지연 시간, 비즈니스 트랜잭션, 에러율 |
서비스 메시 계층 | 서비스 간 통신 지연, 회로 차단기 상태, 트래픽 분배 |
이러한 환경에서는 에이전트리스 아키텍처나 사이드카 모델을 채택하는 경우가 많다. 예를 들어, 프로메테우스는 쿠버네티스 API 서버를 통해 서비스 디스커버리를 수행하고, 각 파드의 메트릭 엔드포인트에서 직접 데이터를 수집한다. 애플리케이션 계층의 메트릭은 코드에 클라이언트 라이브러리를 삽입하거나 OpenTelemetry 같은 표준을 통해 수집된다. 그라파나는 이 모든 계층의 데이터를 프로메테우스 데이터 소스로부터 통합하여, 클러스터 상태부터 개별 서비스의 성능까지를 하나의 대시보드에서 가시화할 수 있게 한다.
클라우드 네이티브 모니터링의 성공은 관찰 가능성의 세 가지 기둥인 메트릭, 로그, 트레이스를 통합하는 데 있다. 프로메테우스와 그라파나는 주로 메트릭에 집중하지만, 로키(Loki)를 통한 로그 통합이나 자이긴(Jaeger) 트레이스 데이터를 대시보드에 연동하는 방식으로 확장된다. 또한, GitOps 원칙에 따라 대시보드와 알람 규칙을 코드로 관리하고 버전 컨트롤 시스템에 저장하는 것이 일반적인 관행이 되었다. 이를 통해 모니터링 설정의 재현성, 감사 가능성, 자동화가 보장된다.
대시보드 로딩 속도를 개선하려면 여러 요소를 최적화해야 한다. 첫째, 단일 패널에서 요청하는 시계열 데이터의 양을 줄이는 것이 중요하다. PromQL 쿼리에서 rate(), increase()와 같은 함수와 함께 적절한 범위 벡터 선택기(예: [5m])를 사용하면 샘플 수를 관리 가능한 수준으로 유지할 수 있다. 둘째, Grafana의 대시보드 설정에서 '쿼리 옵션'의 'Max data points' 값을 낮추거나, 패널의 'Relative time'을 짧게 설정하여 불필요한 과거 데이터를 불러오지 않도록 한다. 셋째, 복잡한 쿼리를 여러 개의 간단한 패널로 분리하거나, 필요시 Recording rule을 미리 생성하여 사전 집계된 데이터를 조회하는 방식을 고려한다.
메트릭 수집 효율화는 주로 Prometheus 측면에서 진행된다. 불필요한 메트릭 수집을 방지하기 위해 scrape_configs 설정에서 metric_relabel_configs를 사용하여 레이블을 제거하거나, 특정 메트릭을 필터링할 수 있다. 또한, 적절한 스크래핑 간격을 설정하는 것이 중요하다. 높은 빈도로 변경되지 않는 메트릭은 스크래핑 간격을 늘리고, 짧은 간격이 필요한 메트릭만 더 자주 수집하도록 구성한다. 메트릭 네이밍과 레이블링을 일관되게 설계하면 쿼리 성능과 저장 효율이 향상된다.
최적화 영역 | 주요 접근법 | 기대 효과 |
|---|---|---|
쿼리 최적화 | 범위 벡터 선택기 조정, Recording rule 활용, 데이터 포인트 제한 | 대시보드 응답 시간 단축, Prometheus 서버 부하 감소 |
수집 최적화 | 스크래핑 간격 조정, 불필요한 메트릭/레이블 필터링 | 저장 공간 절약, 네트워크 및 처리 부하 감소 |
구조 최적화 | 마이크로서비스별 메트릭 분리, 계층적 서비스 발견 활용 | 시스템 확장성 향상, 문제 진단 용이성 제고 |
성능 문제를 해결할 때는 Grafana의 'Query Inspector' 기능을 활용하여 각 패널 쿼리의 실행 시간과 반환된 데이터 포인트 수를 확인하는 것이 첫 단계이다. 느린 쿼리는 대부분 과도한 시계열 선택이나 비효율적인 PromQL 함수 사용에서 비롯된다. 지속적인 모니터링 자체의 리소스 사용을 모니터링하는 것도 중요하다. Prometheus 자체의 prometheus_ 접두사를 가진 메트릭(예: prometheus_tsdb_head_series)을 관찰하여 수집 대상과 저장된 시계열 수가 기대치를 초과하지 않는지 확인한다.
대시보드 로딩 속도를 개선하는 것은 많은 패널과 복잡한 쿼리를 사용하는 환경에서 사용자 경험을 향상시키는 중요한 과제이다. 로딩 지연의 주요 원인은 PromQL 쿼리의 비효율성, 과도한 시계열 데이터 처리, 그리고 Grafana 자체의 설정 문제에서 비롯된다. 쿼리 최적화는 가장 효과적인 방법으로, 범위 벡터 선택기(예: [5m])의 기간을 필요한 최소 시간으로 제한하고, 불필요한 고해상도 데이터를 요청하지 않도록 한다. 또한 rate(), increase()와 같은 함수는 내부적으로 여러 데이터 포인트를 처리하므로, 적절한 집계(avg_over_time, sum_over_time 등)와 결합하여 사용하면 Prometheus 서버의 부하를 줄일 수 있다.
데이터 소스와 패널 구성 최적화도 필수적이다. Grafana에서 불필요하게 짧은 자동 새로고침 간격을 설정하면 지속적인 쿼리 부하를 유발한다. 필요한 경우에만 새로고침을 활성화하고, 대시보드 상단의 공유 시간 범위를 적절히 설정하여 모든 패널이 동일한 시간 범위의 데이터를 요청하도록 해야 한다. 또한, 다음과 같은 실용적인 기법들을 적용할 수 있다.
최적화 기법 | 설명 | 기대 효과 |
|---|---|---|
쿼리 최소화 | 중복되거나 유사한 쿼리를 통합하고, 불필요한 패널을 제거한다. | 네트워크 왕복 시간 및 서버 처리 부하 감소 |
시계열 제한 |
| 클라이언트 측 렌더링 부하 감소 |
직접 라우팅 | 가능한 경우, Grafana가 Prometheus 서버에 직접 접근하도록 네트워크 경로를 단순화한다. | 네트워크 지연 시간 감소 |
캐시 활용 | Grafana의 메트릭 결과 캐시를 활성화하여 동일한 쿼리의 반복 실행을 방지한다. | 반복 쿼리에 대한 응답 시간 단축 |
마지막으로, 근본적인 데이터 수집 계층의 효율성을 검토해야 한다. Prometheus가 수집하는 메트릭의 총량과 카디널리티가 너무 높다면, 로딩 속도 저하의 원인이 될 수 있다. 불필요한 메트릭은 수집에서 제외하고, 고카디널리티 레이블(예: 사용자 ID, 세션 ID)의 사용을 신중히 검토하여 저장소와 쿼리 성능에 미치는 영향을 평가한다. 대규모 환경에서는 Thanos나 Cortex와 같은 롱텀 스토리지 및 쿼리 엔진 도입을 고려하여 수평 확장성을 확보할 수 있다.
효율적인 메트릭 수집은 Prometheus 서버의 안정성과 확장성을 보장하며, 대규모 환경에서도 지속 가능한 모니터링을 가능하게 한다. 수집 효율화는 크게 메트릭 자체의 설계, 익스포터 구성, 그리고 Prometheus 서버의 스크래핑 설정 최적화로 나뉜다.
메트릭 설계 단계에서부터 카디널리티를 관리하는 것이 중요하다. 레이블 값에 고유 식별자(예: 사용자 ID, 세션 ID, 요청 ID)를 사용하면 각기 다른 값의 조합으로 인해 메트릭 시계열이 기하급수적으로 증가하는 문제가 발생한다[2]. 이는 Prometheus 서버의 메모리와 저장 공간을 빠르게 소모한다. 따라서 레이블은 가능한 한 제한된 집합의 값을 가지도록 설계해야 하며, 고유 식별자는 메트릭 레이블이 아닌 로그로 기록하는 것이 바람직하다. 또한, 불필요한 메트릭을 생성하지 않도록 익스포터의 설정을 검토하고, 기본적으로 수집되는 모든 메트릭이 실제로 필요한지 확인해야 한다.
Prometheus 서버의 스크래핑 구성도 성능에 직접적인 영향을 미친다. scrape_interval은 각 타겟으로부터 데이터를 수집하는 빈도를 정의한다. 너무 짧은 간격은 불필요한 부하를 초래할 수 있으므로, 메트릭의 변화 속도와 모니터링 요구사항에 맞춰 적절히 설정한다. 다음은 주요 스크래핑 설정 파라미터와 역할을 정리한 표이다.
설정 파라미터 | 역할 및 최적화 가이드 |
|---|---|
| 전역 기본 수집 간격. 일반적으로 15초에서 1분 사이로 설정한다. |
| 단일 스크래핑 작업의 타임아웃. |
| 단일 스크래핑에서 허용할 최대 샘플 수. 카디널리티 폭주를 방지하는 안전장치 역할을 한다. |
마지막으로, 수집 아키텍처를 고도화할 수 있다. 수집 대상이 매우 많거나 지리적으로 분산된 경우, Prometheus 페더레이션을 사용해 계층적으로 데이터를 집계하거나, Thanos나 Cortex 같은 장기 저장 및 수평 확장 솔루션을 도입한다. 또한, 서비스 디스커버리(Consul, Kubernetes 등)를 효율적으로 구성하여 불필요한 타겟 탐색 오버헤드를 줄이고, 네트워크 대역폭을 고려해 동일한 데이터센터 내에서 수집이 이루어지도록 구성하는 것이 좋다.