Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

애플리케이션 팀은 고객 경험이 어떤 것인지 이해해야 합니다. 이는 일반적인 관점(사용성 및 반응성 측면)뿐만 아니라 일상적인 관점에서도, 분 단위로도 마찬가지입니다.

특히 분산 시스템을 사용하면 오류가 불가피합니다. 사이트 트래픽은 하루 종일 변동이 심하며 시스템 종속성 중 하나라도 언제든지 문제가 발생할 수 있습니다.

이 문서에서는 매직 대시보드를 사용하여 Ruby on Rails 애플리케이션 내 성능 문제를 모니터링하고 해결하는 데 도움을 드립니다.

하지만 매직 대시보드에 대해 알아보기 전에 앱을 디자인할 때 무엇을 주의해야 하는지 살펴보겠습니다.

Ruby 앱 구축 시 고려해야 할 사항

애플리케이션 소유자 또는 팀 구성원으로서 귀하는 고객보다 먼저 애플리케이션에 문제가 있는지 알고 싶을 것입니다. 이를 통해 즉시 시정 조치를 취하고 사용자에게 방해가 되는 일을 방지할 수 있습니다.

언제든지 답변할 수 있어야 하는 몇 가지 주요 지원 관련 질문이 있습니다:

  • 페이지 응답 시간이 허용 가능한 수준입니까? Google에 따르면 요즘에는 2초보다 느린 속도로 인해 고객이 사이트를 떠나 다른 곳으로 이동하게 됩니다.
  • 사용자에게 오류가 발생하고 있나요? 그렇다면 어떤 유형의 오류가 있습니까? 오류율은 얼마입니까?
  • 귀하의 애플리케이션에 영향을 미치는 지속적인 운영 문제가 있습니까? 이는 네트워크, 스토리지 또는 보안 서비스와 관련이 있을 수 있습니다. 우리 모두 알고 있듯이 클라우드 제공업체는 애플리케이션 상태에도 영향을 미치는 중단을 경험합니다.

관찰 가능성은 핵심이지만 엔지니어가 가장 마지막으로 고려하는 사항인 경우가 많습니다. 게다가 운영 준비 일정에는 이미 시간이 포함되어 있습니다. 제품 출시 전 주말이라고 하네요!

농담은 제쳐두고, 관찰할 대상이 존재하기 전에 먼저 앱을 구축해야 합니다. 이는 개발 수명주기가 거의 끝날 때까지 성능 테스트를 지연시키는 데 도움이 됩니다. 제품의 코드가 완성되지 않은 상태에서 성능 테스트에 너무 많은 시간을 소비하고 싶지는 않을 것입니다. 왜냐하면 나중에 다시 모든 작업을 수행해야 하기 때문입니다.

보안 테스트에서도 마찬가지입니다. 너무 일찍 수행하면 테스트 이후에도 제품이 생산되기 전에 취약점이 발생할 수 있습니다.

따라서 우리는 모니터링이 중요하다는 것을 알고 있지만 이러한 모든 우려 사항은 타당합니다. 모니터링은 프로세스 후반까지 제대로 주목을 받지 못합니다. 이것이 바로 AppSignal이 매직 대시보드를 만든 이유입니다.

AppSignal의 매직 대시보드

AppSignal은 지표, 대시보드 및 앱 성능의 중요성을 이해하고 있으며, 엔지니어가 출시 전에 이러한 작업을 수행할 수 있는 시간이 최소화된다는 점도 이해하고 있습니다.

앱과 통합 구성 요소를 연결하기만 하면 지표 수집 및 관련 대시보드가 자동으로 생성되므로 매직 대시보드를 "매직"이라고 합니다.

Magic Dashboards:Ruby on Rails 앱의 예

매직 대시보드를 사용하여 Ruby on Rails 앱 내에서 성능 문제를 모니터링하고 해결하는 방법을 알아봅시다.

우리 애플리케이션은 암호화폐 가격 예측을 위해 간단한 기계 학습(ML) 모델을 사용합니다. 비동기식 작업은 최신 가격 데이터로 매일 모델을 업데이트하고 시간이 지남에 따라 정확성을 향상시킵니다. 이 Rails 앱에는 아래 아키텍처 다이어그램에 표시된 것처럼 웹페이지와 REST API가 모두 있습니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

Rails 앱을 배포한 후에는 Rails Puma 웹 서버 및 Sidekiq 비동기 작업을 위한 매직 대시보드가 자동으로 생성됩니다. 매직 대시보드에 대해 지원되는 다른 통합에는 MongoDB 및 Erlang VM이 포함됩니다.

Puma 매직 대시보드를 사용하여 스레드, 풀 용량 및 Puma 작업자를 기반으로 성능을 평가할 수 있습니다. Sidekiq 매직 대시보드는 대기열 길이, 대기열 대기 시간, 작업 기간, 작업 상태 및 메모리 사용량을 모니터링합니다.

Magic 대시보드는 Sidekiq 작업 실행과 같은 이벤트 기반 메트릭 사용과 정밀한 조사를 기반으로 감지되고 생성됩니다. 정밀 프로브 기능을 사용하면 Ruby 블록이나 클래스를 등록하여 AppSignal에 사용자 정의 지표를 보낼 수 있습니다. Magic 대시보드는 지원되는 구성 요소에 대한 기본 통합을 제공하지만 이 메커니즘을 활용하여 사용자 정의 지표를 AppSignal에 보낼 수 있습니다.

맞춤형 정밀 프로브의 예

Sidekiq 통합은 이미 내장되어 있지만 독점 백그라운드 작업 메커니즘을 모니터링하고 싶다고 상상해 보세요. 다음 클래스 예제를 사용할 수 있습니다. 프로브 클래스는 원하는 측정항목을 얻기 위해 각 호출에서 사용되는 연결을 얻습니다.

 

Appsignal::Minutely.probes.register에 대한 호출 두 개의 매개변수, 즉 프로브 이름과 구현(람다 또는 호출 메서드를 구현하는 클래스)을 사용합니다.

AppSignal 구성 및 시스템 요구사항

Rails 애플리케이션과 함께 AppSignal을 사용하면 매직 대시보드를 얻을 수 있습니다. 아직 AppSignal을 설치하지 않았다면 Gemfile에 appsignal gem을 포함시키고 번들 설치를 실행하세요.

 

그런 다음 appsignal install를 실행하세요. 환경을 구성하는 명령입니다. 이 구성은 구성 파일이나 환경 변수에 저장될 수 있으며 애플리케이션을 AppSignal 계정 및 대시보드에 연결합니다.

 

서버를 설치하고 실행하면 다음과 유사한 몇 가지 이메일을 받게 됩니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

이 예의 시스템 요구 사항은 다음과 같습니다:

  • AppSignal gem 2.9.0 이상(미세 프로브 지원 포함)
  • Puma 통합 - 버전 3.11.4 이상이 필요합니다.
  • Sidekiq 통합 - Redis gem 3.3.5 이상이 필요합니다. 이 통합을 위해서는 AppSignal gem 2.9.5 이상이 권장됩니다.

가격 예측 API 성능 테스트

위의 예제 애플리케이션은 Ruby FANN gem을 사용하여 구현된 간단한 신경망을 사용하여 다음날 비트코인 가격을 예측합니다. 지난 10일 동안의 가격 변동률이 모델에 대한 입력으로 사용됩니다.

REST API는 현재 내일의 가격만 예측하므로 어떤 매개변수도 사용하지 않습니다. 출력은 아래와 같이 간단한 JSON 문서입니다.

 

Sidekiq 작업은 매일 시작될 때 시장 가격을 가져오고 ML 모델을 업데이트합니다. 이 작업은 5분마다 실행되도록 예약되어 있어 중단이나 오류를 신속하게 따라잡을 수 있습니다.

GitHub에서 이 문서의 모든 코드를 찾을 수 있습니다. 이 기사나 소프트웨어의 어떤 내용도 투자 조언을 구성하지 않는다는 점에 유의하세요. 암호화폐에 관한 투자 결정을 내리기 전에 재정 자문가와 상담하세요.

성능 테스트를 위해 JMeter를 사용하여 REST API의 로드를 시뮬레이션하겠습니다. 이를 통해 매직 대시보드를 사용하여 트래픽을 생성하고 성능을 평가할 수 있습니다. 첫 번째 테스트에서는 5개의 동시 클라이언트를 사용하여 각각 100개의 요청을 보냅니다.

통계에 따르면 응답 시간은 평균 342ms로 상당히 높은 범위를 나타내지만 P99는 852ms입니다. 더 잘할 수 있을 것 같습니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

Puma Magic Dashboard로 Rails 앱 성능 향상

Puma 매직 대시보드에는 스레드 풀 용량 그래프가 포함되어 있으며 테스트 실행 중에 이 그래프가 0에 닿는 것을 볼 수 있습니다. 이는 일부 요청이 다른 요청보다 오래 걸리는 이유를 설명하므로 퓨마 스레드 수를 10으로 늘릴 것입니다.

대시보드나 이 그래프를 생성하기 위해 우리는 아무 작업도 수행하지 않았다는 점을 명심하십시오. AppSignal이 이를 자동으로 생성했습니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

증가된 puma 스레드 수로 테스트를 실행한 후 응답 시간은 훨씬 더 일관되었으며 대시보드는 풀 용량이 허용 가능한 수준 내에 유지되는지 확인합니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

이제 다이얼을 높일 차례입니다. JMeter 동시 클라이언트 수가 50개로 증가하고 램프업 시간은 5초입니다. 이 테스트에서는 응답 시간이 좋지 않고 API 오류가 많이 발생합니다. Puma 매직 대시보드에는 사용 가능한 Puma 스레드가 0에 도달한 것으로 다시 표시됩니다.

API 코드를 보면 매번 데이터베이스에서 모델이 로드되는 것을 알 수 있습니다. 이는 그다지 효율적이지 않으므로 Sidekiq 작업을 변경하여 새로운 일일 가격을 얻을 뿐만 아니라 ML 모델을 실행하고 예측을 데이터베이스에 저장합니다.

우리는 이 변경 사항을 배포합니다.

Sidekiq의 Magic Dashboard로 API 성능 향상

이제 Sidekiq 매직 대시보드를 확인해 보겠습니다. 불행하게도 코드에 버그가 있지만 최소한 빨리 식별하고 수정할 수는 있습니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

사이드킥 PriceUpdateJob과 함께 이제 작동하므로 데이터베이스에서 예측 가격만 검색하면 되도록 API가 수정되었습니다. 이렇게 하면 API 성능이 향상되지만 여전히 일부 API 오류가 발생하고 응답 시간이 길어집니다.

Puma 매직 대시보드로 돌아가기

대시보드를 살펴보면 추가 작업자를 사용하도록 Puma를 아직 구성하지 않았음을 알 수 있습니다. Puma 작업자는 여러 스레드를 실행할 수 있는 OS 수준 프로세스입니다. 총 스레드 수는 작업자 수에 최대 스레드를 곱하여 계산됩니다. 먼저 2개의 작업자를 사용하지만 사용 가능한 스레드가 여전히 고갈되었습니다. 그래서 인원을 4명으로 늘리겠습니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

우리의 API 성능은 이제 매우 좋습니다. 평균 응답 시간은 419ms이며, API 오류는 없습니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

매직 대시보드는 아직 사용 가능한 스레드 용량이 있음을 확인합니다.

Magic Dashboard로 Ruby 앱 성능 모니터링 향상

AppSignal의 매직 대시보드는 Puma 웹 서버의 용량에 대한 즉각적인 통찰력을 제공합니다. Sidekiq 및 Active Worker 대시보드는 애플리케이션의 비동기 작업에 대한 유사한 통찰력을 제공합니다.

Magic Dashboard에서 배운 내용

Rails 애플리케이션 성능 테스트 중에 Puma 매직 대시보드는 스레드 수가 원하는 처리량 수준에 비해 부족하다는 것을 쉽게 식별하는 데 도움이 되었습니다. 스레드 풀 용량, 시간 경과에 따른 작업자 수, 총 스레드 수를 표시합니다.

Sidekiq 작업에는 성능 문제가 없었지만 매직 대시보드를 통해 배포 후 오류가 있는지 빠르게 식별할 수 있었고 이를 수정하고 빠르게 재배포할 수 있었습니다. 이러한 모든 모니터링 기능은 AppSignal에 의해 자동으로 설정되었습니다.

Ruby 및 Rails 앱을 위한 AppSignal 대시보드 기능

AppSignal의 대시보드에는 "웹" 애플리케이션 또는 "백그라운드" 작업과 같은 네임스페이스가 있으므로 애플리케이션에 대한 수많은 모니터링 보기를 생성할 수 있습니다. 내장된 요약 대시보드에는 처리량, 응답 시간, 최신 오류 등 애플리케이션 상태에 대한 개요가 표시됩니다.

다른 대시보드와 마찬가지로 표시되는 그래프와 측정항목을 편집할 수 있을 뿐만 아니라 선택한 그래프의 레이아웃과 구성도 변경할 수 있습니다.

이상 탐지는 강력한 기능입니다. 이를 통해 측정항목 값이 여유 메모리나 오류율과 같은 특정 값을 초과하거나 미만일 때 알림을 보내는 임계값을 정의할 수 있습니다.

마무리:지금 AppSignal로 Ruby 앱을 모니터링하세요

관찰 가능성과 성능은 애플리케이션의 성공에 매우 중요합니다. 그러나 우리는 이러한 주제를 다루기 위해 마지막 순간까지 기다리는 경우가 많습니다.

AppSignal의 매직 대시보드는 자동으로 설정되는 광범위한 기본 지표, 대시보드 및 통찰력을 제공합니다. 이를 통해 애플리케이션 성능을 빠르게 조정하고 운영 준비 상태에 도달할 수 있습니다.

Ruby용 AppSignal에 대해 자세히 알아보세요.

다음 시간까지 즐거운 코딩 되세요!