Lightsail에서 Prometheus를 사용하여 시스템 리소스 및 앱 모니터링 - Amazon Lightsail

Lightsail에서 Prometheus를 사용하여 시스템 리소스 및 앱 모니터링

Prometheus는 다양한 시스템 리소스 및 애플리케이션을 관리하기 위한 오픈 소스 시계열 모니터링 툴입니다. 툴은 다차원 데이터 모델, 수집된 데이터 쿼리 기능, Grafana를 통한 상세한 보고 및 데이터 시각화를 제공합니다.

기본적으로 Prometheus는 설치된 서버에서 메트릭을 수집할 수 있습니다. 노드 내보내기의 도움을 받아 웹 서버, 컨테이너, 데이터베이스, 맞춤형 애플리케이션 및 기타 서드파티 시스템 등의 다른 리소스에서 메트릭을 수집합니다. 이 튜토리얼에서는 Lightsail 인스턴스에서 노드 내보내기를 사용하여 Prometheus를 설치하고 구성하는 방법을 설명합니다. 사용 가능한 전체 내보내기 목록은 Prometheus 문서에서 내보내기 및 통합을 참조합니다.

목차

1단계: 필수 구성 요소 완성

Amazon Lightsail 인스턴스에 Prometheus 설치하기 전에 다음을 진행해야 합니다.

2단계: Lightsail 인스턴스에 사용자와 로컬 시스템 디렉터리 추가

다음 절차를 완료하면 SSH로 Lightsail 인스턴스에 연결하고, 사용자 디렉터리와 시스템 디렉터리를 추가합니다. 이 절차는 다음 Linux 사용자 계정을 생성합니다.

  • prometheus - 이 계정은 서버 환경을 설치하고 구성하는 데 사용됩니다.

  • exporter - 이 계정은 node_exporter 확장을 구성하는 데 사용합니다.

이러한 사용자 계정은 관리 목적으로만 생성되므로 이 설정 범위를 벗어나는 추가 사용자 서비스나 권한이 필요하지 않습니다. 이 절차에서는 Prometheus가 리소스 모니터링에 사용하는 파일, 서비스 설정, 데이터를 저장하고 관리하기 위한 디렉터리도 생성합니다.

  1. Lightsail 콘솔에 로그인합니다.

  2. 인스턴스 관리 페이지의 연결(Connect) 탭에서 SSH로 연결(Connect using SSH)을 선택합니다.

    Lightsail 콘솔에서 SSH로 연결
  3. 연결한 후 다음 명령을 하나씩 입력하여 prometheusexporter Linux 사용자 계정 2개를 생성합니다.

    sudo useradd --no-create-home --shell /bin/false prometheus
    sudo useradd --no-create-home --shell /bin/false exporter
  4. 다음 명령을 하나씩 입력하여 로컬 시스템 디렉터리를 생성합니다.

    sudo mkdir /etc/prometheus /var/lib/prometheus
    sudo chown prometheus:prometheus /etc/prometheus
    sudo chown prometheus:prometheus /var/lib/prometheus

3단계: Prometheus 바이너리 패키지 다운로드

다음 절차를 완료하면 Lightsail 인스턴스에 Prometheus 바이너리 패키지를 다운로드합니다.

  1. 로컬 컴퓨터에서 웹 브라우저를 열고 Prometheus 다운로드 페이지로 들어갑니다.

  2. 페이지 상단의 운영 체제(Operating system) 드롭다운에서 Linux를 선택합니다. 아키텍처에서 amd64를 선택합니다.

    Prometheus 다운로드 필터 선택
  3. Prometheus 다운로드 링크를 선택하거나 마우스 오른쪽 버튼으로 클릭하고, 컴퓨터의 텍스트 파일에 링크 주소를 복사합니다. 보이는 node_exporter 다운로드 링크에 대해서도 똑같이 반복합니다. 이 절차의 뒷부분에서 두 개의 복사한 주소를 모두 사용합니다.

    Prometheus 다운로드 링크 복사
  4. SSH로 Lightsail 인스턴스에 연결합니다.

  5. 다음 명령을 입력하여 디렉터리를 홈 디렉터리로 변경합니다.

    cd ~
  6. 다음 명령을 입력하여 인스턴스에 Prometheus 바이너리 패키지를 다운로드합니다.

    curl -LO prometheus-download-address

    prometheus-download-address에 이 절차에서 앞서 복사한 주소를 덮어씌웁니다. 명령은 주소를 추가했을 때 다음 예시 출력과 비슷하게 출력됩니다.

    curl -LO https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
  7. 다음 명령을 입력하여 node_exporter 실행 파일을 인스턴스로 다운로드합니다.

    curl -LO node_exporter-download-address

    node_exporter-download-address에 이 절차에서 앞서 복사한 주소를 덮어씌웁니다. 명령은 주소를 추가했을 때 다음 예시 출력과 비슷하게 출력됩니다.

    curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
  8. 다음 명령을 하나씩 실행하여 다운로드한 Prometheus 및 Node Exporter 파일의 내용을 추출합니다.

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

    다운로드한 파일의 내용을 추출하고 나면 하위 디렉터리가 여러 개 만들어집니다.

  9. 다음 명령을 하나씩 입력하여 압축을 푼 prometheuspromtool 파일을 /usr/local/bin 프로그램 디렉터리에 복사합니다.

    sudo cp -p ./prometheus-2.37.0.linux-amd64/prometheus /usr/local/bin
    sudo cp -p ./prometheus-2.37.0.linux-amd64/promtool /usr/local/bin
  10. 다음 명령을 입력하여 prometheuspromtool파일의 소유권을 이 튜토리얼에서 앞서 생성한 prometheus 사용자로 변경합니다.

    sudo chown prometheus:prometheus /usr/local/bin/prom*
  11. 다음 명령을 하나씩 입력하여/etc/prometheus의 하위 디렉터리인 consolesconsole_libraries를 복사합니다. -r 옵션은 계층 내 모든 디렉터리의 재귀 복사를 수행합니다.

    sudo cp -r ./prometheus-2.37.0.linux-amd64/consoles /etc/prometheus
    sudo cp -r ./prometheus-2.37.0.linux-amd64/console_libraries /etc/prometheus
  12. 다음 명령을 하나씩 입력하여 복사한 파일의 소유권을 이 튜토리얼에서 앞서 생성한 prometheus 사용자로 변경합니다. 이-R 옵션은 계층 내의 모든 파일과 디렉터리에 대해 재귀적인 소유권 변경을 수행합니다.

    sudo chown -R prometheus:prometheus /etc/prometheus/consoles
    sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
  13. 다음 명령을 하나씩 입력하여 구성 파일 prometheus.yml/etc/prometheus 디렉터리에 복사하고 복사한 파일의 소유권을 이 튜토리얼에서 앞서 생성한 prometheus 사용자로 변경합니다.

    sudo cp -p ./prometheus-2.37.0.linux-amd64/prometheus.yml /etc/prometheus
    sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
  14. 다음 명령을 입력하여 ./node_exporter* 하위 디렉터리의 node_exporter 파일을 /usr/local/bin 프로그램 디렉터리로 복사합니다.

    sudo cp -p ./node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
  15. 다음 명령을 입력하여 파일의 소유권을 이 튜토리얼에서 앞서 생성한 exporter 사용자로 변경합니다.

    sudo chown exporter:exporter /usr/local/bin/node_exporter

4단계: Prometheus 구성

다음 절차를 완료하면 Prometheus를 구성합니다. 이 절차에서는 Prometheus 툴의 다양한 설정을 포함한 prometheus.yml 파일을 열고 편집합니다. Prometheus는 파일에 구성한 설정을 기반으로 모니터링 환경을 설정합니다.

  1. SSH로 Lightsail 인스턴스에 연결합니다.

  2. 다음 명령을 입력하여 prometheus.yml 파일을 열고 편집하기 전에 백업 사본을 생성합니다.

    sudo cp /etc/prometheus/prometheus.yml /etc/prometheus/prometheus.yml.backup
  3. 다음 명령을 입력하여 Vim에서 prometheus.yml 파일을 엽니다.

    sudo vim /etc/prometheus/prometheus.yml

    다음은 prometheus.yml 파일에서 구성할 수 있는 몇 가지 중요한 매개 변수입니다.

    • scrape_interval - global 헤더 아래에 있는 매개 변수는 Prometheus가 주어진 대상의 메트릭 데이터를 어떤 빈도로 수집 또는 스크랩하는지 지정된시간 간격(초 단위)을 정의합니다. global 태그가 가리키는 바와 같이 이 설정은 Prometheus가 모니터링하는 모든 리소스에 범용으로 적용됩니다. 이 설정은 개별 내보내기가 전역 값을 재정의하는 다른 값을 제공하지 않는 한 내보내기에도 적용됩니다. 이 매개 변수는 현재 값인 15초로 설정을 유지할 수 있습니다.

    • job_name - scrape_configs 헤더 이래에 있는 이 매개 변수는 데이터 쿼리 또는 시각적 표시의 결과 집합에서 내보내기를 식별하는 레이블입니다. 작업 환경에서 모니터링되는 리소스를 가장 잘 반영하도록 작업 이름의 값을 지정할 수 있습니다. 예를 들어, 웹 사이트 관리 작업에 business-web-app이라는 레이블을 지정하거나, 데이터베이스에 mysql-db-1이라는 레이블을 지정할 수 있습니다. 이 초기 설정에서는 Prometheus 서버만 모니터링하므로 현재 prometheus 값을 유지할 수 있습니다.

    • targets - static_configs 헤더 아래에 있는 targets 설정은 ip_addr:port 키-값 페어를 사용하여 지정된 내보내기가 실행 중인 위치를 식별합니다. 절차의 4~7단계에서 기본 설정을 변경합니다.

      Prometheus YAML 파일
    참고

    이 초기 설정의 경우에는 alertingrule_files 매개 변수를 구성할 필요가 없습니다.

  4. Vim으로 연 prometheus.yml 파일에서 I를 눌러 Vim을 삽입 모드를 시작합니다.

  5. 스크롤하여 static_configs 헤더 아래에 있는 targets 매개 변수를 찾습니다.

  6. 기본 설정을 <ip_addr>:9090(으)로 변경합니다. <ip_addr>에서 인스턴스의 고정 IP 주소로 변경합니다. 수정한 매개 변수는 다음 예와 같은 형식이어야 합니다.

    Prometheus YAML 파일에서 수정한 static_configs 매개 변수
  7. Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.

  8. (선택 사항) 문제가 발생한 경우 다음 명령을 입력하여 prometheus.yml 파일과 이 절차에서 앞서 생성한 백업 파일을 교체합니다.

    sudo cp /etc/prometheus/prometheus.yml.backup /etc/prometheus/prometheus.yml

5단계: Prometheus 시작

다음 절차를 완료하면 인스턴스에서 Prometheus 서비스를 시작합니다.

  1. SSH로 Lightsail 인스턴스에 연결합니다.

  2. 다음 명령을 입력하여 Prometheus 서비스를 시작합니다.

    sudo -u prometheus /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries

    명령은 시작 프로세스 및 기타 서비스에 대한 세부 정보를 출력합니다. 또한 서비스가 포트 9090에서 수신 대기 중임을 나타내야 합니다.

    Prometheus 시작 출력

    서비스가 시작되지 않는다면, 이 튜토리얼의 1단계: 필수 구성 요소 완성 섹션에서 이 포트의 트래픽을 허용하는 인스턴스 방화벽 규칙 생성에 대한 정보 참조합니다. 기타 오류는 prometheus.yml 파일에 구문 오류가 없는지 검토하여 확인합니다.

  3. 실행 중인 서비스가 검증되면 Ctrl+C를 눌러 이를 중단합니다.

  4. 다음 명령을 입력하여 Vim에서 systemd 구성 파일을 엽니다. 이 파일은 프로메테우스를 시작하는 데 사용합니다.

    sudo vim /etc/systemd/system/prometheus.service
  5. 다음 라인을 파일에 삽입합니다.

    [Unit] Description=PromServer Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=multi-user.target

    위 지침은 Linux systemd서비스 매니저에서 서버의 Prometheus를 시작하기 위해 사용하는 지침입니다. Prometheus를 호출하면 Prometheus는 prometheus 사용자로 실행되고, 구성 설정을 로드, 파일/var/lib/prometheus 디렉터리에 시계열 데이터 저장을 위해 prometheus.yml 파일을 참조합니다. 명령줄에서 man systemd를 실행하여 서비스에 대한 추가 정보를 볼 수 있습니다.

  6. Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.

  7. 다음 명령을 입력하여 systemd 서비스 매니저로 정보를 로드합니다.

    sudo systemctl daemon-reload
  8. Prometheus을 설정하려면 다음 명령을 입력합니다.

    sudo systemctl start prometheus
  9. 다음 명령을 입력하여 Prometheus 서비스의 상태를 확인합니다.

    sudo systemctl status prometheus

    서비스가 제대로 실행된다면 다음 예제와 비슷한 출력이 표시됩니다.

    Prometheus 상태 출력
  10. Q를 눌러 상태 명령을 종료합니다.

  11. 다음 명령을 입력하여 인스턴스가 부팅되었을 때 Prometheus를 활성화합니다.

    sudo systemctl enable prometheus
  12. 로컬 컴퓨터에서 웹 브라우저를 열고 다음 웹 주소로 이동하여 Prometheus 관리 인터페이스를 확인합니다.

    http:<ip_addr>:9090

    <ip_addr>를 Lightsail 인스턴스의 고정 IP 주소로 니다. 다음 예와 비슷한 대시보드를 볼 수 있습니다.

    Prometheus 대시보드

6단계: Node Exporter 시작

다음 절차를 완료하면 Node Exporter 서비스를 시작합니다.

  1. SSH로 Lightsail 인스턴스에 연결합니다.

  2. 다음 명령을 입력하여 Vim에서 node_exporter에 대한 systemd 서비스 파일을 생성합니다.

    sudo vim /etc/systemd/system/node_exporter.service
  3. Vim에서 I 키를 눌러 삽입 모드를 시작합니다.

  4. 파일에 다음 텍스트 행을 추가합니다. 그러면 CPU 로드, 파일 시스템 사용량 및 메모리 리소스에 대한 모니터링 수집기를 갖춘 node_exporter를 구성합니다.

    [Unit] Description=NodeExporter Wants=network-online.target After=network-online.target [Service] User=exporter Group=exporter Type=simple ExecStart=/usr/local/bin/node_exporter --collector.disable-defaults \ --collector.meminfo \ --collector.loadavg \ --collector.filesystem [Install] WantedBy=multi-user.target
    참고

    이 지침은 Node Exporter 기본 머신 메트릭을 비활성화합니다. Ubuntu에서 사용 가능한 전체 지표 목록은 Ubuntu 문서에서 Prometheus node_exporter 매뉴얼 페이지를 참조합니다.

  5. Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.

  6. 다음 명령을 입력하여 systemd프로세스를 다시 로드합니다.

    sudo systemctl daemon-reload
  7. 다음 명령을 입력하여 node_exporter 서비스를 시작합니다.

    sudo systemctl start node_exporter
  8. 다음 명령을 입력하여 node_exporter 서비스의 상태를 확인합니다.

    sudo systemctl status node_exporter

    이 명령이 성공적으로 실행된다면 다음과 비슷한 출력이 표시됩니다.

    노드 내보내기 상태 출력
  9. Q를 눌러 상태 명령을 종료합니다.

  10. 다음 명령을 입력하여 인스턴스가 부팅되었을 때 Node Exporter의 시작을 활성화합니다.

    sudo systemctl enable node_exporter

7단계: Node Exporter 데이터 수집기로 Prometheus 구성

다음 절차를 완료하면 Node Exporter 데이터 수집기로 Prometheus를 구성합니다. 구성은 job_name에 대한 매개 변수에서prometheus.yml 파일에서 node_exporter에 대한 새로운 매개 변수 추가를 통해 설정합니다.

  1. SSH로 Lightsail 인스턴스에 연결합니다.

  2. 다음 명령을 입력하여 Vim에서 prometheus.yml 파일을 엽니다.

    sudo vim /etc/prometheus/prometheus.yml
  3. Vim에서 I 키를 눌러 삽입 모드를 시작합니다.

  4. 파일에 다음 텍스트 줄을 기존 - targets: ["<ip_addr>:9090"] 매개 변수 아래 추가합니다.

    - job_name: "node_exporter" static_configs: - targets: ["<ip_addr>:9100"]

    prometheus.yml 파일에서 수정된 매개 변수는 다음 예와 같은 형식이어야 합니다.

    Node Exporter 정적 구성

    다음을 참조합니다.

    • Node Exporter 데이터를 스크랩하는 prometheus 서버에 대한 9100 포트를 수신합니다. 이 튜토리얼의 1단계: 필수 구성 요소 완성 섹션의 설명대로 인스턴스 방화벽 규칙을 생성하는 단계를 따랐는지 확인합니다.

    • prometheus job_name의 구성과 마찬가지로 교체<ip_addr>를 Lightsail 인스턴스에 연결된 고정 IP 주소로 변경합니다.

  5. Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.

  6. 다음 명령을 입력하여 구성 파일의 변경 사항을 적용할 수 있도록 Prometheus 서비스를 다시 시작합니다.

    sudo systemctl restart prometheus
  7. 다음 명령을 입력하여 Prometheus 서비스의 상태를 확인합니다.

    sudo systemctl status prometheus

    서비스가 제대로 다시 시작한다면 다음과 비슷한 출력이 표시됩니다.

    Prometheus 상태 출력
  8. Q를 눌러 상태 명령을 종료합니다.

  9. 로컬 컴퓨터에서 웹 브라우저를 열고 다음 웹 주소로 이동하여 Prometheus 관리 인터페이스를 확인합니다.

    http:<ip_addr>:9090

    <ip_addr>를 Lightsail 인스턴스의 고정 IP 주소로 니다. 다음 예와 비슷한 대시보드를 볼 수 있습니다.

    Prometheus 대시보드
  10. 기본 메뉴의 상태(Status) 드롭다운에서 대상(Targets)을 선택합니다.

    Prometheus 대시보드의 대상 메뉴 옵션

다음 화면에는 두 개의 대상이 보입니다. 첫 번째 대상은node_exporter 메트릭 수집기 작업이고, 두 번째 대상은prometheus작업입니다.

Prometheus 대시보드에서의 대상

이제 메트릭을 수집하고 서버를 모니터링할 수 있는 환경이 올바르게 설정되었습니다.