본문 바로가기
Linux

Prometheus + Grafana 를 활용한 시스템 모니터링

by 도경다경 2023. 4. 17.
반응형

회사에서 사용하는 모니터링 툴을 멋대로 손댈수도 없고 신속하게 보려니 그것도 어렵고 해서
역량 향상 겸 요즘 핫하다는 Prometheus와 Grafana를 활용하여 시스템 모니터링 구성을 해봤다.

Prometheus 는 Metric 수집 툴
Grafana는 수집된 Metric을 GUI로 이쁘게 보여주는 툴
이라고 생각하면 이해가 편할 것 같다.

구성방법은

1) 서버를 하나 마련해서
2) Prometheus, Grafana 설치/연동
3) 클라이언트 쪽에 exporter (node, windws) 설치
4) Grafana 대시보드 구성

위와 같이 크게 4개의 단계로 볼 수 있으며, 구성은 생각보다 쉽고 간단하다. 
대시보드도 이미 Grafana 사이트에 잘 구성된 것들이 많으니 json 파일만 내려받아서 적용하면 된다.

AIX는 안되는 것 같고, Linux는 매우 잘 됨. Windows는 실무에 적용하기는 아직 조금 이른 정도라고 생각한다.
이미지를 올려야 하는데, 고객사 망에 구성해놔서 이미지를...꺼낼수가...없다...아잇 참...


1) 서버
   - VM으로 생성했다.
   - 저장공간은 가볍게 /APP 1TB 구성
   - Grafana는 저장공간이 많지 않고 데이터도 늘지 않으니 패스
   - Prometheus는 10초 주기 1년 보관 설정할거라 넉넉하게 잡았다
   - Process는 service로 관리하고 OS가동 시 자동 시작되도록 설정한다
   - Docker로 가동하려 했으나, 관리편의성을 위해 그냥 package로 설치하기로 했다
   - Grafana 는 rpm 파일 다운 받아서 yum localinstall 해주면 된다. 쉽다.
   - Prometheus는 package 를 다운 받아서 
     prometheus.yml 환경설정 파일은 /etc/prometheus/prometheus.yml 로 저장(이 파일에 클라이언트 설정 저장)
     실행파일은 /APP/prometheus/ 에 저장했다. alias 로 /usr/local/bin/prometheus 만들어주자.
     ln -s 명령어 참조(실행파일 그냥 카피해놔도 된다)
   - consoles 디렉토리와 console_libraries 디렉토리도 /etc/prometheus에 카피하자
    
   - prometheus를 service로 관리하려고 /etc/systemd/system/prometheus.service 파일 신규 생성
####################################################################
[Unit]
Description=Prometheus Time Series Collection and Processing Server
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/prometheus \
                 --config.file /etc/prometheus/prometheus.yml \
                 --storage.tsdb.path /APP/prometheus/data \
                 --storage.tsdb.retention.time=365d \
                 --web.console.templates=/etc/prometheus/consoles \
                 --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target
####################################################################
   - 시스템 데몬 리로드
     sudo systemctl daemon-reload
   - 서비스 재시작하고 리붓할 때 자동 실행되도록 설정
     systemctl restart prometheus && systemctl enable prometheus

2) 클라이언트 - Linux
   - node_exporter binary 파일 /usr/bin 아래 저장 (/usr/local/bin 아래 저장해도 된다)
   - /etc/systemd/system/node_exporter.service 파일 신규 생성
#####################################################################
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
Environment="NODE_EXPORTER_ARGS=--web.listen-address=\":19110\""    ## 19110 포트는 변경 가능, 변경하면 서버쪽에도 설정 적어줘야 함
User=root  ## 계정 만들어줘도 되는데 어차피 백그라운드로 돌거라 root로 실행
Group=root
Type=simple
ExecStart=/usr/bin/node_exporter $NODE_EXPORTER_ARGS

[Install]
WantedBy=default.target
#####################################################################
   - 시스템 데몬 리로드
     sudo systemctl daemon-reload
   - 서비스 재시작하고 리붓할 때 자동 실행되도록 설정
     systemctl restart node_exporter && systemctl enable node_exporter
   - grafana 대시보드는 "Node Exporter for Prometheus Dashboard based on 11074" 추천
    (Node Exporter for Prometheus Dashboard based on 11074 | Grafana Labs)
  - /etc/hosts 파일에 대상 추가해야 /etc/prometheus/prometheus.yml 파일에 심플하게 추가 가능하다.
    /etc/hosts 는 127.0.0.1 localhost 이런 식으로 추가해놓고
    /etc/prometheus/prometheus.yml 에는 요로케 추가할 수 있다. yml 이므로 tab 사용불가. 띄어쓰기 주의.
     - job_name: "OS"
       static_configs:
           - targets: ['localhost:19110']
           - targets: ['localhost2:19110']


3) 클라이언트(Windows)
   - C:\ 나 아무데나 binary 파일 가져다 놓고 다음과 같이 실행
     msiexec /i "C:\windows_exporter-0.22.0-amd64.msi" ENABLED_COLLECTORS=ad,cpu,cs,cpu_info,logical_disk,net,os,service,system,memory,process,time,textfile
   - windows exporter는 웃긴게 default로 가져오는 항목이 적어서 필요한 걸 추가로 옵션에 넣어줘야 한다.
   - port 변경하고 싶으면 다른 옵션 쓰면 된다.
   - services.msc 들어가서 자동실행여부 확인하기
   - grafana 대시보드는 "Windows Status - Prometheus" 추천
     (Windows Status - Prometheus | Grafana Labs)

4) 클라이언트(AIX)
   - 안된다는데? Prometheus는 없... 다른 걸 찾아봐야 할듯

5) 클라이언트(Oracle)
    ※주의 : 생각보다 번거로움, DB 모르면 힘들 수 있음
    내용이 많아서 다른 포스트를 만들었다.

반응형

댓글