본문 바로가기
DevOps

[AWS EC2 인스턴스 모니터링] Node Exporter, Prometheus, Grafana (1)

by Awesome-SH 2022. 11. 8.

이번 포스팅은 사내 모니터링 서비스 구축하며 삽질하며 겪은 경험을 공유하는 포스팅입니다. AWS EC2에서 제공하는 CloudWatch 모니터링 서비스의 비용이 부담되기 때문에 Node Exporter + Prometheus + Grafana 조합으로 EC2 인스턴스의 Health Check가 가능한 시각화 대시보드를 구성합니다.

 

> AWS Instance Terminal

sudo apt-get update

wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz

tar xf node_exporter-1.3.1.linux-amd64.tar.gz
tar xf prometheus-2.37.0.linux-amd64.tar.gz

> Node Exporter

cd node_exporter-1.3.1.linux-arm64
sudo cp node_exporter /usr/local/bin/

sudo useradd -M -r -s /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl status node_exporter
sudo systemctl enable node_exporter

위 명령어로 설치 / 사용자 추가 / 권한 추가 / Node Exporter 실행을 마쳤다면,

아래 명령어로 Node Exporter가 잘 작동하는지 테스트해봅시다.

curl -s localhost:9100/metrics

 

> Prometheus

sudo mkdir -p /etc/prometheus
cd prometheus-2.37.0.linux-amd64
sudo mv prometheus console_libraries prometheus.yml consoles /etc/prometheus

프로메테우스을 위한 그룹과 유저를 시스템에 생성합니다.

sudo groupadd --system prometheus
sudo useradd --system -s /usr/sbin/nologin -g prometheus prometheus

생성한 유저에 권한 설정

sudo chown prometheus:prometheus /etc/prometheus -R

시스템의 서비스로 운영될 수 있도록 systemd에 등록합니다.

cd /etc/systemd/system
sudo vi prometheus.service

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
restart=on-failure
ExecStart=/etc/prometheus/prometheus \
		--config.file=/etc/prometheus/prometheus.yml \
        --storage.tsdb.path=/var/lib/prometheus \
        --web.console.templates=/etc/prometheus/console \
        --web.console.libraries=/etc/prometheus/console_libraries \
        --web.listen-address=0.0.0.0:9090 \
        --web.external-url=
        
[Install]
WantedBy=multi-user.target

storage파일이 적용되어 있는 /var/lib/prometheus 폴더를 생성하고 권한을 prometheus로 변경합니다.

sudo mkdir -p /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

sudo systemctl daemon-reload
sudo systemctl status prometheus.service

sudo journalctl -xe

exporter를 프로메테우스가 수집할 수 있도록 설정해줍니다.

sudo mkdir -p /etc/prometheus/exporters
cd node_exporter-1.3.1.linux-amd64
sudo mv node_exporter /etc/prometheus/exporters/
sudo chown prometheus:prometheus /etc/prometheus/exporters/ -R

exporter와 마찬가지로 systemd 서비스에 설정합니다.

cd /etc/systemd/system
sudo cp prometheus.service node-exporter.service
sudo vi node-exporter.service

[Unit]
Description=Prometheus - node_exporter
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
restart=on-failure
ExecStart=/etc/prometheus/exporters/node_exporter 

[Install]
WantedBy=multi-user.target

설정을 완료했다면 데몬리로드 + 서비스 리스타트 후 상태를 체크해봅시다.

sudo systemctl daemon-reload
sudo systemctl restart node-exporter.service
sudo systemctl status node-exporter.service

 

node_exporter의 포트 번호를 변경하지 않았다면 9100번으로 접근이 가능합니다.

프로메테우스에게 9100번 포트에 Node Exporter가 있다고 알려줍시다!

sudo vi /etc/prometheus/prometheus.yml

  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]

프로메테우스 서비스도 재시작!

sudo systemctl daemon-reload
sudo systemctl restart prometheus.service

 

> Grafana

sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
sudo systemctl enable grafana-server.service
sudo systemctl start grafana-server.service
sudo systemctl status grafana-server.service

그라파나의 기본포트는 3000번을 사용하고 있기 때문에 인스턴스 내 노드 서비스들과 충돌이 날 수 있습니다.

그럴경우, 그라파나의 기본 포트번호를 바꿔주면 됩니다!

sudo vi /etc/grafana/grafana.ini

[server]
http_port=1234 // 주석 풀고 임의 포트 열어줌

sudo systemctl restart grafana-server.service
sudo systemctl status grafana-server.service

 

이렇게 모니터링 서비스를 위한 Node Exporter, Prometheus, Grafana 설치와 환경설정을 마쳤습니다.

다음 포스팅에서는 본격적으로 Grafana를 통해 시각화 대시보드를 구성해보고 사용량에 따른 Alert 서비스를 만들어 웹훅으로 푸쉬 알림 전송하는 방법에 대해서 포스팅할 예정입니다.

 

긴 글 읽어주셔서 감사합니다.

 

-

 

레퍼런스

https://gurumee92.tistory.com/225
https://grepper.tistory.com/68
https://kdevkr.github.io/ec2-node-exporter/

댓글