웹사이트 검색

Ubuntu 16.04에 Prometheus를 설치하는 방법


소개

그라파나.

기본적으로 Prometheus는 자신에 대한 메트릭(예: 수신한 요청 수, 메모리 소비 등)만 내보냅니다. 그러나 추가 메트릭을 생성하는 선택적 프로그램인 exporters를 설치하여 Prometheus를 크게 확장할 수 있습니다.

Prometheus 팀이 관리하는 공식 수출업체와 커뮤니티 기여 수출업체 모두 인프라, 데이터베이스, 웹 서버에서 메시징 시스템, API 등에 이르기까지 모든 것에 대한 정보를 제공합니다.

가장 인기 있는 선택은 다음과 같습니다.

  • node_exporter - 이것은 현재 CPU, 메모리 및 디스크 사용량을 포함한 인프라에 대한 메트릭과 디스크에서 읽은 바이트 수 또는 서버의 평균 부하와 같은 I/O 및 네트워크 통계를 생성합니다.
  • blackbox_exporter - 엔드포인트 가용성, 응답 시간 등을 결정하기 위해 HTTP 및 HTTPS와 같은 프로빙 프로토콜에서 파생된 메트릭을 생성합니다.
  • mysqld_exporter - 실행된 쿼리 수, 평균 쿼리 응답 시간 및 클러스터 복제 상태와 같은 MySQL 서버와 관련된 메트릭을 수집합니다.
  • 게시된 메시지 수, 배달 준비가 된 메시지 수 및 대기열에 있는 모든 메시지의 크기를 포함한 RabbitMQ 메시징 시스템
  • 열린 연결 수, 전송된 응답 수(응답 코드별로 그룹화됨), 전송 또는 수신된 총 요청 크기(바이트)를 포함하는 Nginx VTS 모듈

Prometheus의 웹 사이트에서 공식 및 커뮤니티 기여 내보내기의 전체 목록을 찾을 수 있습니다.

이 튜토리얼에서는 Prometheus 및 Node Exporter를 설치, 구성 및 보호하여 서버 성능을 보다 쉽게 모니터링할 수 있는 지표를 생성합니다.

전제 조건

이 튜토리얼을 따르기 전에 다음이 있는지 확인하십시오.

  • 루트가 아닌 sudo 사용자 및 방화벽을 포함하여 Ubuntu 16.04 자습서로 초기 서버 설정에 따라 설정된 Ubuntu 16.04 Droplet 1개
  • Ubuntu 16.04에 Nginx를 설치하는 방법 자습서의 처음 두 단계에 따라 Nginx를 설치했습니다.

1단계 - 서비스 사용자 생성

보안을 위해 먼저 prometheus와 node_exporter라는 두 개의 새 사용자 계정을 생성합니다. 튜토리얼 전체에서 이러한 계정을 사용하여 Prometheus의 핵심 파일 및 디렉토리에 대한 소유권을 분리합니다.

이 두 사용자를 만들고 --no-create-home--shell /bin/false 옵션을 사용하여 이러한 사용자가 서버에 로그인할 수 없도록 합니다.

  1. sudo useradd --no-create-home --shell /bin/false prometheus
  2. sudo useradd --no-create-home --shell /bin/false node_exporter

Prometheus 바이너리를 다운로드하기 전에 Prometheus의 파일과 데이터를 저장하는 데 필요한 디렉토리를 만듭니다. 표준 Linux 규칙에 따라 /etc에 Prometheus의 구성 파일용 디렉토리를 만들고 /var/lib에 해당 데이터용 디렉토리를 만듭니다.

  1. sudo mkdir /etc/prometheus
  2. sudo mkdir /var/lib/prometheus

이제 새 디렉터리에 대한 사용자 및 그룹 소유권을 prometheus 사용자로 설정합니다.

  1. sudo chown prometheus:prometheus /etc/prometheus
  2. sudo chown prometheus:prometheus /var/lib/prometheus

사용자와 디렉토리가 준비되었으므로 이제 Prometheus를 다운로드한 다음 처음으로 Prometheus를 실행하기 위한 최소 구성 파일을 생성할 수 있습니다.

2단계 - Prometheus 다운로드

먼저 현재 안정 버전의 Prometheus를 홈 디렉토리에 다운로드하고 압축을 풉니다. Prometheus 다운로드 페이지에서 체크섬과 함께 최신 바이너리를 찾을 수 있습니다.

  1. cd ~
  2. curl -LO https://github.com/prometheus/prometheus/releases/download/v2.0.0/prometheus-2.0.0.linux-amd64.tar.gz

다음으로 sha256sum 명령을 사용하여 다운로드한 파일의 체크섬을 생성합니다.

  1. sha256sum prometheus-2.0.0.linux-amd64.tar.gz

이 명령의 출력을 Prometheus 다운로드 페이지의 체크섬과 비교하여 파일이 진짜이고 손상되지 않았는지 확인하십시오.

Output
e12917b25b32980daee0e9cf879d9ec197e2893924bd1574604eb0f550034d46 prometheus-2.0.0.linux-amd64.tar.gz

체크섬이 일치하지 않으면 다운로드한 파일을 제거하고 이전 단계를 반복하여 파일을 다시 다운로드하십시오.

이제 다운로드한 아카이브의 압축을 풉니다.

  1. tar xvf prometheus-2.0.0.linux-amd64.tar.gz

그러면 두 개의 바이너리 파일(prometheuspromtoolprometheus-2.0.0.linux-amd64라는 디렉토리가 생성됩니다. >), consolesconsole_libraries 디렉토리에는 웹 인터페이스 파일, 라이센스, 알림 및 여러 예제 파일이 포함되어 있습니다.

두 바이너리를 /usr/local/bin 디렉터리에 복사합니다.

  1. sudo cp prometheus-2.0.0.linux-amd64/prometheus /usr/local/bin/
  2. sudo cp prometheus-2.0.0.linux-amd64/promtool /usr/local/bin/

바이너리의 사용자 및 그룹 소유권을 1단계에서 생성한 prometheus 사용자로 설정합니다.

  1. sudo chown prometheus:prometheus /usr/local/bin/prometheus
  2. sudo chown prometheus:prometheus /usr/local/bin/promtool

consolesconsole_libraries 디렉토리를 /etc/prometheus에 복사합니다.

  1. sudo cp -r prometheus-2.0.0.linux-amd64/consoles /etc/prometheus
  2. sudo cp -r prometheus-2.0.0.linux-amd64/console_libraries /etc/prometheus

디렉터리의 사용자 및 그룹 소유권을 prometheus 사용자로 설정합니다. -R 플래그를 사용하면 디렉토리 내부의 파일에도 소유권이 설정됩니다.

  1. sudo chown -R prometheus:prometheus /etc/prometheus/consoles
  2. sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries

마지막으로 더 이상 필요하지 않은 남은 파일을 홈 디렉토리에서 제거하십시오.

  1. rm -rf prometheus-2.0.0.linux-amd64.tar.gz prometheus-2.0.0.linux-amd64

이제 Prometheus가 설치되었으므로 첫 번째 실행을 준비하기 위해 구성 및 서비스 파일을 생성합니다.

3단계 - Prometheus 구성

/etc/prometheus 디렉토리에서 nano 또는 선호하는 텍스트 편집기를 사용하여 prometheus.yml이라는 구성 파일을 만듭니다. 현재 이 파일에는 처음으로 Prometheus를 실행하는 데 필요한 정보만 포함됩니다.

  1. sudo nano /etc/prometheus/prometheus.yml

경고: Prometheus의 구성 파일은 탭을 엄격히 금지하고 들여쓰기를 위해 두 개의 공백이 필요한 YAML 형식을 사용합니다. 구성 파일의 형식이 잘못되면 Prometheus가 시작되지 않습니다.

global 설정에서 지표 스크래핑의 기본 간격을 정의합니다. Prometheus는 개별 내보내기 자체 설정이 전역을 재정의하지 않는 한 이러한 설정을 모든 내보내기에 적용합니다.

global:
  scrape_interval: 15s

scrape_interval 값은 Prometheus가 15초마다 내보내기에서 메트릭을 수집하도록 지시하며, 이는 대부분의 내보내기에 충분한 시간입니다.

이제 Prometheus 자체를 다음 scrape_configs 지시문을 사용하여 스크랩할 내보내기 목록에 추가합니다.

...
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

Prometheus는 job_name을 사용하여 쿼리 및 그래프에서 내보내기에 라벨을 지정하므로 여기에서 설명적인 것을 선택해야 합니다.

또한 Prometheus는 성능 모니터링 및 디버깅에 사용할 수 있는 자체에 대한 중요한 데이터를 내보내므로 보다 빈번한 업데이트를 위해 전역 scrape_interval 지시문을 15초에서 5초로 재정의했습니다.

마지막으로 Prometheus는 static_configstargets 지시문을 사용하여 내보내기가 실행되는 위치를 결정합니다. 이 특정 내보내기는 Prometheus 자체와 동일한 서버에서 실행 중이므로 기본 포트인 9090과 함께 IP 주소 대신 localhost를 사용할 수 있습니다.

이제 구성 파일은 다음과 같아야 합니다.

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

파일을 저장하고 텍스트 편집기를 종료합니다.

이제 구성 파일의 사용자 및 그룹 소유권을 1단계에서 생성한 prometheus 사용자로 설정합니다.

  1. sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

구성이 완료되면 Prometheus를 처음 실행하여 테스트할 준비가 된 것입니다.

4단계 - Prometheus 실행

Prometheus 사용자로 Prometheus를 시작하고 구성 파일과 데이터 디렉토리 모두에 대한 경로를 제공합니다.

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

출력에는 Prometheus의 로딩 진행률, 구성 파일 및 관련 서비스에 대한 정보가 포함됩니다. 또한 Prometheus가 포트 9090에서 수신 대기 중임을 확인합니다.

Output
level=info ts=2017-11-17T18:37:27.474530094Z caller=main.go:215 msg="Starting Prometheus" version="(version=2.0.0, branch=HEAD, re vision=0a74f98628a0463dddc90528220c94de5032d1a0)" level=info ts=2017-11-17T18:37:27.474758404Z caller=main.go:216 build_context="(go=go1.9.2, user=root@615b82cb36b6, date=20171108- 07:11:59)" level=info ts=2017-11-17T18:37:27.474883982Z caller=main.go:217 host_details="(Linux 4.4.0-98-generic #121-Ubuntu SMP Tue Oct 10 1 4:24:03 UTC 2017 x86_64 prometheus-update (none))" level=info ts=2017-11-17T18:37:27.483661837Z caller=web.go:380 component=web msg="Start listening for connections" address=0.0.0.0 :9090 level=info ts=2017-11-17T18:37:27.489730138Z caller=main.go:314 msg="Starting TSDB" level=info ts=2017-11-17T18:37:27.516050288Z caller=targetmanager.go:71 component="target manager" msg="Starting target manager... " level=info ts=2017-11-17T18:37:27.537629169Z caller=main.go:326 msg="TSDB started" level=info ts=2017-11-17T18:37:27.537896721Z caller=main.go:394 msg="Loading configuration file" filename=/etc/prometheus/promethe us.yml level=info ts=2017-11-17T18:37:27.53890004Z caller=main.go:371 msg="Server is ready to receive requests."

오류 메시지가 표시되면 구성 파일에서 YAML 구문을 사용했는지 다시 확인한 다음 화면의 지시에 따라 문제를 해결하십시오.

이제 CTRL+C를 눌러 Prometheus를 중지한 다음 새 systemd 서비스 파일을 엽니다.

  1. sudo nano /etc/systemd/system/prometheus.service

서비스 파일은 /etc/prometheus/prometheus.yml 디렉토리에 있는 구성 파일을 사용하여 prometheus 사용자로 Prometheus를 실행하고 해당 데이터를 /var/lib/prometheus 디렉토리. (systemd 서비스 파일에 대한 자세한 내용은 이 자습서의 범위를 벗어나지만 시스템 단위 및 단위 파일 이해에서 자세히 알아볼 수 있습니다.)

다음 콘텐츠를 파일에 복사합니다.

[Unit]
Description=Prometheus
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

마지막으로 파일을 저장하고 텍스트 편집기를 닫습니다.

새로 생성된 서비스를 사용하려면 systemd를 새로고침하세요.

  1. sudo systemctl daemon-reload

이제 다음 명령을 사용하여 Prometheus를 시작할 수 있습니다.

  1. sudo systemctl start prometheus

Prometheus가 실행 중인지 확인하려면 서비스 상태를 확인하세요.

  1. sudo systemctl status prometheus

출력은 Prometheus의 상태, 기본 프로세스 식별자(PID), 메모리 사용 등을 알려줍니다.

서비스 상태가 활성이 아닌 경우 화면 지침을 따르고 이전 단계를 다시 추적하여 문제를 해결한 후 자습서를 계속 진행하세요.

Output
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2017-07-21 11:40:40 UTC; 3s ago Main PID: 2104 (prometheus) Tasks: 7 Memory: 13.8M CPU: 470ms CGroup: /system.slice/prometheus.service ...

계속 진행할 준비가 되면 Q를 눌러 status 명령을 종료합니다.

마지막으로 서비스가 부팅 시 시작되도록 활성화합니다.

  1. sudo systemctl enable prometheus

이제 Prometheus가 실행 중이므로 추가 내보내기를 설치하여 서버 리소스에 대한 메트릭을 생성할 수 있습니다.

5단계 - 노드 익스포터 다운로드

Prometheus 자체에 대한 메트릭 이상으로 Prometheus를 확장하기 위해 Node Exporter라는 추가 내보내기를 설치합니다. Node Exporter는 CPU, 디스크 및 메모리 사용량을 포함하여 시스템에 대한 자세한 정보를 제공합니다.

먼저 Node Exporter의 현재 안정 버전을 홈 디렉토리에 다운로드하십시오. Prometheus의 다운로드 페이지에서 체크섬과 함께 최신 바이너리를 찾을 수 있습니다.

  1. cd ~
  2. curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.15.1/node_exporter-0.15.1.linux-amd64.tar.gz

sha256sum 명령을 사용하여 다운로드한 파일의 체크섬을 생성합니다.

  1. sha256sum node_exporter-0.15.1.linux-amd64.tar.gz

체크섬을 다운로드 페이지의 체크섬과 비교하여 다운로드한 파일의 무결성을 확인합니다.

Output
7ffb3773abb71dd2b2119c5f6a7a0dbca0cff34b24b2ced9e01d9897df61a127 node_exporter-0.15.1.linux-amd64.tar.gz

체크섬이 일치하지 않으면 다운로드한 파일을 제거하고 이전 단계를 반복하십시오.

이제 다운로드한 아카이브의 압축을 풉니다.

  1. tar xvf node_exporter-0.15.1.linux-amd64.tar.gz

이렇게 하면 node_exporter라는 바이너리 파일, 라이센스 및 알림이 포함된 node_exporter-0.15.1.linux-amd64라는 디렉토리가 생성됩니다.

바이너리를 /usr/local/bin 디렉토리에 복사하고 사용자 및 그룹 소유권을 1단계에서 생성한 node_exporter 사용자로 설정합니다.

  1. sudo cp node_exporter-0.15.1.linux-amd64/node_exporter /usr/local/bin
  2. sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

마지막으로 더 이상 필요하지 않은 남은 파일을 홈 디렉토리에서 제거하십시오.

  1. rm -rf node_exporter-0.15.1.linux-amd64.tar.gz node_exporter-0.15.1.linux-amd64

이제 Node Exporter를 설치했으므로 부팅 시 시작되도록 서비스 파일을 만들기 전에 실행하여 테스트해 보겠습니다.

6단계 - 노드 내보내기 실행

Node Exporter를 실행하는 단계는 Prometheus 자체를 실행하는 단계와 유사합니다. Node Exporter용 Systemd 서비스 파일을 생성하여 시작합니다.

  1. sudo nano /etc/systemd/system/node_exporter.service

이 서비스 파일은 기본 수집기 세트가 활성화된 node_exporter 사용자로 Node Exporter를 실행하도록 시스템에 지시합니다.

다음 콘텐츠를 서비스 파일에 복사합니다.

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

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

수집기는 Node Exporter가 생성할 메트릭을 정의합니다. Node Exporter README 파일에서 Node Exporter의 전체 수집기 목록(기본적으로 활성화되어 있고 더 이상 사용되지 않는 항목 포함)을 볼 수 있습니다.

수집기의 기본 목록을 재정의해야 하는 경우 다음과 같이 --collectors.enabled 플래그를 사용할 수 있습니다.

...
ExecStart=/usr/local/bin/node_exporter --collectors.enabled meminfo,loadavg,filesystem
...

앞의 예는 Node Exporter에게 meminfo, loadavgfilesystem 컬렉터만 사용하여 메트릭을 생성하도록 지시합니다. 수집기를 필요한 만큼 제한할 수 있지만 쉼표 앞이나 뒤에 공백이 없어야 합니다.

파일을 저장하고 텍스트 편집기를 닫습니다.

마지막으로 systemd를 다시 로드하여 새로 만든 서비스를 사용합니다.

  1. sudo systemctl daemon-reload

이제 다음 명령을 사용하여 Node Exporter를 실행할 수 있습니다.

  1. sudo systemctl start node_exporter

status 명령으로 Node Exporter가 올바르게 실행되고 있는지 확인하십시오.

  1. sudo systemctl status node_exporter

이전과 마찬가지로 이 출력은 Node Exporter의 상태, 기본 프로세스 식별자(PID), 메모리 사용량 등을 알려줍니다.

서비스 상태가 활성이 아닌 경우 계속하기 전에 화면의 메시지를 따르고 이전 단계를 다시 추적하여 문제를 해결하십시오.

Output
● node_exporter.service - Node Exporter Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2017-07-21 11:44:46 UTC; 5s ago Main PID: 2161 (node_exporter) Tasks: 3 Memory: 1.4M CPU: 11ms CGroup: /system.slice/node_exporter.service

마지막으로 Node Exporter가 부팅 시 시작되도록 활성화합니다.

  1. sudo systemctl enable node_exporter

Node Exporter가 완전히 구성되고 예상대로 실행되면 Prometheus에 새 메트릭 스크래핑을 시작하도록 지시합니다.

7단계 - 노드 내보내기를 스크레이핑하도록 Prometheus 구성

Prometheus는 구성 파일의 scrape_configs 부분에 정의된 내보내기만 스크랩하므로 Prometheus 자체에서 했던 것처럼 노드 내보내기에 대한 항목을 추가해야 합니다.

구성 파일을 엽니다.

  1. sudo nano /etc/prometheus/prometheus.yml

scrape_configs 블록 끝에 node_exporter라는 새 항목을 추가합니다.

...
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']

이 내보내기는 Prometheus 자체와 동일한 서버에서 실행되기 때문에 Node Exporter의 기본 포트인 9100과 함께 IP 주소 대신 localhost를 다시 사용할 수 있습니다.

전체 구성 파일은 다음과 같아야 합니다.

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']       

계속할 준비가 되면 파일을 저장하고 텍스트 편집기를 종료합니다.

마지막으로 Prometheus를 다시 시작하여 변경 사항을 적용합니다.

  1. sudo systemctl restart prometheus

다시 한 번 status 명령으로 모든 것이 올바르게 실행되고 있는지 확인하십시오.

  1. sudo systemctl status prometheus

서비스 상태가 활성으로 설정되지 않은 경우 계속 진행하기 전에 화면의 안내에 따라 이전 단계를 다시 추적하세요.

Output
● prometheus.service - Prometheus Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2017-07-21 11:46:39 UTC; 6s ago Main PID: 2219 (prometheus) Tasks: 6 Memory: 19.9M CPU: 433ms CGroup: /system.slice/prometheus.service

이제 Prometheus와 Node Exporter가 설치, 구성 및 실행되었습니다. 웹 인터페이스에 연결하기 전 마지막 예방 조치로 기본 HTTP 인증으로 설치 보안을 강화하여 권한이 없는 사용자가 메트릭에 액세스할 수 없도록 할 것입니다.

8단계 - 프로메테우스 확보

Prometheus에는 내장 인증 또는 기타 범용 보안 메커니즘이 포함되어 있지 않습니다. 한편으로 이것은 구성 제한이 적은 매우 유연한 시스템을 얻게 된다는 것을 의미합니다. 반면에 메트릭과 전체 설정이 충분히 안전한지 확인하는 것은 귀하에게 달려 있음을 의미합니다.

간단하게 하기 위해 Nginx를 사용하여 설치에 기본 HTTP 인증을 추가할 것입니다. Prometheus와 Prometheus가 선호하는 데이터 시각화 도구인 Grafana가 모두 완벽하게 지원합니다.

암호 파일을 생성하기 위한 htpasswd 유틸리티에 액세스할 수 있는 apache2-utils를 설치하여 시작하십시오.

  1. sudo apt-get update
  2. sudo apt-get install apache2-utils

이제 파일을 저장할 위치와 인증에 사용할 사용자 이름을 htpasswd에 지정하여 암호 파일을 만듭니다.

참고: htpasswd는 이 사용자와 연결할 암호를 입력하고 다시 확인하라는 메시지를 표시합니다. 또한 9단계에서 Prometheus에 로그인하는 데 필요하므로 여기에 입력한 사용자 이름과 비밀번호를 모두 기록해 두십시오.

  1. sudo htpasswd -c /etc/nginx/.htpasswd sammy

이 명령의 결과는 사용자 이름과 입력한 암호의 해시 버전.

그런 다음 새로 생성된 암호를 사용하도록 Nginx를 구성합니다.

먼저 기본 Nginx 구성 파일의 Prometheus 관련 복사본을 만들어 나중에 문제가 발생할 경우 기본값으로 되돌릴 수 있습니다.

  1. sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/prometheus

그런 다음 새 구성 파일을 엽니다.

  1. sudo nano /etc/nginx/sites-available/prometheus

server 블록 아래에서 location / 블록을 찾습니다. 다음과 같아야 합니다.

...
	location / {
		try_files $uri $uri/ =404;
	}
...

모든 트래픽을 Prometheus로 전달할 것이므로 try_files 지시문을 다음 콘텐츠로 바꿉니다.

...
	location / {
		auth_basic "Prometheus server authentication";
		auth_basic_user_file /etc/nginx/.htpasswd;
		proxy_pass http://localhost:9090;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'upgrade';
		proxy_set_header Host $host;
		proxy_cache_bypass $http_upgrade;
	}
...

이러한 설정을 통해 사용자는 새 세션을 시작할 때마다 인증을 받아야 합니다. 또한 리버스 프록시는 이 블록에서 처리하는 모든 요청을 Prometheus로 보냅니다.

변경을 마치면 파일을 저장하고 텍스트 편집기를 닫습니다.

이제 /etc/nginx/sites-enabled 디렉토리에서 링크를 제거하여 기본 Nginx 구성 파일을 비활성화하고 링크를 만들어 새 구성 파일을 활성화합니다.

  1. sudo rm /etc/nginx/sites-enabled/default
  2. sudo ln -s /etc/nginx/sites-available/prometheus /etc/nginx/sites-enabled/

Nginx를 다시 시작하기 전에 다음 명령을 사용하여 오류 구성을 확인하십시오.

  1. sudo nginx -t

출력에는 구문이 정상이고 테스트가 성공했습니다라고 표시되어야 합니다. 오류 메시지가 나타나면 다음 단계로 진행하기 전에 화면의 지시에 따라 문제를 해결하십시오.

Output of Nginx configuration tests
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

그런 다음 Nginx를 다시 로드하여 모든 변경 사항을 통합합니다.

  1. sudo systemctl reload nginx

Nginx가 실행 중인지 확인합니다.

  1. sudo systemctl status nginx

출력에 서비스 상태가 활성으로 표시되지 않으면 계속하기 전에 화면 메시지에 따라 이전 단계를 다시 추적하여 문제를 해결하십시오.

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
   Active: active (running) since Mon 2017-07-31 21:20:57 UTC; 12min ago
  Process: 4302 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s r
 Main PID: 3053 (nginx)
    Tasks: 2
   Memory: 3.6M
      CPU: 56ms
   CGroup: /system.slice/nginx.service

이 시점에서 완전한 기능을 갖춘 안전한 Prometheus 서버가 있으므로 웹 인터페이스에 로그인하여 메트릭을 볼 수 있습니다.

9단계 - Prometheus 테스트

Prometheus는 자체 및 내보내기 상태를 모니터링하고, 쿼리를 실행하고, 그래프를 생성하기 위한 기본 웹 인터페이스를 제공합니다. 그러나 인터페이스의 단순성으로 인해 Prometheus 팀은 테스트 및 디버깅보다 더 복잡한 작업에 Grafana를 설치하고 사용합니다.

이 튜토리얼에서는 내장된 웹 인터페이스를 사용하여 Prometheus 및 Node Exporter가 실행 중인지 확인하고 간단한 쿼리 및 그래프도 살펴보겠습니다.

시작하려면 웹 브라우저에서 http://your_server_ip로 이동합니다.

HTTP 인증 대화 상자에 8단계에서 선택한 사용자 이름과 비밀번호를 입력합니다.

로그인하면 사용자 지정 쿼리를 실행하고 시각화할 수 있는 Expression Browser가 표시됩니다.

표현식을 실행하기 전에 먼저 화면 상단의 상태 메뉴를 클릭한 다음 대상 메뉴 옵션을 클릭하여 Prometheus와 노드 탐색기 모두의 상태를 확인하십시오. Prometheus가 자체와 Node Exporter를 모두 스크랩하도록 구성했으므로 UP 상태에 나열된 두 대상이 표시되어야 합니다.

내보내기가 없거나 오류 메시지가 표시되면 다음 명령을 사용하여 서비스 상태를 확인하십시오.

  1. sudo systemctl status prometheus
  1. sudo systemctl status node_exporter

두 서비스의 출력은 활성: 활성(실행 중) 상태를 보고해야 합니다. 서비스가 전혀 활성화되지 않았거나 활성화되었지만 여전히 제대로 작동하지 않는 경우 계속하기 전에 화면의 지침을 따르고 이전 단계를 다시 추적하십시오.

다음으로 내보내기가 올바르게 작동하는지 확인하기 위해 Node Exporter에 대해 몇 가지 표현식을 실행합니다.

먼저 화면 상단의 Graph 메뉴를 클릭하여 Expression Browser로 돌아갑니다.

Expression 필드에 node_memory_MemAvailable을 입력하고 실행 버튼을 눌러 서버에 있는 메모리 양으로 콘솔 탭을 업데이트합니다.

기본적으로 Node Exporter는 이 양을 바이트 단위로 보고합니다. 메가바이트로 변환하기 위해 수학 연산자를 사용하여 1024로 두 번 나눕니다.

Expression 필드에 node_memory_MemAvailable/1024/1024를 입력한 다음 실행 버튼을 누릅니다.

이제 콘솔 탭에 결과가 메가바이트 단위로 표시됩니다.

결과를 확인하려면 터미널에서 free 명령을 실행하세요. (-h 플래그는 free에게 사람이 읽을 수 있는 형식으로 다시 보고하도록 지시하여 양을 메가바이트 단위로 제공합니다.)

  1. free -h

이 출력에는 사용 가능한 열에 표시된 사용 가능한 메모리를 포함하여 메모리 사용량에 대한 세부 정보가 포함됩니다.

Output
total used free shared buff/cache available Mem: 488M 144M 17M 3.7M 326M 324M Swap: 0B 0B 0B

Prometheus 쿼리 언어는 기본 연산자 외에도 결과 집계를 위한 많은 기능을 제공합니다.

식 필드에 avg_over_time(node_memory_MemAvailable[5m])/1024/1024를 입력하고 실행 버튼을 클릭합니다. 결과는 지난 5분 동안 사용 가능한 평균 메모리(MB)입니다.

이제 그래프 탭을 클릭하여 실행된 표현식을 텍스트가 아닌 그래프로 표시합니다.

마지막으로 이 탭에 있는 동안 그래프 위로 마우스를 가져가면 그래프의 X축과 Y축을 따라 있는 특정 지점에 대한 추가 정보를 볼 수 있습니다.

Prometheus의 내장 웹 인터페이스에서 식을 만드는 방법에 대해 자세히 알아보려면 공식 문서의 Querying Prometheus 부분을 참조하세요.

결론

이 자습서에서는 하나의 추가 내보내기를 사용하여 전체 Prometheus 설치를 다운로드, 구성, 보호 및 테스트했습니다.

Prometheus 내부 작동 방식에 대해 자세히 알아보려면 Ubuntu 14.04에서 Prometheus를 쿼리하는 방법을 살펴보세요. (이미 Prometheus가 설치되어 있으므로 첫 번째 단계는 건너뛸 수 있습니다.)

Prometheus가 할 수 있는 다른 작업을 보려면 공식 Prometheus 문서를 참조하세요.

그리고 Prometheus 확장에 대해 자세히 알아보려면 공식 Grafana 웹사이트를 확인하세요.