개요
nginx는 많은 웹 서버 환경에서 필수적으로 사용되죠?
저또한 홈서버 상단에 nginx가 위치해있습니다.
nginx를 운영하다보면 nginx
의 상태와 트래픽을 실시간으로 모니터링하고 싶은 순간이 오는데요!
특히 access.log
와 error.log
는 중요한 로그이지만, 텍스트로 확인하기에는 비효울적입니다.
이번 포스팅에서는 Prometheus + Telegraf + Grafana 조합을 통해 Nginx-exporter
로부터 메트릭을 수집하고,
이를 Grafana 대시보드 로 시각화하는 전체 과정을 정리해볼까 합니다!
시각화를 위한 대시보드는 14900 ID를 사용할 예정입니다!
메트릭을 수집하기 위한 준비사항
nginx의 메트릭 정보를 수집하기 위해 필요한 것은 다음과 같습니다.
nginx
nginx-prometheus-exporter
prometheus
grafana
nginx에서 metric 정보를 생성하는 방법
nginx 서버에서 메트릭 데이터를 생성하려면 stub_status
모듈을 활성화 시켜줘야 합니다!
오픈소스로 공개된 nginx
와 상용 버전(nginx-plus
)에서 수집할 수 있는 메트릭 데이터는 차이가 있답니다! 관련 링크
stub_status
를 활성화 했다고 메트릭 정보가 자동으로 수집되는 것은 아닙니다!
메트릭 정보를 실시간으로 수집하기 위해서는 nginx-prometheus-exporter
를 설치해줘야 해요!
먼저 위 패키지를 설치하기 이전에 stub_status
를 활성화 시켜주겠습니다.
먼저 stub_status
모듈이 nginx에 내장되어 있는지 확인해볼게요!
nginx -V 2>&1 | grep -o "with-http_stub_status_module"
이제 /etc/nginx/nginx.conf
파일 내부에 http 스코프를 추가해줄게요.
* 80 포트에 대한 설정은 이미 /etc/nginx/sites-available/default
파일에서 listen
설정이 되있습니다. 주의해주세요.
기존 server
에 /metrics
로케이션을 다음과 같이 추가해주세요!
server {
# ...
listen 80;
server_name localhost;
location /metrics {
stub_status on; # stub_status 활성화
allow all; # allow 접근을 허용할 주소 설정
# deny 접근을 허용하지 않을 주소 설정
}
}
만약 기존에 nginx
를 운영 중이셨다면 기존 server
설정에 location /metrics
섹션만 추가해 작성해주시면 됩니다.
변경된 설정을 적용해주겠습니다.
sudo nginx -t
sudo systemctl restart nginx
nginx가 정상적으로 재시작 되었다면 메트릭이 수집되는지 확인해볼게요.
curl localhost/metrics
Active connections: 2
server accepts handled requests
9 9 363
Reading: 0 Writing: 1 Waiting: 1
nginx-prometheus-exporter 설치하기
nginx-prometheus-exporter의 역할을 nginx에서 노출시킨 메트릭 정보를 Prometheus
가 수집할 수 있도록 하는 에이전트입니다.
저희는 위에서 nginx의 stub_status
를 활성화하여 메트릭 정보가 수집된 것을 볼 수 있었어요!
여기서 nginx-prometheus-exporter
를 설치하면 해당 에이전트가 자동으로 nginx 메트릭을 수집하여 줍니다!
그럼 이제 해당 exporter 설치해보도록 할게요
(최신 릴리즈 정보는 nginx-prometheus-exporter Release를 참고해주세요.)
# exporter 다운로드
wget -O nginx-prometheus-exporter-1-4-2.tar.gz https://github.com/nginx/nginx-prometheus-exporter/releases/download/v1.4.2/nginx-prometheus-exporter_1.4.2_linux_386.tar.gz
# 압축 해제
tar -xvf nginx-prometheus-exporter-1-4-2.tar.gz
압축을 해제하면 nginx-prometheus-exporter
라는 실행파일이 생깁니다.
실행파일 사용 방법은 다음과 같습니다.
(실행 관련 문서는 여기에 더 자세하게 공지되어 있습니다.)
nginx-prometheus-exporter --nginx.scrape-uri=http://<nginx_ip>:8080/stub_status
저희는 이전에 /metrics
라는 로케이션으로 stub_status
를 활성화하였고, 앤드포인트는 http://<nginx_서버_ip>/metrics
입니다.
nginx-prometheus-exporter --nginx.scrape-uri=http://<nginx_ip>/metrics
위 명령을 실행하면 포트 번호 9113
이 부여된 프로그램이 백그라운드로 실행됩니다.
만약 기본 포트 번호를 변경하고 싶다면
-web.listen-address=<원하는_포트_번호>
-web.listen-address
옵션을 추가하시면 됩니다.
Telegraf 설치 및 설정하기
Telegraf는 다양한 소스에서 데이터를 수집하고 InfluxDB에 전송하는 에이전트입니다.
다양한 데이터 소스를 지원하고, 시스템 정보, 로그, 센서 등의 다양한 데이터를 수집할 수 있어요.
telegraf를 설치해볼게요!
sudo apt-get update
sudo apt-get install telegraf
/etc/telegraf/telegraf.conf
파일을 수정할게요.
맨 아래에 다음 내용을 추가해주세요.
#nginx-metrics and logs
[[inputs.nginx]]
urls = ["http://localhost:9113/metrics"] # 앞서 nginx exporter endpoint를 넣어주세요.
response_timeout = "5s"
[[inputs.tail]]
name_override = "nginxlog"
files = ["/var/log/nginx/access.log"]
from_beginning = true
pipe = false
data_format = "grok"
grok_patterns = ["%{COMBINED_LOG_FORMAT}"]
# telegraf 프로메테우스 연동
###############################################################################
# OUTPUT PLUGINS #
###############################################################################
[[outputs.prometheus_client]] # <<<< 이 두 라인을 입력해야해요. 8080 포트 열기
listen = "0.0.0.0:8080" # <<<< 이 포트로 프로메테우스가 telegraf를 호출합니다.
# Configuration for sending metrics to InfluxDB
# [[outputs.influxdb]] <<< 이 라인을 주석처리해야함
telegraf를 재시작 해주겠습니다.
sudo systemctl restart telegraf && systemctl status telegraf
# 메트릭이 수집되는지 확인해볼게요.
curl localhost:8080/metrics
# 아래 내용이 출력되면 완료입니다.
cpu_usage_guest{cpu="cpu-total",host="dev-ubuntu"} 0
cpu_usage_guest{cpu="cpu0",host="dev-ubuntu"} 0
...
모니터링 도구 설치하기
- 해당 챕터는 모니터링 서버에서 진행해주세요!
- 모니터링 도구를 웹 서버에서 같이 배포할 예정이시라면 그대로 진행해주셔도 상관없습니다!
- 저는 웹 서버와 모니터링 서버가 분리되어 있는 상황이기 때문에 따로 구축된 모니터링 서버에서 진행하도록 하겠습니다.
프로메테우스와 그라파나를 설치해줘야 합니다.
프로메테우스 설치
설치 방법이 변경될 수 있으니 공식 문서의 릴리즈 별 설치 방법을 참고하여 설치해주세요.
wget https://github.com/prometheus/prometheus/releases/download/v2.39.0/prometheus-2.39.0.linux-arm64.tar.gz
tar xvfz prometheus-2.39.0.linux-arm64.tar.gz
설치 폴더 내의 prometheus.yml
파일을 다음과 같이 수정해줍시다.
scrape_configs:
- job_name: "nginx-exporter"
static_configs:
- targets: ["아이피주소:포트번호"]
- job_name: "other-server"
static_configs:
- targets: ["아이피주소:포트번호"]
...
nginx-exporter
의 target IP와 포트 번호를 적어주시면 됩니다.
설정한 뒤에 프로메테우스를 재시작 해주겠습니다.
# 8080포트로 실행
nohup /home/ubuntu/prometheus-2.39.0.linux-arm64/prometheus --web.enable-lifecycle --config.file=/home/ubuntu/prometheus-2.39.0.linux-arm64/prometheus.yml --web.listen-address=:8080 > prometheus.log 2>&1 &
# prometheus.yml 리로드
curl -X POST http://localhost:8080/-/reload
재시작 한 후에 브라우저에서 프로메테우스 포트로 접근하면 다음과 같은 정보 확인이 가능합니다.
그라파나 설치
그라파나 또한 설치 방법이 변경될 수 있으니 공식 문서의 릴리즈 별 설치 방법을 참고하여 설치해주세요.
wget https://dl.grafana.com/oss/release/grafana-9.2.0.linux-arm64.tar.gz
tar -zxvf grafana-9.2.0.linux-arm64.tar.gz
vi /home/ubuntu/grafana-9.2.0/conf/defaults.ini
# 실행
cd /home/ubuntu/grafana-9.2.0/bin/ && nohup /home/ubuntu/grafana-9.2.0/bin/grafana-server > grafana.log 2>&1 &
그라파나는 기본 포트가 3000번입니다. 다른 포트로 변경을 원하시면 conf/defaults.ini
파일의 http_port
변수 값을 수정해주세요.
- 기본 아이디 및 패스워드는
admin
입니다.
datasource 등록
프로메테우스를 데이터소스로 등록해주세요.
Connections
->Data Sources
->Add Datasource
->Prometheus
- HTTP URL만 설정해주시고
Save
해주시면 됩니다.- 이 때
Fail
이 발생하는 경우 프로메테우스 서버의 IP를 확인해주세요.
- 이 때
대시보드 등록
사용할 대시보드의 ID 값은 다음과 같습니다.
14900
저는 이미 등록한 대시보드라서 다음과 같이 경고문이 나왔네요!
대시보드를 확인해보면 다음과 같이 구성됨을 볼 수 있습니다!
마무리
이렇게 Grafana
+ Prometheus
+ Telegraf
조합을 사용하여 nginx 로그 파일을 시각화하는 방법에 대해서 알아봤습니다.
참고로!
웹 서버 로그를 분석하는 도구로는 이러한 방법 말고 GoAccess
오픈소스 프로젝트를 사용하는 방법도 있답니다!