모니터링 구축하기 ( Grafana + Prometheus + query-exporter + node-exporter )

sunn_ni·2024년 11월 27일
0

이전에는 그냥 로깅만 하면 되겠지 했었는데, 시간이 지나고 사이즈가 커지고
그와중에 서버비용의 최적화를 위해 서버스팩을 줄이다보니.. 점점 알 수 없는 것들이 생겼다.

우아콘에 컨퍼런스에 갔을 때, 항상 고민이였던 모니터링툴에대해 듣게 되었고 검색했고
한번 해볼만 하다는 생각이 들어 시도하게 되었다.

구축할 환경은
실제 코드들이 돌아가는 서버들, 그리고 모니터링 서버 하나이다.

처음에 가장 헷갈렸던것들이 어떤걸 어느 서버에 깔아야하는가였지만
여러번 삽질과.. 시도 끝해 어느정도 감을 잡은 것 같다.

query-exporter, node-exporter 와 같은 관측을 위한 것들은 모니터링 대상 서버에,
Grafana, Prometheus 와 같은 모니터링을 위한 도구는 모니터링서버에서 실행시키면 된다.

로그는 서버가 동작할 때 서버의 상태와 동작 정보를 시간 경과에 따라 기록된 결과입니다. 로그는 시스템의 오류와 문제들을 쉽게 찾아낼 수 있도록 도와줍니다.
반면, 메트릭은 시스템의 성능과 상태에 대한 통계적인 정보를 의미합니다. 메트릭을 잘 수집하면 시스템의 현재 상태를 손쉽게 파악할 수 있고, 사업 현황에 관한 유용한 정보를 얻을 수 있습니다. 가령, 메트릭은 DAU, Retension, CPU 사용량, 메모리 사용량 등이 있습니다.

아직은 베타에서 테스트중이라 완벽하게 정리되면 마저 작성하겠다.
.


1. 모니터링 서버에 그라파나, 프로메테우스, 로키 파일을 설정해주기.

소스를 받아서, 각자의 환경에 맞는 셋팅을 해주기
readme를 (한국어로도 있음) 통해서 알맞게 셋팅을 해준다.
https://github.com/Heesunni/grafana_loki_prometheus

이후에 잘 켜졌는지각각 확인

http://localhost:3003		//그라파나 확인
http://localhost:9100		//프로메테우스 확인
http://localhost:3100/ready //로키 확인

별다른 포트를 설정하지 않았다면 위의 포트들이 기본 포트이다.

이후에, 그라파나에 들어가서

Home > Connections > Add new connection

에 들어가 Loki, Prometheus를 각각 연결해주고( url 각각을 킨 주소를 작성하면 됨),
하단에 Save&test까지 눌러서 통과하면 끝!

2. 관측할 서버에 promtail, exporter을 심어서 실행시켜주기

관측대상 서버에 promtail, exporter을 알맞게 실행시킨다.

원래는 각각의 프로그램들을 따로 다운받아서 켜야하는데, 나의 경우 다 다운받아서 한 파일에 정리해두고 다른 서버에서도 같은 설정으로 사용하려고 이렇게 만들어놨다.

다른 블로그들을 보면 systemctl이나 service등록해서 사용하던데
나는 pm2로 프로그램들을 켰다.

https://github.com/Heesunni/promtail-exporter


3. 결론

그라파나에서 제공해주는 예시 대시보드들로 mysql, linux서버, nodejs 모니터링을 구축을 했고, loki는 원하는 대시보드가 없어서 한참 만지작만지작 거리다가 gpt와 구글링으로 대시보드를 하나 내가 직접 구축했고, 지금은 회사에 큰 모니터에 띄어져있다 ㅎ
아직 계속 연구중이지만 하나하나 대시보드가 업데이트가 되어가는중

아직 모르는거 투성이라 계속 연구중이지만, 회사에 띄어져있는 대시보드를 보면 뿌듯하다 ㅎ


이건 로키이용해서 쌓인 log분석해주는거 만들었다


++추가내용

docker로 그라파나, 로키, 프로메테우스를 작동시켰었는데.. 어느순간부터 용량이슈가 발생했다.

sudo du -sh /var/lib/docker/containers/* | sort -h

해당 명령어를 통해, docker에서 어떤파일이 가장 많은 용량을 차지하는지 확인을 해봤는데
로키의 로그파일이 21기가나 먹고있었다..

우선 불필요한 내용들을 삭제해주고


// docker 컨테이너별 Root FS 사용량 확인하기
docker system df

// docker 전체 정리( 사용하지 않는정보 정리)
docker system prune -af				

// 사용하지 않는 볼륨 확인
docker volume ls -f dangling=true   

//사용하지 않는 볼륨 삭제
docker volume prune -f				

// 로그파일 모두 삭제
for log in $(docker inspect --format='{{.LogPath}}' $(docker ps -aq)); do
  sudo truncate -s 0 "$log";
done

용량제한 설정 docker.yml파일에 추가하고,

--storage.tsdb.retention.time=90d
--storage.tsdb.retention.size=5GB

도커 데몬 설정도 변경

sudo nano /etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

sudo systemctl restart docker

[참고링크]

사용자 수 모니터링 빠르게 시작하기 (Grafana + Prometheus)
Prometheus/Grafana 모니터링 구축
Prometheus/Grafana 모니터링 구축
세상에서 제일 쉬운 Prometheus - Grafana 모니터링 설정
Node.js 모니터링 시스템 구축과 트러블 슈팅 사례(Part 1 — 모니터링 환경구축)

profile
방황중인 서버개발자

0개의 댓글