Nginx Metrics를 모니터링 해보자

이우길·2022년 12월 12일
0

infra

목록 보기
3/6
post-thumbnail

Nginx Metrcis with Prometheus, Grafana

Goal

  • Nginx Exporter를 이용하여 Prometheus에서 Nginx의 상태를 모니터링
  • Grafana를 이용하여 Prometheus에서 수집한 데이터를 시각화

Nginx의 Metric 정보 수집

이전 Nginx를 설치 후 Nginx의 config를 설정하여 Nginx를 통해 NestJs에 접속할 수 있는 방법을 알아봤다. 오늘은 Nginx의 Metric 정보를 수집하는 방법을 알아보자.

Nginx의 Metric 정보를 수집하기 위해서는 필요한 것은 아래와 같다.

  • Nginx
  • nginx-prometheus-exporter
  • Prometheus
  • Grafana

위의 구성들에 대한 인프라 스트럭처는 아래의 사진과 같다. (외부에 Grafana만 노출시킨 후 Grafana에서 인증처리를 하고 프로메테우스와 Exporter는 내부에 두어 사용하면 될 것 같다.)



Nginx의 메트릭 정보 노출시키기

Nginx 즉 웹서버의 메트릭 정보를 얻으려면 stub_status 모둘을 활성화 시켜줘야 한다. 오픈 소스로 공개된 Nginx와 상용 버전에서 수집할 수 있는 메트릭 정보는 차이가 있다. (상용에 비해 조금 적다...)

stub_status를 활성화 시켰다고 메트릭 정보가 자동으로 수집되는 것이아니다. 이를 위해 아래에서 설치할 nginx-prometheus-exporter를 이용하게 되는 것이다.

그럼 nginx의 설정을 이용하여 stub_status를 활성화 시켜보자. 최대한 nginx.conf를 수정하지 않기 위해 /conf.dmetrics.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

Install

이전 글에서 Nginx를 설치하는 것은 다뤘으니 Nginx를 제외한 3개의 서비스를 설치해보자.

설치할 때 물론 Docker를 이용할 수 있지만 Linux 환경에 직접 설치하는 방법을 이용할 것이다.


Wget

리눅스 환경에서는 wget을 이용하여 다운로드를 할 수 있다. 만약 해당 환경에 wget이 없다면 sudo apt-get install wget을 통해 설치해주자.

sudo apt-get update && sudo apt-get install wget

nginx-prometheus-exporter

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를 입력하면 확인할 수 있다.)

  1. -nginx.scrape-uri: nginx의 메트릭 정보를 가져올 주소를 지정할 수 있다. 위에서 설정한 대로 http://localhost/metrics를 지정하면 된다.

  2. -web.listen-address: nginx-prometheus-exporter를 외부로 노출시킬 주소를 지정할 수 있다. default는 :9113이다.


실행 후 curl로 요청을 보낸 결과다. (아래 사진은 5555포트로 노출시켜 브라우저로 실행한 결과이다.)


Prometheus

프로메테우스는 메트릭을 수집 및 시각화, 알림 서비스 등등 제공하는 오픈 소스 모니터링 시스템이다.

# 설치 기준 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.ymlscrape_configsjob_namestatic_configstargetsnginx-prometheus-exporter의 주소로 지정해준다.

global:
  scrape_interval: 15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: "nginx"

    static_configs:
      - targets: ["localhost:9113"]

이 후 실행할 수 있다. nginx-prometheus-exporter와 마찬가지로 프로메테우스 실핼할 때 외부로 노출 시킬 주소를 설정할 수 있는 옵션이 있다. (추가 적인 내용은 prometheus --help를 입력하면 확인할 수 있다.)

  1. --web.listen-address: 프로메테우스를 외부로 노출시킬 주소를 지정할 수 있다. default는 :9090이다.

프로메테우스를 실행 후 접속을 하면 아래와 같은 결과를 얻을 수 있다. nginx라는 job_name을 설정했기 때문에 nginx라는 job이 생성되어 있으며 정상적으로 nginx-prometheus-exporter와 연결되어 있는 것을 확인할 수 있다.


Grafana

주로 프로메테우스는 메트릭 정보를 수집하는 역할만 하고 시각화는 하지 않는다. 따라서 프로메테우스에서 수집한 메트릭 정보를 시각화하기 위해서는 그라파나와 같은 대시보드를 제공하는 도구를 사용해야 한다.

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를 가져와서 사용해보자.

최종 결과물은 아래와 같다.


References

profile
leewoooo

0개의 댓글