흰 스타렉스에서 내가 내리지

모니터링 도입기 본문

모니터링

모니터링 도입기

주씨. 2023. 12. 21. 21:11
728x90

# 1. 모니터링 서버 생성

애플리케이션 서버와 모니터링 서버를 분리하기로 하였다. 

ec2 인스턴스를 새로 만들고, 테스트를 위해 임시 스프링부트 프로젝트를 실행했다.

 

# yum update
# timezone
# java 설치
# git 설치

# docker 설치
yum install docker -y

# docker 시작 
systemctl start docker

# docker-compose 설치
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# Verify installation - docker-compose
docker-compose --version

 

 

# 2. 메인서버 Node Exporter 설치

메인서버에서 메트릭들을 수집한 다음 모니터링 서버의 prometheus에 전달해주어야 함. 

https://prometheus.io/download/#node_exporter

 

Download | Prometheus

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io

# 다운로드
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

# 압축해제 
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz

# 압축해제한 폴더 이동
cd node_exporter-1.7.0.linux-amd64

# Node Exporter 실행 
systemctl start node_exporter

 

이런 에러가 발생했음. 아래 과정을 수행해주면 된다.

cp node_exporter /usr/local/bin/
vim /etc/systemd/system/node_exporter.service

""" 아래 내용으로 채워 넣는다.
[Unit]
Description=Prometheus Node Exporter

[Service]
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=default.target
"""


systemctl daemon-reload
systemctl start node_exporter

이제 될 것이다. 

 

이제 [EC2 IP]:9100/metrics에 접근하면, 

[EC2 IP]:9100/metrics

이게 나오면 성공

 

 

# 3.1 프로메테우스 설치

yum install docker -y
systemctl start docker

docker pull prom/prometheus

 

# 3.2 prometheus.yml 

global:
  scrape_interval: 10s
  evaluation_interval: 10s

scrape_configs:
  # 실제 애플리케이션 서버
  - job_name: 'termterm-monitoring'
    metrics_path: /actuator/prometheus
    static_configs:
      - targets: ['localhost:8080']

  # Node-Exporter로 메트릭을 수집하는 서버
  - job_name: 'termterm-main'
    metrics_path: /metrics
    static_configs:
      - targets: ['localhost:9100']
  • global : 전역 설정을 정의하는 섹션
    • scrap_interval : 목표 서버에서 메트릭을 가져오는 간격
    • evaluation_interval : 프로메테우스에서 규칙 평가 및 알람 생성을 실행하는 간격
  • scrip_configs : 수집 대상 및 대상별 구성을 정의하는 섹션
    • job_name : 프로메테우스에서 해당 작업을 식별하는 데 사용되는 이름
      • metrics_path : 메트릭 엔드포인트의 경로 지정
      • static_configs : 대상 서버를 정의하는 섹션
        • targets : 메트릭을 수집할 서버

- 위 예시처럼 localhost 로 하면 실제 ec2 인스턴스에서는 인식을 못한다. 실제 IP주소 혹은 도메인으로 바꿔줘야 한다.

 

#3.3 docker-compose.monitoring.yml

version: '3'

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/prometheus/prometheus.yml:ro
    ports:
      - 19090:9090
    command:
      - "--web.enable-lifecycle"
    restart: always
    networks:
      - promnet
    user: root

  grafana:
    image: grafana/grafana
    container_name: grafana
    volumes:
      - ./grafana-volume:/var/lib/grafana
    restart: always
    networks:
      - promnet
    ports:
      - 13030:3000
    user: root

networks:
  promnet:
    driver: bridge
# 아래 명령어를 통해서 container를 띄운다.
docker-compose -f docker-compose.monitoring.yml up -d

 

 

 

프로메테우스 접속 링크 → :19090

그라파나 접속 링크 → :13030

 

그라파나의 초기 ID, PW는 admin, admin 이다.