기본적으로 제공되는 대시보드와 거기에 맞춰 미리 적용된 쿼리문들이 있어 웬만하면 이것들로 대략적인 모니터링이 가능한데,
거기서 더 나아가서 직접 쿼리문을 작성해서 필요한 정보들만 뽑아낼 수도 있다.
Prometheus에서 사용하는 쿼리라 PromQL이라고 부르는데 SQL이랑은 사용법이 꽤나 다르다.
이걸 사용하면 메트릭 데이터를 기준으로 이상치를 탐지하거나 뭔가 이상한 게 생기면 감지해서 알림 전송이 가능
그래서 Alertmanager라는 게 있는데 이게 그 기능을 하게 해줌
쿼리문은 선택자{job="<잡이름>"} 이런 식으로 쓰이고 함수 안에 넣을 수도 있음
sum, avg, rate, min 등 판다스나 엑셀에서 친숙하게 보이는 그런 것들이 사용 가능
사이드바에 있는 Explore를 타고 들어오면 저렇게 쿼리, 그래프, raw data가 구분되어 있고 쿼리에 크게 메트릭, 레이블 필터가 보임

메트릭 종류도 매우매우 많고 레이블 필터도 아주 많아 이걸 직접 SQL DML 쓰듯이 쓰기 꽤나 번거로운걸 아는지 친절하게 드랍다운으로 고를 수 있게 나옴
그리고 오른쪽 빌더랑 코드가 있는데 코드를 누르면 직접 쿼리를 칠 수도 있음 자동완성을 지원해주긴 함
일단 PromQL의 감을 익히기 위해 빌더말고 코드를 직접 입력해보기로 함
먼저 간단하게 전체 노드의 메모리 사용량을 조회해볼 수 있음
메트릭 이름은 외워서 쓰긴 쉽지 않지만 읽기에는 무척 직관적이라 본다면 뭔지 대략 알 수 있다
아래는 노드 전체의 사용되는 메모리 바이트를 보여줌 이건 node exporter가 돌아가서 측정이 됨

메모리를 축내는 코드를 작성하고 실행시켜보고 다시 확인해보도록 함
Alma에 파이썬이 내장되어 있으니 간단하게 작성, 실행 가능한 파이썬으로 작성
리스트를 두고 계속 쌓아서 메모리 용량을 잡아먹게 해봄
[root@Alma ~]# vi main.py
import time
string = "안녕?"
arr = []
def loop(string):
arr.append(string)
print(len(arr))
def main():
while True:
loop(string)
if len(arr) % 1000000 == 0 :
time.sleep(0.1)
if __name__ == "__main__":
main()
숫자가 미치도록 치솟는다. "안녕?" 문자열이 해당 숫자만큼 반복한 리스트가 있는 상태
[root@Alma ~]# python3 main.py
...
12144416
12144417
12144418
12144419
12144420
12144421
12144422
12144423
12144424
12144425
12144426
12144427
12144428
12144429
12144430
12144431
12144432
...
얼마 지나지 않아 갑자기 치솟은 게 확인 됨

이제 이걸 가지고 평균 메모리 사용량이랑 비교해보면 이렇게 나옴 1분 기준으로 비교한 값과 전체 평균

그럼 1분을 기준으로 잡은 부분이 파이썬으로 메모리를 잡아버렸기 때문에 더 높게 잡혀 약 700MiB가 넘은 게 2번 정도 보임
이걸 기준으로 알림을 발생시켜보겠다.
아까 말한 Alertmanager라는 걸 설치하고 설정해주면 됨본적으로 제공되는 대시보드와 거기에 맞춰 미리 적용된 쿼리문들이 있어 웬만하면 이것들로 대략적인 모니터링이 가능한데,
거기서 더 나아가서 직접 쿼리문을 작성해서 필요한 정보들만 뽑아낼 수도 있다.
Prometheus에서 사용하는 쿼리라 PromQL이라고 부르는데 SQL이랑은 사용법이 꽤나 다르다.
이걸 사용하면 메트릭 데이터를 기준으로 이상치를 탐지하거나 뭔가 이상한 게 생기면 감지해서 알림 전송이 가능
그래서 Alertmanager라는 게 있는데 이게 그 기능을 하게 해줌
쿼리문은 선택자{job="<잡이름>"} 이런 식으로 쓰이고 함수 안에 넣을 수도 있음
sum, avg, rate, min 등 판다스나 엑셀에서 친숙하게 보이는 그런 것들이 사용 가능
사이드바에 있는 Explore를 타고 들어오면 저렇게 쿼리, 그래프, raw data가 구분되어 있고 쿼리에 크게 메트릭, 레이블 필터가 보임

promql 써보는 페이지
메트릭 종류도 매우매우 많고 레이블 필터도 아주 많아 이걸 직접 SQL DML 쓰듯이 쓰기 꽤나 번거로운걸 아는지 친절하게 드랍다운으로 고를 수 있게 나옴
그리고 오른쪽 빌더랑 코드가 있는데 코드를 누르면 직접 쿼리를 칠 수도 있음 자동완성을 지원해주긴 함
일단 PromQL의 감을 익히기 위해 빌더말고 코드를 직접 입력해보기로 함
먼저 간단하게 전체 노드의 메모리 사용량을 조회해볼 수 있음
메트릭 이름은 외워서 쓰긴 쉽지 않지만 읽기에는 무척 직관적이라 본다면 뭔지 대략 알 수 있다
아래는 노드 전체의 사용되는 메모리 바이트를 보여줌 이건 node exporter가 돌아가서 측정이 됨

노드 메모리 사용량
메모리를 축내는 코드를 작성하고 실행시켜보고 다시 확인해보도록 함
Alma에 파이썬이 내장되어 있으니 간단하게 작성, 실행 가능한 파이썬으로 작성
리스트를 두고 계속 쌓아서 메모리 용량을 잡아먹게 해봄
[root@Alma ~]# vi main.py
import time
string = "안녕?"
arr = []
def loop(string):
arr.append(string)
print(len(arr))
def main():
while True:
loop(string)
if len(arr) % 1000000 == 0 :
time.sleep(0.1)
if __name__ == "__main__":
main()
숫자가 미치도록 치솟는다. "안녕?" 문자열이 해당 숫자만큼 반복한 리스트가 있는 상태
[root@Alma ~]# python3 main.py
...
12144416
12144417
12144418
12144419
12144420
12144421
12144422
12144423
12144424
12144425
12144426
12144427
12144428
12144429
12144430
12144431
12144432
...
얼마 지나지 않아 갑자기 치솟은 게 확인 됨

노드 메모리 사용량 확인
이제 이걸 가지고 평균 메모리 사용량이랑 비교해보면 이렇게 나옴 1분 기준으로 비교한 값과 전체 평균

1분 당 평균 사용량 (초록선) 전체 평균 사용량 (노란선)
그럼 1분을 기준으로 잡은 부분이 파이썬으로 메모리를 잡아버렸기 때문에 더 높게 잡혀 약 700MiB가 넘은 게 2번 정도 보임
이걸 기준으로 알림을 발생시켜보겠다.
아까 말한 Alertmanager라는 걸 설치하고 설정해주면 됨
https://prometheus.io/download/ 프로메테우스 받았던 여기서 찾기 가능
prometheus 깔았던 것처럼 비슷하게 해줌
설정 파일이 있으니 /etc 밑에 디렉터리 만들어 지정해주고 사용자 만들어서 지정해주고 등등
[root@monitoring ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.29.0/alertmanager-0.29.0.linux-amd64.tar.gz
[root@monitoring ~]# tar zvxf alertmanager-0.29.0.linux-amd64.tar.gz
[root@monitoring alertmanager-0.29.0.linux-amd64]# ll
total 65976
-rw-r--r--. 1 mysqld_exporter mysqld_exporter 11357 Nov 4 22:23 LICENSE
-rw-r--r--. 1 mysqld_exporter mysqld_exporter 311 Nov 4 22:23 NOTICE
-rwxr-xr-x. 1 mysqld_exporter mysqld_exporter 38405202 Nov 4 22:09 alertmanager
-rw-r--r--. 1 mysqld_exporter mysqld_exporter 356 Nov 4 22:23 alertmanager.yml
-rwxr-xr-x. 1 mysqld_exporter mysqld_exporter 29126915 Nov 4 22:09 amtool
[root@monitoring alertmanager-0.29.0.linux-amd64]# mv alertmanager amtool /usr/local/bin/
[root@monitoring alertmanager-0.29.0.linux-amd64]# mkdir -p /var/lib/alertmanager
[root@monitoring alertmanager-0.29.0.linux-amd64]# mkdir -p /etc/alertmanager
[root@monitoring alertmanager-0.29.0.linux-amd64]# mv alertmanager.yml /etc/alertmanager/
[root@monitoring alertmanager-0.29.0.linux-amd64]# chown -R alertmanager:alertmanager /etc/alertmanager/
[root@monitoring alertmanager-0.29.0.linux-amd64]# chown -R alertmanager:alertmanager /var/lib/alertmanager/
[root@monitoring alertmanager-0.29.0.linux-amd64]# chown -R alertmanager:alertmanager /usr/local/bin/alertmanager /usr/local/bin/amtool
시스템 만드는 것도 동일, 잔여 파일 삭제들도 마찬가지, 시스템 대몬 재시작 및 활성화까
[root@monitoring ~]# vi /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/bin/alertmanager \
--config.file /etc/alertmanager/alertmanager.yml \
--storage.path /var/lib/alertmanager/
[Install]
WantedBy=multi-user.target
[root@monitoring ~]# rm alertmanager-0.29.0.linux-amd64* -rf
[root@monitoring ~]# systemctl daemon-reload
[root@monitoring ~]# systemctl enable --now alertmanager
Created symlink /etc/systemd/system/multi-user.target.wants/alertmanager.service → /etc/systemd/system/alertmanager.service.
접근 허용까지 해주면 얼러트매니저 설정도 끝, 얘는 대시보드가 9093번이다
[root@monitoring ~]# chcon -t bin_t /usr/local/bin/alertmanager
[root@monitoring ~]# chcon -t bin_t /usr/local/bin/amtool
[root@monitoring ~]# ss -tlnup | grep al
Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp UNCONN 0 0 *:9094 *:* users:(("alertmanager",pid=11420,fd=6))
tcp LISTEN 0 4096 *:9094 *:* users:(("alertmanager",pid=11420,fd=3))
tcp LISTEN 0 4096 *:9093 *:* users:(("alertmanager",pid=11420,fd=7))
[root@monitoring ~]# firewall-cmd --add-port 9093/tcp --permanent
success
[root@monitoring ~]# firewall-cmd --reload
success
얘도 브라우저에서 정상적으로 붙었나 확인이 가능 잘 된 듯

'리눅스 > 실습' 카테고리의 다른 글
| 모니터링 서버 구축해보기-4 (1) | 2025.11.16 |
|---|---|
| 모니터링 서버 구축해보기-2 (1) | 2025.11.14 |
| 모니터링 서버 구축해보기-1 (0) | 2025.11.14 |
| ansible로 쿠버네티스 클러스터 구성하기 (0) | 2025.11.11 |
| 내부 저장소 구축과 연동 - 2 (0) | 2025.11.10 |