이전 Nginx를 설치 후 Nginx의 config를 설정하여 Nginx를 통해 NestJs에 접속할 수 있는 방법을 알아봤다. 오늘은 Nginx의 Metric 정보를 수집하는 방법을 알아보자.
Nginx의 Metric 정보를 수집하기 위해서는 필요한 것은 아래와 같다.
위의 구성들에 대한 인프라 스트럭처는 아래의 사진과 같다. (외부에 Grafana만 노출시킨 후 Grafana에서 인증처리를 하고 프로메테우스와 Exporter는 내부에 두어 사용하면 될 것 같다.)
Nginx 즉 웹서버의 메트릭 정보를 얻으려면 stub_status
모둘을 활성화 시켜줘야 한다. 오픈 소스로 공개된 Nginx와 상용 버전에서 수집할 수 있는 메트릭 정보는 차이가 있다. (상용에 비해 조금 적다...)
stub_status
를 활성화 시켰다고 메트릭 정보가 자동으로 수집되는 것이아니다. 이를 위해 아래에서 설치할 nginx-prometheus-exporter
를 이용하게 되는 것이다.
그럼 nginx의 설정을 이용하여 stub_status
를 활성화 시켜보자. 최대한 nginx.conf
를 수정하지 않기 위해 /conf.d
에 metrics.conf
를 생성하여 아래와 같이 작성하였다.
server {
listen 80;
server_name localhost;
location /metrics {
stub_status on; # stub_status 활성화
allow all; # allow 접근을 허용할 주소 설정
# deny 접근을 허용하지 않을 주소 설정
}
}
위와 같이 설정을 하고 Nginx를 재시작하면 http://localhost/metrics
로 접근할 수 있으며 curl
을 이용해 요청을 해보면 아래와 같이 응답이 오는 것을 확인할 수 있다.
$ curl localhost/metrics
# Result
Active connections: 2
server accepts handled requests
39 39 366
Reading: 0 Writing: 1 Waiting: 1
이전 글에서 Nginx를 설치하는 것은 다뤘으니 Nginx를 제외한 3개의 서비스를 설치해보자.
설치할 때 물론 Docker를 이용할 수 있지만 Linux 환경에 직접 설치하는 방법을 이용할 것이다.
리눅스 환경에서는 wget을 이용하여 다운로드를 할 수 있다. 만약 해당 환경에 wget이 없다면 sudo apt-get install wget을 통해 설치해주자.
sudo apt-get update && sudo apt-get install wget
prometheus-nginxlog-exporter
의 역할은 쉽게 말해 Nginx에서 노출시킨 메트릭 정보를 Prometheus가 수집할 수 있도록 하는 역할을 한다.
# 설치 기준 v0.11.0
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_386.tar.gz
tar -xvf nginx-prometheus-exporter_0.11.0_linux_386.tar.gz
# Result
exporter/
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
`-- nginx-prometheus-exporter
압축을 해제하면 nginx-prometheus-exporter
실행파일이 생긴다. 해당 파일을 실행할 때 중요한 옵션이 2가지가 있다. (추가 적인 내용은 nginx-prometheus-exporter --help
를 입력하면 확인할 수 있다.)
-nginx.scrape-uri: nginx의 메트릭 정보를 가져올 주소를 지정할 수 있다. 위에서 설정한 대로 http://localhost/metrics
를 지정하면 된다.
-web.listen-address: nginx-prometheus-exporter
를 외부로 노출시킬 주소를 지정할 수 있다. default는 :9113
이다.
실행 후 curl
로 요청을 보낸 결과다. (아래 사진은 5555포트로 노출시켜 브라우저로 실행한 결과이다.)
프로메테우스는 메트릭을 수집 및 시각화, 알림 서비스 등등 제공하는 오픈 소스 모니터링 시스템이다.
# 설치 기준 v2.40.5
wget https://github.com/prometheus/prometheus/releases/download/v2.40.5/prometheus-2.40.5.freebsd-386.tar.gz
tar -xvf prometheus-2.40.5.freebsd-386.tar.gz
# Result
prometheus-2.40.5.linux-386/
|-- LICENSE
|-- NOTICE
|-- console_libraries
|-- consoles
|-- data
|-- nohup.out
|-- prometheus
|-- prometheus.yml
`-- promtool
prometheus.yml
는 prometheus의 설정 파일이다. 해당 파일에서 메트릭 정보를 수집할 Target들을 설정할 수 있다. 자세한 설정은 prometheus-configuration에서 확인할 수 있다.
프로메테우스와 nginx-prometheus-exporter
를 연결해주려면 아래와 같이 prometheus.yml
의 scrape_configs
에 job_name
과 static_configs
에 targets
를 nginx-prometheus-exporter
의 주소로 지정해준다.
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "nginx"
static_configs:
- targets: ["localhost:9113"]
이 후 실행할 수 있다. nginx-prometheus-exporter
와 마찬가지로 프로메테우스 실핼할 때 외부로 노출 시킬 주소를 설정할 수 있는 옵션이 있다. (추가 적인 내용은 prometheus --help
를 입력하면 확인할 수 있다.)
:9090
이다.프로메테우스를 실행 후 접속을 하면 아래와 같은 결과를 얻을 수 있다. nginx
라는 job_name
을 설정했기 때문에 nginx
라는 job
이 생성되어 있으며 정상적으로 nginx-prometheus-exporter
와 연결되어 있는 것을 확인할 수 있다.
주로 프로메테우스는 메트릭 정보를 수집하는 역할만 하고 시각화는 하지 않는다. 따라서 프로메테우스에서 수집한 메트릭 정보를 시각화하기 위해서는 그라파나와 같은 대시보드를 제공하는 도구를 사용해야 한다.
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.1.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-9.3.1.linux-amd64.tar.gz
# Result
grafana-9.3.1/
|-- LICENSE
|-- NOTICE.md
|-- README.md
|-- VERSION
|-- bin # 실행 파일
|-- conf # 설정 파일
|-- data
|-- plugins-bundled
|-- public
`-- scripts
설치가 완료 되었으면 conf
폴더에 들어가서 defaults.ini
파일을 수정함으로 그라파나의 설정을 변경할 수 있다. 설정 중 현재는 포트만 변경하여 그라파나를 실행하려 한다. 기본 설정 포트는 3000번이다.
...
#################################### Server ##############################
[server]
# The http port to use
http_port = ${변경할 포트}
...
이 후 bin
안에 있는 grafana-server
를 실행시키면 그라파나가 실행된다. 실행 후 datasource에 아래와 같이 프로메테우스의 주소를 입력ㅎ고 저장하면 프로메테우스의 메트릭 정보를 그라파나에서 시각화 할 수 있다.
정상적으로 연결이 되었으면 누군가가 잘 만들어 놓은 대시보드를 가져와서 사용할 수 있다. NGINX exporter에서 Prometheus Stats
를 가져와서 사용해보자.
최종 결과물은 아래와 같다.