소개
이제 Prometheus 가 Node Exporter 에서 메트릭을 수집하고 있으므로 데이터에 질문을 시작할 수 있습니다.
Prometheus 에는 PromQL(Prometheus Query Language) 이라는 자체 쿼리 언어가 있습니다.
원시 메트릭은 필요한 데이터를 필터링하고 결합하며 계산하여 의미 있는 답을 얻을 수 있을 때 유용합니다. PromQL 이 중요한 이유가 여기에 있습니다.
이 단계부터 모니터링은 단순한 수집을 넘어 분석이 됩니다. Prometheus 가 숫자를 저장하기 때문에 유용한 것만은 아닙니다. PromQL 을 사용하면 그 숫자를 질문과 답변으로 바꿀 수 있기 때문입니다.
이 실습에서는 다음 세 가지 유형의 질문을 다룹니다.
- 단순한 사실: "사용 가능한 메모리가 얼마나 남아 있을까?"
- 속도: "CPU 가 얼마나 빠르게 작업하고 있을까?"
- 계산: "메모리가 몇 퍼센트 사용 중일까?"
Prometheus Web Interface(Web Service) 에 질문을 입력하고 답을 확인합니다.
사용 가능한 메모리 조회
이 단계에서는 사용 가능한 메모리의 바이트 수를 조회하고 응답을 저장합니다.
간단한 사실부터 확인합니다. 사용 가능한 메모리 (RAM) 가 얼마나 남아 있는지 알아봅니다.
먼저 Prometheus 인터페이스를 엽니다.
LabEx 인터페이스의 왼쪽 위 메뉴에서 Prometheus 탭을 클릭하여 대시보드를 엽니다.
인터페이스가 로드되면 눈에 잘 띄는 검색창을 찾습니다. 이 검색창에 Librarian 에게 질문을 입력합니다.
검색창에 다음 쿼리를 입력합니다.
node_memory_MemFree_bytes
이 텍스트는 "Free Memory"를 나타내는 데이터 포인트의 이름입니다. 입력한 다음 Execute 버튼을 클릭합니다.

결과를 확인합니다.
"Value" 열에 숫자가 표시됩니다. 예를 들어 5204746240처럼 매우 큰 숫자로 보일 수 있습니다. 컴퓨터는 메모리를 매우 작은 단위인 Bytes로 계산하므로 정상적인 결과입니다.
참고: "Value" 열의 숫자가 Labby 채팅 창 뒤에 가려질 수 있습니다. 값이 보이지 않으면 Labby 대화 상자를 잠시 닫아 숫자를 확인한 다음, 작업을 마치고 다시 엽니다.
화면을 직접 확인할 수 없으므로 결과가 올바른지 검증하려면 터미널에서 다음 명령을 실행하여 답을 파일에 저장합니다.
curl "http://localhost:9090/api/v1/query?query=node_memory_MemFree_bytes" > ~/project/free_memory.json
cat ~/project/free_memory.json
{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"node_memory_MemFree_bytes","instance":"localhost:9100","job":"node_exporter"},"value":[1768698428.127,"4001128448"]}]}}
CPU 속도 조회
이 단계에서는 rate() 를 사용하여 CPU 카운터가 얼마나 빠르게 증가하는지 조회합니다.
이번에는 조금 더 어려운 질문을 살펴봅니다.
자동차의 속도계는 "주행한 총 거리"를 표시하지 않고 "시간당 주행 거리"(속도) 를 표시합니다.
CPU 사용량도 비슷합니다. Prometheus 는 "CPU 가 켜진 후 작업한 총 시간 (초)"을 기록합니다. 이 숫자는 계속 커지기만 합니다.
이처럼 시간이 지나면서 누적되는 메트릭을 카운터라고 합니다. 현재 상태를 파악하려면 일반적으로 누적된 증가량을 시간 단위당 신호로 변환하는 rate() 같은 함수가 필요합니다.
"CPU 가 지금 얼마나 열심히 작업하고 있을까?"를 확인하려면 속도인 Rate를 계산해야 합니다.
질문:
rate(node_cpu_seconds_total[1m])
구성 요소:
node_cpu_seconds_total: 원시 데이터인 총 시간 (초) 입니다.[1m]: "지난 1 분 동안의 데이터를 확인합니다."rate(...): "해당 1 분 동안 이 숫자가 얼마나 빠르게 증가했는지 계산합니다."
Web UI 에서 실행합니다.
검색창에 rate(node_cpu_seconds_total[1m]) 쿼리를 붙여넣고 Execute를 클릭합니다. 컴퓨터에 여러 CPU 코어가 있으므로 숫자가 표시된 행이 많이 나타날 수 있습니다.
결과를 저장합니다 (검증용).
curl -g "http://localhost:9090/api/v1/query?query=rate(node_cpu_seconds_total[1m])" > ~/project/cpu_rate.json
-g (--globoff) 옵션은 curl 의 URL 글로빙을 비활성화합니다. 따라서 curl 은 [1m]의 대괄호를 URL 범위로 해석하지 않고 문자 그대로 전송합니다. 셸의 따옴표는 전체 쿼리 URL 을 하나로 묶어 줍니다.
백분율 계산
이 단계에서는 메모리 메트릭을 조합하여 백분율을 계산합니다.
"5 억 바이트가 남아 있음"은 이해하기 어렵습니다. 하지만 "50% 남아 있음"은 쉽게 이해할 수 있습니다.
Prometheus 는 계산도 대신 수행할 수 있습니다.
이러한 산술 기능 덕분에 PromQL 은 운영 작업에서 강력하게 사용됩니다. 여러 개의 낮은 수준 메트릭을 결합하여 사람이 해석하기 쉬운 높은 수준의 상태 지표를 만들 수 있습니다.
확인하려는 값은 사용 중인 메모리의 백분율입니다.
공식은 다음과 같습니다.
$$ \text{Percent Used} = \frac{\text{Total Memory} - \text{Free Memory}}{\text{Total Memory}} \times 100 $$
PromQL 질문:
(node_memory_MemTotal_bytes - node_memory_MemFree_bytes) / node_memory_MemTotal_bytes * 100
Web UI 에서 실행합니다.
위의 긴 계산식을 검색창에 붙여넣고 Execute를 클릭합니다. 45.2와 같은 숫자 하나가 표시됩니다. 이는 메모리의 45.2% 가 사용 중이라는 뜻입니다.
결과를 저장합니다.
curl "http://localhost:9090/api/v1/query?query=(node_memory_MemTotal_bytes-node_memory_MemFree_bytes)/node_memory_MemTotal_bytes*100" > ~/project/memory_usage.json
데이터 시각화
이 단계에서는 메모리 쿼리를 그래프로 표시하고 각 축의 의미를 해석합니다.
마지막으로 숫자보다 그림이 더 이해하기 쉽습니다.
계산식이 검색창에 입력된 상태에서 결과 영역 위의 탭을 찾습니다. 간단한 텍스트 결과를 표시하는 Table 탭 옆에 보통 Graph 탭이 있습니다.
Graph 탭을 클릭합니다. 시간에 따른 메모리 사용량이 선 그래프로 표시됩니다.
- X 축: 시간
- Y 축: 사용률
직선이 표시되면 메모리 사용량이 안정적이라는 뜻입니다. 무거운 프로그램을 실행했다면 그래프에 급격한 상승이 나타납니다.
마지막 확인:
지금은 그래프만 보고 있으므로 서버가 백그라운드에서 계속 실행 중인지 확인합니다.
ps aux | grep prometheus
요약
이 실습에서는 PromQL을 사용하여 Librarian 에게 질문하는 방법을 배웠습니다.
다음 내용을 익혔습니다.
- 단순한 사실:
node_memory_MemFree_bytes - 속도:
rate(... [1m]) - 계산:
(Total - Free) / Total * 100 - 그래프 표시: Graph 탭 사용
이제 데이터를 확인할 수 있으므로, 다음 단계는 문제가 발생했을 때 Prometheus 가 사용자에게 경고를 보내도록 만드는 것입니다. 이를 Alerting이라고 합니다.



