Lightsail에서 Prometheus를 사용하여 시스템 리소스 및 앱 모니터링
Prometheus는 다양한 시스템 리소스 및 애플리케이션을 관리하기 위한 오픈 소스 시계열 모니터링 툴입니다. 툴은 다차원 데이터 모델, 수집된 데이터 쿼리 기능, Grafana를 통한 상세한 보고 및 데이터 시각화를 제공합니다.
기본적으로 Prometheus는 설치된 서버에서 메트릭을 수집할 수 있습니다. 노드 내보내기의 도움을 받아 웹 서버, 컨테이너, 데이터베이스, 맞춤형 애플리케이션 및 기타 서드파티 시스템 등의 다른 리소스에서 메트릭을 수집합니다. 이 튜토리얼에서는 Lightsail 인스턴스에서 노드 내보내기를 사용하여 Prometheus를 설치하고 구성하는 방법을 설명합니다. 사용 가능한 전체 내보내기 목록은 Prometheus 문서에서 내보내기 및 통합
목차
1단계: 필수 구성 요소 완성
Amazon Lightsail 인스턴스에 Prometheus 설치하기 전에 다음을 진행해야 합니다.
-
Lightsail에서 인스턴스를 생성합니다. 인스턴스를 위해서는 Ubuntu 20.04 LTS 블루프린트 사용을 권장합니다. 자세한 내용은 Amazon Lightsail에서 인스턴스 생성을 참조합니다.
-
고정 IP 주소를 생성하고 새 인스턴스에 연결합니다. 자세한 내용은 Amazon Lightsail에서 고정 IP 생성을 참조합니다.
-
새 인스턴스의 방화벽에서 9090 및 9100 포트를 엽니다. Prometheus를 사용하려면 포트 9090 및 9100이 열려 있어야 합니다. 자세한 내용은 Amazon Lightsail의 인스턴스 방화벽 규칙 추가 및 편집을 참조합니다.
2단계: Lightsail 인스턴스에 사용자와 로컬 시스템 디렉터리 추가
다음 절차를 완료하면 SSH로 Lightsail 인스턴스에 연결하고, 사용자 디렉터리와 시스템 디렉터리를 추가합니다. 이 절차는 다음 Linux 사용자 계정을 생성합니다.
-
prometheus
- 이 계정은 서버 환경을 설치하고 구성하는 데 사용됩니다. -
exporter
- 이 계정은node_exporter
확장을 구성하는 데 사용합니다.
이러한 사용자 계정은 관리 목적으로만 생성되므로 이 설정 범위를 벗어나는 추가 사용자 서비스나 권한이 필요하지 않습니다. 이 절차에서는 Prometheus가 리소스 모니터링에 사용하는 파일, 서비스 설정, 데이터를 저장하고 관리하기 위한 디렉터리도 생성합니다.
-
Lightsail 콘솔
에 로그인합니다. -
인스턴스 관리 페이지의 연결(Connect) 탭에서 SSH로 연결(Connect using SSH)을 선택합니다.
-
연결한 후 다음 명령을 하나씩 입력하여
prometheus
와exporter
Linux 사용자 계정 2개를 생성합니다.sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false exporter
-
다음 명령을 하나씩 입력하여 로컬 시스템 디렉터리를 생성합니다.
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
3단계: Prometheus 바이너리 패키지 다운로드
다음 절차를 완료하면 Lightsail 인스턴스에 Prometheus 바이너리 패키지를 다운로드합니다.
-
로컬 컴퓨터에서 웹 브라우저를 열고 Prometheus 다운로드 페이지
로 들어갑니다. -
페이지 상단의 운영 체제(Operating system) 드롭다운에서 Linux를 선택합니다. 아키텍처에서 amd64를 선택합니다.
-
Prometheus 다운로드 링크를 선택하거나 마우스 오른쪽 버튼으로 클릭하고, 컴퓨터의 텍스트 파일에 링크 주소를 복사합니다. 보이는 node_exporter 다운로드 링크에 대해서도 똑같이 반복합니다. 이 절차의 뒷부분에서 두 개의 복사한 주소를 모두 사용합니다.
-
SSH로 Lightsail 인스턴스에 연결합니다.
-
다음 명령을 입력하여 디렉터리를 홈 디렉터리로 변경합니다.
cd ~
-
다음 명령을 입력하여 인스턴스에 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
-
다음 명령을 입력하여
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
-
다음 명령을 하나씩 실행하여 다운로드한 Prometheus 및 Node Exporter 파일의 내용을 추출합니다.
tar -xvf
prometheus-2.37.0.linux-amd64.tar.gz
tar -xvf
node_exporter-1.3.1.linux-amd64.tar.gz
다운로드한 파일의 내용을 추출하고 나면 하위 디렉터리가 여러 개 만들어집니다.
-
다음 명령을 하나씩 입력하여 압축을 푼
prometheus
과promtool
파일을/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
-
다음 명령을 입력하여
prometheus
과promtool
파일의 소유권을 이 튜토리얼에서 앞서 생성한prometheus
사용자로 변경합니다.sudo chown prometheus:prometheus /usr/local/bin/prom*
-
다음 명령을 하나씩 입력하여
/etc/prometheus
의 하위 디렉터리인consoles
과console_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
-
다음 명령을 하나씩 입력하여 복사한 파일의 소유권을 이 튜토리얼에서 앞서 생성한
prometheus
사용자로 변경합니다. 이-R
옵션은 계층 내의 모든 파일과 디렉터리에 대해 재귀적인 소유권 변경을 수행합니다.sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
-
다음 명령을 하나씩 입력하여 구성 파일
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
-
다음 명령을 입력하여
./node_exporter*
하위 디렉터리의node_exporter
파일을/usr/local/bin
프로그램 디렉터리로 복사합니다.sudo cp -p ./node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
-
다음 명령을 입력하여 파일의 소유권을 이 튜토리얼에서 앞서 생성한
exporter
사용자로 변경합니다.sudo chown exporter:exporter /usr/local/bin/node_exporter
4단계: Prometheus 구성
다음 절차를 완료하면 Prometheus를 구성합니다. 이 절차에서는 Prometheus 툴의 다양한 설정을 포함한 prometheus.yml
파일을 열고 편집합니다. Prometheus는 파일에 구성한 설정을 기반으로 모니터링 환경을 설정합니다.
-
SSH로 Lightsail 인스턴스에 연결합니다.
-
다음 명령을 입력하여
prometheus.yml
파일을 열고 편집하기 전에 백업 사본을 생성합니다.sudo cp /etc/prometheus/prometheus.yml /etc/prometheus/prometheus.yml.backup
-
다음 명령을 입력하여 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단계에서 기본 설정을 변경합니다.
참고
이 초기 설정의 경우에는
alerting
과rule_files
매개 변수를 구성할 필요가 없습니다. -
-
Vim으로 연
prometheus.yml
파일에서 I를 눌러 Vim을 삽입 모드를 시작합니다. -
스크롤하여
static_configs
헤더 아래에 있는targets
매개 변수를 찾습니다. -
기본 설정을
(으)로 변경합니다.<ip_addr>
:9090
에서 인스턴스의 고정 IP 주소로 변경합니다. 수정한 매개 변수는 다음 예와 같은 형식이어야 합니다.<ip_addr>
-
Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.
-
(선택 사항) 문제가 발생한 경우 다음 명령을 입력하여
prometheus.yml
파일과 이 절차에서 앞서 생성한 백업 파일을 교체합니다.sudo cp /etc/prometheus/prometheus.yml.backup /etc/prometheus/prometheus.yml
5단계: Prometheus 시작
다음 절차를 완료하면 인스턴스에서 Prometheus 서비스를 시작합니다.
-
SSH로 Lightsail 인스턴스에 연결합니다.
-
다음 명령을 입력하여 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에서 수신 대기 중임을 나타내야 합니다.
서비스가 시작되지 않는다면, 이 튜토리얼의 1단계: 필수 구성 요소 완성 섹션에서 이 포트의 트래픽을 허용하는 인스턴스 방화벽 규칙 생성에 대한 정보 참조합니다. 기타 오류는
prometheus.yml
파일에 구문 오류가 없는지 검토하여 확인합니다. -
실행 중인 서비스가 검증되면 Ctrl+C를 눌러 이를 중단합니다.
-
다음 명령을 입력하여 Vim에서
systemd
구성 파일을 엽니다. 이 파일은 프로메테우스를 시작하는 데 사용합니다.sudo vim /etc/systemd/system/prometheus.service
-
다음 라인을 파일에 삽입합니다.
[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
를 실행하여 서비스에 대한 추가 정보를 볼 수 있습니다. -
Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.
-
다음 명령을 입력하여
systemd
서비스 매니저로 정보를 로드합니다.sudo systemctl daemon-reload
-
Prometheus을 설정하려면 다음 명령을 입력합니다.
sudo systemctl start prometheus
-
다음 명령을 입력하여 Prometheus 서비스의 상태를 확인합니다.
sudo systemctl status prometheus
서비스가 제대로 실행된다면 다음 예제와 비슷한 출력이 표시됩니다.
-
Q를 눌러 상태 명령을 종료합니다.
-
다음 명령을 입력하여 인스턴스가 부팅되었을 때 Prometheus를 활성화합니다.
sudo systemctl enable prometheus
-
로컬 컴퓨터에서 웹 브라우저를 열고 다음 웹 주소로 이동하여 Prometheus 관리 인터페이스를 확인합니다.
http:
<ip_addr>
:9090<ip_addr>
를 Lightsail 인스턴스의 고정 IP 주소로 니다. 다음 예와 비슷한 대시보드를 볼 수 있습니다.
6단계: Node Exporter 시작
다음 절차를 완료하면 Node Exporter 서비스를 시작합니다.
-
SSH로 Lightsail 인스턴스에 연결합니다.
-
다음 명령을 입력하여 Vim에서
node_exporter
에 대한systemd
서비스 파일을 생성합니다.sudo vim /etc/systemd/system/node_exporter.service
-
Vim에서 I 키를 눌러 삽입 모드를 시작합니다.
-
파일에 다음 텍스트 행을 추가합니다. 그러면 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 매뉴얼 페이지
를 참조합니다. -
Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.
-
다음 명령을 입력하여
systemd
프로세스를 다시 로드합니다.sudo systemctl daemon-reload
-
다음 명령을 입력하여
node_exporter
서비스를 시작합니다.sudo systemctl start node_exporter
-
다음 명령을 입력하여
node_exporter
서비스의 상태를 확인합니다.sudo systemctl status node_exporter
이 명령이 성공적으로 실행된다면 다음과 비슷한 출력이 표시됩니다.
-
Q를 눌러 상태 명령을 종료합니다.
-
다음 명령을 입력하여 인스턴스가 부팅되었을 때 Node Exporter의 시작을 활성화합니다.
sudo systemctl enable node_exporter
7단계: Node Exporter 데이터 수집기로 Prometheus 구성
다음 절차를 완료하면 Node Exporter 데이터 수집기로 Prometheus를 구성합니다. 구성은 job_name
에 대한 매개 변수에서prometheus.yml
파일에서 node_exporter
에 대한 새로운 매개 변수 추가를 통해 설정합니다.
-
SSH로 Lightsail 인스턴스에 연결합니다.
-
다음 명령을 입력하여 Vim에서
prometheus.yml
파일을 엽니다.sudo vim /etc/prometheus/prometheus.yml
-
Vim에서 I 키를 눌러 삽입 모드를 시작합니다.
-
파일에 다음 텍스트 줄을 기존
- targets: ["
매개 변수 아래 추가합니다.<ip_addr>
:9090"]- job_name: "node_exporter" static_configs: - targets: ["
<ip_addr>
:9100"]prometheus.yml
파일에서 수정된 매개 변수는 다음 예와 같은 형식이어야 합니다.다음을 참조합니다.
-
Node Exporter 데이터를 스크랩하는
prometheus
서버에 대한 9100 포트를 수신합니다. 이 튜토리얼의 1단계: 필수 구성 요소 완성 섹션의 설명대로 인스턴스 방화벽 규칙을 생성하는 단계를 따랐는지 확인합니다. -
prometheus
job_name
의 구성과 마찬가지로 교체<ip_addr>
를 Lightsail 인스턴스에 연결된 고정 IP 주소로 변경합니다.
-
-
Esc키를 눌러 삽입 모드를 종료하고, :wq!를 입력하여 변경 사항 저장 후 Vim을 종료합니다.
-
다음 명령을 입력하여 구성 파일의 변경 사항을 적용할 수 있도록 Prometheus 서비스를 다시 시작합니다.
sudo systemctl restart prometheus
-
다음 명령을 입력하여 Prometheus 서비스의 상태를 확인합니다.
sudo systemctl status prometheus
서비스가 제대로 다시 시작한다면 다음과 비슷한 출력이 표시됩니다.
-
Q를 눌러 상태 명령을 종료합니다.
-
로컬 컴퓨터에서 웹 브라우저를 열고 다음 웹 주소로 이동하여 Prometheus 관리 인터페이스를 확인합니다.
http:
<ip_addr>
:9090<ip_addr>
를 Lightsail 인스턴스의 고정 IP 주소로 니다. 다음 예와 비슷한 대시보드를 볼 수 있습니다. -
기본 메뉴의 상태(Status) 드롭다운에서 대상(Targets)을 선택합니다.
다음 화면에는 두 개의 대상이 보입니다. 첫 번째 대상은node_exporter 메트릭 수집기 작업이고, 두 번째 대상은prometheus작업입니다.
이제 메트릭을 수집하고 서버를 모니터링할 수 있는 환경이 올바르게 설정되었습니다.