2024. 5. 3. 14:32ㆍProject/FootballManager(MSA)
프로젝트 진행 중 서버의 리소스 부족 문제로 인해 주기적으로 서버가 다운되는 문제점을 가지고 있었다. 이 때마다 원인 분석하는 단계에서 시간이 꽤 소요되었기에, 이참에 각 인스턴스의 리소스 사용량을 모니터링 시스템에 추가하려고 한다.
먼저 각 AWS 인스턴스에 Node Exporter를 설치하여 프로메테우스가 시스템 메트릭을 수집할 수 있도록 구성할 것이다.
Node Exporter는 해당 서버의 메트릭을 수집하여 Prometheus가 스크랩할 수 있게 노출시키는 역할을 수행한다.
1. 모든 인스턴스에 Node Exporter 설치
wget 명령어를 통해 설치 후 압축을 해제한다.
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
2. 백그라운드 실행을 위해 Node Exporter를 systemd 서비스로 설정
Linux 시스템에서 Node Exporter를 데몬으로 실행하려면 일반적으로 systemd 서비스를 사용하는 것이 일반적인 방법이다.
이를 위해서는 다음과 같은 순서로 작업을 진행한다.
(1) 먼저 Node Exporter 바이너리를 시스템 경로에 복사 후 nano에디터를 통해 파일을 열어준다.
sudo cp node_exporter /usr/local/bin/
sudo nano /etc/systemd/system/node_exporter.service
(2) node_exporter.service 파일 편집
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
[Unit] 섹션
Description: 서비스의 간단한 설명을 제공. 여기서는 "Node Exporter"로 설정해준다.
Wants: 유닛이 시작되길 원하는 다른 유닛을 명시. network-online.target이 이 유닛에 의존성을 가지고 있음을 의미한다. 이는 네트워크가 온라인 상태가 되기를 원한다는 것을 나타내며, 이 유닛은 네트워크가 온라인 상태일 때만 올바르게 작동할 것이다.
After: 이 유닛이 시작되어야 하는 다른 유닛을 지정한다. network-online.target 후에 Node Exporter 서비스가 시작되어야 함을 나타낸다. 이는 네트워크 서비스가 활성화되고 난 뒤에 Node Exporter가 시작되도록 보장해준다.
[Service] 섹션
User, Group: Node Exporter 프로세스가 실행될 때 사용할 시스템 사용자와 그룹을 지정한다.
Type: 서비스의 시작 유형을 정의. simple은 가장 기본적인 실행 유형으로, ExecStart에 지정된 명령이 주 프로세스로 실행된다.
ExecStart: 서비스가 시작될 때 실행될 명령을 지정.
[Install] 섹션
WantedBy: 서비스가 어느 대상에 의해 시작되기를 원하는지 지정한다. multi-user.target은 기본적인 멀티 유저 시스템 레벨을 의미하며, 이 대상에 의해 서비스가 시작되기를 원한다는 것을 의미한다. 즉, 시스템이 멀티 유저 모드로 부팅될 때 Node Exporter 서비스도 함께 시작되어야 함을 나타낸다.
(3) Node Exporter 전용 사용자를 생성한다.
sudo useradd -rs /bin/false node_exporter
(4) 서비스 활성화 및 시작.
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
3. Prometheus.yml 편집
targets에 모니터링할 각 인스턴스들을 구성해준다. 여기서 9100은 node exporter의 포트 번호이다.
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['[ip address]:9100', '[ip address]:9100']
4. 테스트
모든 구성이 끝났다면 프로메테우스를 재실행 후 메트릭을 정상적으로 스크랩하는지 확인한다. 이후 그라파나를 통해 시각화하여 지표를 확인할 수 있었다. (그라파나 대시보드 ID : 1860)
인스턴스의 상태를 모니터링으로 확인해보니 RAM 사용량이 거의 한계에 가깝게 사용중인 것을 확인해 볼 수 있었다.
다음 포스팅에서는 특정 지표가 높아졌을 때 관리자에게 알림을 주는 서비스를 도입하여 장애 발생을 사전에 예방할 수 있도록 하려고 한다.
'Project > FootballManager(MSA)' 카테고리의 다른 글
[Grafana] 리소스 부족 장애 예방을 위한 Slack Alert 설정 (0) | 2024.05.03 |
---|---|
⚽ FootballManager(MSA) (0) | 2024.03.29 |
Prometheus, Grafana, Springboot 연동하기 (2) (0) | 2024.03.22 |
Docker Swarm을 사용하여 컨테이너 간 네트워크 통신 설정 (0) | 2024.03.21 |
Prometheus, Grafana, Springboot 연동하기 (1) (0) | 2024.03.21 |