NGINX의 성능을 제대로 파악하는 일은 생각보다 어려울 수 있습니다. 추적해야 할 데이터 포인트가 너무 많고, 어떤 지표가 중요하고 어떤 지표를 무시해도 되는지 판단하기가 쉽지 않기 때문입니다.
이 글에서는 AppSignal을 활용해 NGINX를 모니터링하고 애플리케이션 성능에 대한 가시성을 높이는 방법을 소개합니다.
모든 지표를 마법처럼 만들기
AppSignal은 처리량(Throughput)부터 응답 시간까지 다양한 성능 지표를 담은 커스텀 대시보드를 만들 수 있게 해줍니다. 하지만 대시보드를 직접 구성하려면 시간이 많이 들고, 어떤 지표가 정말 중요한지 파악하기도 쉽지 않습니다. 이런 이유로 AppSignal은 '매직 대시보드(Magic Dashboards)'라는 기능으로 이 과정을 자동화했습니다. AppSignal을 설치하면 에이전트가 인프라를 자동으로 스캔하여 가장 중요한 대시보드들을 자동 생성해 주며, 여기에는 NGINX 대시보드도 포함됩니다.

매직 대시보드는 애플리케이션의 대시보드 목록 아래에 자동으로 나타납니다. 대시보드가 설정되면, 애플리케이션의 고유한 상황에 맞는 지표를 표시하도록 자유롭게 커스터마이징할 수 있습니다.
매직 대시보드로 NGINX 지표 시각화하기
이제 매직 대시보드가 트래픽 급증으로 서비스 가용성이 위협받는 상황에서 NGINX 지표를 어떻게 활용하는지 살펴보겠습니다.
SnapGram이라는 애플리케이션이 있다고 상상해 보세요. 사용자가 사진을 업로드하고, 다른 사용자들의 사진을 보고 좋아요를 누를 수 있는 서비스입니다. 현재 SnapGram은 소수의 충성 사용자층을 보유하고 있으며, 비교적 안정적으로 운영되고 가용성 문제도 없습니다.
그러던 어느 날, 경쟁사가 갑자기 고양이와 카푸치노 사진 공유를 금지하면서 사용자들이 SnapGram으로 몰려들기 시작합니다. 몇 시간 만에 활성 사용자 수가 수백 명에서 수천 명으로 폭증합니다. 그리고 곧 수천 명의 사용자가 "SnapGram을 사용할 수 없다"며 불만을 토로하기 시작합니다. 그런데 애플리케이션 로그를 확인해 보면 모든 것이 정상 작동하는 것처럼 보이고, 에러 발생 건수에도 급증이 없습니다.
하지만 NGINX 매직 대시보드는 전혀 다른 이야기를 들려줍니다:

처리량(Throughput) 그래프는 애플리케이션이 받고 있는 요청 수를 한눈에 보여줍니다. 그래프를 보면 SnapGram이 "인터넷을 깨부술" 정도로 엄청난 요청을 받고 있다는 것을 알 수 있습니다. 요청 시간(Request Time) 그래프도 함께 상승 중이므로, SnapGram이 요청에 응답하는 데 점점 더 오랜 시간이 걸리고 있습니다. 애플리케이션 연결 상태를 보여주는 연결(Connections) 차트를 보면 많은 사용자가 SnapGram의 응답을 기다리고 있음을 알 수 있습니다. 즉, 서버가 급증한 수요를 감당하지 못하고 있는 것입니다.
SnapGram이 수요를 따라가지 못하면서 상태 코드(Status Codes) 차트에는 타임아웃이 급격히 증가한 것으로 나타납니다. SnapGram에 접속하려는 대부분의 사용자가 타임아웃 오류를 받고 있는 것입니다. 이 문제는 SnapGram의 애플리케이션 프로세스가 요청을 받기 전에 발생하기 때문에, 로그만 분석해서는 문제를 파악할 수 없습니다(로그에는 SnapGram이 성공적으로 처리한 극소수의 요청만 기록될 뿐입니다).
이제 문제가 코드에 있지 않다는 것을 알았으므로, 서버를 추가로 가동해 트래픽을 더 잘 처리하도록 하여 SnapGram의 가용성을 개선할 수 있습니다. 새로 추가된 각 서버는 매직 대시보드의 업스트림 응답 시간(Upstream Response Time) 및 업스트림 상태 코드(Upstream Status Code) 그래프에 별도의 마커로 표시되어 프로세스별 인사이트를 제공합니다.

여기에 더해 업스트림 캐싱까지 활성화하면 SnapGram의 부하를 더욱 줄일 수 있습니다. 캐시된 요청이 늘어날수록 요청 시간과 업스트림 요청 시간이 감소하고 애플리케이션에 가해지는 부담도 덜어집니다. SnapGram이 안정화되고 사용자 요청이 정상적으로 처리되기 시작하면, 사용자들의 불만이 사라지고 다시 고양이와 카푸치노 사진을 공유하기 시작하는 모습을 확인할 수 있습니다.

더 많은 지표, 더 큰 마법
SnapGram 사례는 읽기 쉬운 지표에 접근할 수 있으면 애플리케이션을 안정적으로 유지하고 NGINX 통합을 최대한 활용하는 데 얼마나 도움이 되는지 보여주는 간단한 예시일 뿐입니다.
AppSignal의 NGINX 매직 대시보드는 다음과 같은 지표를 추적할 수 있습니다:
- 요청 시간(Request Time): NGINX 서버가 요청에 응답하는 데 걸리는 시간으로, 분당 평균값과 95번째 백분위수로 제공됩니다.
- 처리량(Throughput): NGINX 서버가 처리한 요청 수입니다.
- 요청 길이(Request Length): 클라이언트로부터 NGINX 서버가 수신한 요청의 바이트 길이로, 분당 평균값과 95번째 백분위수로 제공됩니다.
- 응답 길이(Response Length): NGINX 서버가 클라이언트에게 전송한 응답의 바이트 길이로, 분당 평균값과 95번째 백분위수로 제공됩니다.
- 상태 코드(Status Codes): NGINX 서버가 전송한 응답의 상태 코드 수입니다.
- 연결(Connections): NGINX 서버가 현재 처리 중인 연결 수로, 분당 한 번 측정되며 연결 상태별로 구분됩니다.
- 업스트림 상태 코드(Upstream Status Codes): NGINX 서버가 프록시하는 업스트림 서버가 전송한 응답의 상태 코드 수입니다.
- 업스트림 응답 시간(Upstream Response Time): NGINX 서버가 프록시하는 업스트림 서버가 요청에 응답하는 데 걸린 시간으로, 분당 평균값과 95번째 백분위수로 제공됩니다.
- 업스트림 캐시 상태(Upstream Cache Status): 업스트림 서버에서 프록시된 캐시 요청을 처리할 때의 캐시 상태(HIT 또는 MISS 등)입니다.
NGINX와 AppSignal을 시작할 준비가 되었다면, NGINX 지표 문서에서 AppSignal 통합 설정 방법을 자세히 알아보세요.
AppSignal의 매직 대시보드는 애플리케이션 모니터링을 극대화하는 다양한 개발자 친화적 기능 중 하나일 뿐입니다. 개발자들이 AppSignal 모니터링을 선호하는 이유는 다음과 같습니다:
- 탐색하기 쉬운 직관적인 인터페이스
- 간단하고 예측 가능한 가격 정책
- 개발자가 제공하는 개발자 대상 지원
신규 체험 사용자라면 스트룹와플 한 박스를 무료로 받을 수도 있습니다. 데이터를 조금만 전송해 보고 저희에게 연락해 주세요. 패키지를 보내 드립니다 🍪!
Connor James
AppSignal의 개발자 마케팅 매니저. 팟캐스트 중독자이며, 카놀리(Cannoli)를 너무 사랑해서 이름을 'Connoli'로 바꾸는 것을 진지하게 고민 중입니다. 마이크 앞, 무대 위, 아니면 쉬는 시간에는 소파에 누워 있는 모습을 발견할 수 있습니다.