웹사이트 검색

Prometheus를 사용하여 Ubuntu 14.04 서버를 모니터링하는 방법


소개

Prometheus는 SoundCloud에서 개발한 오픈 소스 모니터링 시스템입니다. InfluxDB 및 Graphite와 같은 다른 모니터링 시스템과 마찬가지로 Prometheus는 모든 데이터를 시계열 데이터베이스에 저장합니다. 그러나 다차원 데이터 모델과 강력한 쿼리 언어를 제공하여 시스템 관리자가 메트릭 정의를 쉽게 미세 조정할 수 있을 뿐만 아니라 보다 정확한 보고서를 생성할 수 있습니다.

또한 Prometheus 프로젝트에는 PromDash(사용자 지정 대시보드를 개발하는 데 사용할 수 있는 브라우저 기반 도구)와 이메일, Flowdock, Slack, HipChat 등을 통해 경고를 보낼 수 있는 실험적인 AlertManager도 포함되어 있습니다.

이 자습서에서는 Prometheus Server, Node Exporter 및 PromDash를 설치, 구성 및 사용하는 방법을 배웁니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자가 있는 64비트 Ubuntu 14.04 Droplet 1개

참고: 32비트 서버를 사용해야 하는 경우 이 자습서에 언급된 모든 파일 이름과 링크에서 -amd64를 -386으로 바꾸십시오.

1단계 - Prometheus 서버 설치

먼저 이 튜토리얼에서 다운로드한 모든 파일을 저장할 새 디렉토리를 만들고 이동합니다.

  1. mkdir ~/Downloads
  2. cd ~/Downloads

wget을 사용하여 GitHub에서 Prometheus 서버 및 시계열 데이터베이스의 최신 빌드를 다운로드하십시오.

  1. wget "https://github.com/prometheus/prometheus/releases/download/0.15.1/prometheus-0.15.1.linux-amd64.tar.gz"

Prometheus 모니터링 시스템은 각각 개별적으로 설치해야 하는 여러 구성 요소로 구성됩니다. 모든 구성요소를 하나의 상위 디렉토리에 보관하는 것이 좋으므로 하나를 만들고 Prometheus 서버의 모든 바이너리를 저장할 추가 하위 디렉토리를 만듭니다.

  1. mkdir -p ~/Prometheus/server

방금 만든 디렉터리를 입력합니다.

  1. cd ~/Prometheus/server

tar를 사용하여 prometheus-0.15.1.linux-amd64.tar.gz를 추출합니다.

  1. tar -xvzf ~/Downloads/prometheus-0.15.1.linux-amd64.tar.gz

이로써 Prometheus 서버 설치가 완료됩니다. 다음을 입력하여 설치를 확인합니다.

  1. ./prometheus -version

화면에 다음 메시지가 표시되어야 합니다.

prometheus, version 0.15.1 (branch: master, revision: 64349aa)
  build user:       julius@julius-thinkpad
  build date:       20150727-17:56:00
  go version:       1.4.2

2단계 - 노드 내보내기 설치

Prometheus는 웹 서비스 모니터링을 목적으로 개발되었습니다. Ubuntu 서버의 메트릭을 모니터링하려면 Node Exporter라는 도구를 설치해야 합니다. Node Exporter는 이름에서 알 수 있듯이 많은 지표(예: 디스크 I/O 통계, CPU 로드, 메모리 사용량, 네트워크 통계 등)를 Prometheus가 이해하는 형식으로 내보냅니다.

Prometheus 디렉토리 안에 node_exporter라는 새 디렉토리를 만들고 그 안에 들어가십시오.

  1. mkdir -p ~/Prometheus/node_exporter
  2. cd ~/Prometheus/node_exporter

wget을 사용하여 GitHub에서 사용할 수 있는 Node Exporter의 최신 빌드를 다운로드하고 Downloads 디렉터리에 배치합니다.

  1. wget https://github.com/prometheus/node_exporter/releases/download/0.11.0/node_exporter-0.11.0.linux-amd64.tar.gz -O ~/Downloads/node_exporter-0.11.0.linux-amd64.tar.gz

이제 tar 명령을 사용하여 node_exporter-0.11.0.linux-amd64.tar.gz를 추출할 수 있습니다.

  1. tar -xvzf ~/Downloads/node_exporter-0.11.0.linux-amd64.tar.gz

3단계 - Node Exporter를 서비스로 실행

Node Exporter를 쉽게 시작하고 중지할 수 있도록 이제 이를 서비스로 변환해 보겠습니다.

/usr/bin에서 node_exporter 바이너리에 대한 소프트 링크를 만듭니다.

  1. sudo ln -s ~/Prometheus/node_exporter/node_exporter /usr/bin

nano 또는 좋아하는 텍스트 편집기를 사용하여 node_exporter.conf라는 Upstart 구성 파일을 만듭니다.

  1. sudo nano /etc/init/node_exporter.conf

이 파일에는 node_exporter 실행 파일에 대한 링크가 포함되어 있어야 하며 실행 파일이 시작되어야 하는 시기도 지정해야 합니다. 따라서 다음 코드를 추가합니다.

# Run node_exporter

start on startup

script
   /usr/bin/node_exporter
end script

이 시점에서 Node Exporter는 service 명령을 사용하여 시작할 수 있는 서비스로 사용할 수 있습니다.

  1. sudo service node_exporter start

Node Exporter가 시작된 후 브라우저를 사용하여 http://your_server_ip:9100/metrics에서 사용할 수 있는 웹 인터페이스를 봅니다. 텍스트가 많은 페이지가 표시됩니다.

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.00023853100000000002
go_gc_duration_seconds{quantile="0.25"} 0.00023998700000000002
go_gc_duration_seconds{quantile="0.5"} 0.00028122
. . .

4단계 - Prometheus 서버 시작

Prometheus 서버를 설치한 디렉토리를 입력하십시오.

cd ~/Prometheus/server

Prometheus를 시작하기 전에 먼저 prometheus.yml이라는 구성 파일을 만들어야 합니다.

  1. nano ~/Prometheus/server/prometheus.yml

다음 코드를 파일에 복사합니다.

scrape_configs:
  - job_name: "node"
    scrape_interval: "15s"
    target_groups:
    - targets: ['localhost:9100']

그러면 scrape_configs 섹션이 생성되고 node라는 작업이 정의됩니다. targets 배열에 Node Exporter의 웹 인터페이스 URL이 포함됩니다. scrape_interval은 Prometheus가 15초마다 메트릭을 스크랩하도록 15초로 설정됩니다.

원하는 대로 작업 이름을 지정할 수 있지만 "node\라고 부르면 Node Exporter의 기본 콘솔 템플릿을 사용할 수 있습니다.

파일을 저장하고 종료합니다.

Prometheus 서버를 백그라운드 프로세스로 시작합니다.

  1. nohup ./prometheus > prometheus.log 2>&1 &

Prometheus 서버의 출력을 prometheus.log라는 파일로 리디렉션했습니다. tail 명령을 사용하여 파일의 마지막 몇 줄을 볼 수 있습니다.

  1. tail ~/Prometheus/server/prometheus.log

서버가 준비되면 파일에 다음 메시지가 표시됩니다.

INFO[0000] Starting target manager...         file=targetmanager.go line=75
INFO[0000] Listening on :9090                 file=web.go line=118

브라우저를 사용하여 http://your_server_ip:9090에 있는 Prometheus 홈페이지를 방문하십시오. 다음 홈페이지가 표시됩니다.

Prometheus가 Node Exporter에서 데이터를 스크랩하고 있는지 확인하려면 페이지 상단의 그래프 탭을 클릭하십시오. 열리는 페이지에서 Expression이라는 텍스트 필드에 메트릭 이름(예: node_procs_running)을 입력합니다. 그런 다음 파란색 실행 버튼을 누릅니다. 바로 아래의 그래프(콘솔 옆)를 클릭하면 해당 메트릭에 대한 그래프가 표시됩니다.

Prometheus에는 일반적으로 사용되는 몇 가지 메트릭의 그래프를 볼 수 있는 콘솔 템플릿이 있습니다. 이러한 콘솔 템플릿은 Prometheus 구성에서 job_name 값을 node로 설정한 경우에만 액세스할 수 있습니다.

노드 콘솔에 액세스하려면 http://your_server_ip:9090/consoles/node.html을 방문하고 서버 localhost:9100을 클릭합니다. 측정항목을 보려면 다음 단계를 따르세요.

5단계 - PromDash 설치

Prometheus 서버를 사용하면 그래프를 보고 표현식을 실험할 수 있지만 일반적으로 디버깅 목적이나 일회성 쿼리 실행에만 사용됩니다. Prometheus의 시계열 데이터베이스에서 데이터를 시각화하는 기본 방법은 PromDash를 사용하는 것입니다. PromDash는 고도로 구성 가능할 뿐만 아니라 더 보기 좋은 맞춤형 대시보드를 생성할 수 있는 도구입니다.

Prometheus 디렉터리를 입력합니다.

  1. cd ~/Prometheus

PromDash는 GitHub에서 소스 파일을 사용할 수 있는 Ruby on Rails 애플리케이션입니다. 다운로드 및 실행을 위해서는 gem 의존성 관리자인 Git, Ruby, SQLite3, Bundler와 이들의 의존성을 설치해야 합니다. 그렇게 하려면 apt-get을 사용하세요.

  1. sudo apt-get update && sudo apt-get install git ruby bundler libsqlite3-dev sqlite3 zlib1g-dev

이제 git 명령을 사용하여 소스 파일을 다운로드할 수 있습니다.

  1. git clone https://github.com/prometheus/promdash.git

promdash 디렉터리를 입력합니다.

  1. cd ~/Prometheus/promdash

bundle을 사용하여 PromDash에 필요한 Ruby gem을 설치하십시오. 이 튜토리얼에서 PromDash가 SQLite3와 함께 작동하도록 구성할 것이므로 --without 매개변수를 사용하여 MySQL 및 PostgreSQL용 gem을 제외해야 합니다.

  1. bundle install --without mysql postgresql

PromDash는 여러 gem에 의존하기 때문에 이 명령이 완료될 때까지 몇 분 동안 기다려야 합니다. 완료되면 다음 메시지가 표시됩니다.

. . .
Your bundle is complete!
Gems in the groups mysql and postgresql were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

6단계 - Rails 환경 설정

PromDash와 연결된 SQLite3 데이터베이스를 저장할 디렉터리를 만듭니다.

  1. mkdir ~/Prometheus/databases

PromDash는 DATABASE_URL이라는 환경 변수를 사용하여 연결된 데이터베이스의 이름을 결정합니다. PromDash가 databases 디렉터리 내에 mydb.sqlite3라는 SQLite3 데이터베이스를 생성하도록 다음을 입력합니다.

  1. echo "export DATABASE_URL=sqlite3:$HOME/Prometheus/databases/mydb.sqlite3" >> ~/.bashrc

이 튜토리얼에서는 프로덕션 모드에서 PromDash를 실행하므로 RAILS_ENV 환경 변수를 production으로 설정합니다.

  1. echo "export RAILS_ENV=production" >> ~/.bashrc

.bashrc 파일에 변경 사항을 적용합니다.

  1. . ~/.bashrc

다음으로 rake 도구를 사용하여 SQLite3 데이터베이스에 PromDash의 테이블을 만듭니다.

  1. rake db:migrate

PromDash는 Rails Asset Pipeline을 사용하기 때문에 PromDash 프로젝트의 모든 자산(CSS 파일, 이미지 및 Javascript 파일)을 미리 컴파일해야 합니다. 이렇게 하려면 다음을 입력하십시오.

  1. rake assets:precompile

7단계 - PromDash 시작 및 구성

PromDash는 경량 웹 서버인 Thin에서 실행됩니다. 다음 명령을 입력하여 서버를 데몬으로 시작합니다.

  1. bundle exec thin start -d

서버가 시작될 때까지 몇 초간 기다린 다음 http://your_server_ip:3000/를 방문하여 PromDash의 홈페이지를 봅니다.

맞춤형 대시보드 생성을 시작하기 전에 PromDash에 Prometheus 서버의 URL을 알려야 합니다. 상단의 서버 탭을 클릭하면 됩니다. 새 서버를 클릭한 다음 양식에서 Prometheus 서버에 이름을 지정하십시오. Url 필드를 http://your_server_ip:9090로 설정하고 서버 유형 필드를 Prometheus로 설정합니다.

마지막으로 서버 만들기를 클릭하여 구성을 완료합니다. 페이지에 서버가 성공적으로 생성되었다고 표시됩니다. 상단 메뉴에서 대시보드로 다시 클릭할 수 있습니다.

8단계 - 대시보드 만들기

Promdash 대시보드는 Promdash 디렉터리에 속해야 하므로 먼저 새 디렉터리를 클릭하여 새 디렉터리를 만듭니다. 표시되는 양식에서 내 대시보드와 같은 디렉터리 이름을 지정한 다음 디렉터리 만들기를 클릭합니다.

양식을 제출하면 홈페이지로 돌아갑니다. 지금 새 대시보드 버튼을 클릭하여 새 대시보드를 만듭니다. 표시된 양식에서 Simple Dashboard와 같이 대시보드에 이름을 지정하고 드롭다운 메뉴에서 방금 생성한 디렉터리를 선택합니다.

양식을 제출하면 새 대시보드를 볼 수 있습니다.

대시보드에는 이미 하나의 그래프가 있지만 구성해야 합니다. 그래프의 헤더(제목) 위로 마우스를 가져가면 그래프를 구성할 수 있는 다양한 아이콘이 표시됩니다. 제목을 변경하려면 그래프 및 축 설정 아이콘(왼쪽에서 네 번째)을 클릭하고 그래프 제목 필드에 새 제목을 입력합니다.

그래프에 하나 이상의 표현식을 추가하려면 왼쪽에서 두 번째에 있는 데이터 소스 아이콘을 클릭하십시오. 식 추가를 클릭하고 식 입력 필드에 node_procs_running을 입력합니다.

이제 그래프 헤더에서 새로 고침 아이콘(가장 왼쪽 아이콘)을 클릭하여 그래프를 업데이트합니다. 이제 대시보드에 완전히 구성된 하나의 그래프가 포함됩니다. 하단의 그래프 추가 버튼을 클릭하여 더 많은 그래프를 추가할 수 있습니다.

모든 변경을 완료한 후 오른쪽에 있는 변경 사항 저장 버튼을 클릭하여 변경 사항을 영구적으로 적용하십시오. 다음에 PromDash 홈페이지를 방문하면 대시보드에 대한 링크를 볼 수 있습니다.

결론

이제 완전한 기능을 갖춘 Prometheus 에코시스템이 Ubuntu 14.04 서버에서 실행되며 PromDash를 사용하여 요구 사항에 맞는 모니터링 대시보드를 생성할 수 있습니다.

단일 Ubuntu 시스템에 모든 구성 요소를 설치했지만 각각에 Node Exporter만 설치하고 새 Node Exporter의 URL을 targets 배열에 추가하면 더 많은 시스템을 쉽게 모니터링할 수 있습니다. prometheus.yml.

해당 설명서를 참조하여 Prometheus에 대해 자세히 알아볼 수 있습니다.