Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

AppSignal을 사용한 Ruby on Rails 애플리케이션 모니터링

프로덕션 환경에서 애플리케이션을 실행하고 유지 관리할 때 애플리케이션의 동작에 대해 확신을 갖고 예상대로 작동하지 않을 때를 알고 싶습니다. 최소한 우리는 애플리케이션 전체에서 오류를 추적하고, 성능을 모니터링하고, 특정 측정항목을 수집하기를 원합니다.

우리는 개발자이고 유지 관리 가능한 솔루션을 좋아하기 때문에(그렇습니까?), 모든 것을 추적하기 어렵게 만드는 도구, 통합 및 종속성이 뒤죽박죽이 되는 것을 원하지 않습니다.

이 게시물에서는 애플리케이션 동작에 대한 명확한 통찰력을 제공하는 데 도움이 되도록 Ruby on Railsapplication에 AppSignal을 추가합니다.

코드를 따르려면 전제 조건:

  • www.appsignal.com의 계정
  • Docker 설치 및 실행(docker-compose 사용) ).*이 게시물의 샘플 애플리케이션을 사용하는 경우에만 필요합니다.

AppSignal 설정

참고 :자신의 Rails 애플리케이션에 AppSignal을 추가하는 경우 이 섹션을 건너뛸 수 있습니다. 이 경우 Docker와 관련된 지침이나 게시물 전체에서 Rails 서버를 다시 시작하는 방법을 무시할 수도 있습니다. 대신 평소와 같이 애플리케이션을 다시 시작/재배포합니다.

샘플 애플리케이션을 사용하여 시작하고 Docker를 사용하여 머신에서 실행할 것입니다.

다음 명령을 실행하여 리포지토리를 복제하고 종속성을 설치하고 애플리케이션을 실행합니다.

$ git clone --branch appsignal-setup/start-docker --single-branch https://github.com/choncou/sample_rails_app appsignal-setup
$ cd appsignal-setup
$ yarn start:compose

이것을 처음 실행하면 도커 이미지를 빌드하고 모든 종속성을 다운로드하는 데 시간이 걸릴 수 있습니다. 완료되면 Railsserver, PostgreSQL 데이터베이스 및 Redis가 시작됩니다. 로그에서 요청을 확인하고 https://localhost:3000/에서 실행 중인 애플리케이션을 확인해야 합니다.

샘플 애플리케이션 정보

우리가 작업하고 있는 응용 프로그램은 매우 작기 때문에 주의해야 할 사항이 몇 가지 있습니다.

Post이 있습니다. 모델, PostsController/posts를 통해 노출되는 모든 CRUD 작업 경로.

PagesController에 의해 렌더링된 홈 페이지도 있습니다. , 백그라운드 작업을 대기열에 추가합니다. CreateRandomPostsJob 비동기식으로 임의의 게시물을 생성합니다.

마지막으로 백그라운드 작업 처리를 위해 Sidekiq를 사용하고 있습니다.

우리의 소규모 블로깅 플랫폼에도 이미 활성 사용자가 있습니다. 스크립트(./bin/traffic ) 애플리케이션의 트래픽을 모방하기 위해 정기적으로 몇 가지 요청을 하는 서버와 함께 백그라운드에서 실행됩니다.

그게 다야 방금 제품을 출시했으며 모든 것이 완벽하게 작동합니다...

또는 적어도 응용 프로그램의 성능과 오류가 발생한 사용자에 대한 사용자 보고서를 보기 시작할 때까지는 그렇게 생각합니다.

그래서 우리는 무슨 일이 일어나고 있는지 어떻게 알 수 있습니까? 개발 환경에서 작업할 때 오류를 살펴보는 것이 더 쉽습니다. 그러나 우리 애플리케이션이 프로덕션에서 실행될 때 이것은 더 어려워집니다. 서버 로그를 통해 검색하는 것보다 오류를 찾는 더 좋은 방법이 있어야 합니다.

구조를 위한 AppSignal!

AppSignal 시작하기

애플리케이션에 AppSignal을 추가하여 모니터링 여정을 시작하겠습니다.www.appsignal.com에서 계정에 로그인해야 합니다.

AppSignal의 새로운 사용자라면 애플리케이션을 추가할 수 있는 아래 페이지가 표시됩니다(기존 사용자는 '앱 추가'를 클릭해야 함).

"Ruby용 설치"를 선택하면 따라야 할 몇 가지 간단한 단계가 표시됩니다.

  1. Gemfile에 gem 추가

    # Gemfile
    gem 'appsignal'
  2. bundle install을 실행하여 gem을 설치합니다. yarn compose:sh로 액세스할 수 있는 도커 컨테이너 내부

    $ yarn compose:sh
    # We are now in a bash console within a docker container
    $ bundle install
    # Stay in this console for the next command
  3. AppSignal 설치

    설치하는 동안 두 가지 프롬프트에 응답해야 합니다.

    • Do you want to change how this is displayed in AppSignal? (y/n): n
    • How do you want to configure AppSignal? :1 입력 환경 변수 대신 구성 파일을 사용하기 때문입니다.

    AppSignal 설정 페이지에 표시된 API 키 사용:

    $ bundle exec appsignal install <your-api-key>
    ...
    ...
    #####################################
    ## AppSignal installation complete ##
    #####################################
     
      Sending example data to AppSignal...
      Example data sent!
      It may take about a minute for the data to appear on https://appsignal.com/accounts
     
      Please return to your browser and follow the instructions.

설치 스크립트를 실행한 후 브라우저에서 AppSignal 설정이 완료되었음을 알 수 있습니다. 그런 다음 '앱으로 이동'하여 개발 환경에 대한 AppSignaldashboard를 볼 수 있습니다.

설치 명령은 config/appsignal.yml을 생성합니다. 이를 통해 다양한 환경에 대한 AppSignal 설정을 구성할 수 있습니다. AppSignal Ruby 구성 문서에서 자세히 알아볼 수 있습니다.

config/appsignal.yml에서 푸시 API 키입니다. 일반적으로 이 파일에서 제거하고 대신 환경 변수를 사용합니다. 이 게시물에서는 그럴 필요가 없습니다.

새 gem을 설치했기 때문에 변경 사항을 적용하려면 응용 프로그램을 다시 시작해야 합니다. 가장 간단한 방법은 ctrl-c로 도커 컨테이너를 중지하는 것입니다. 서버를 실행하는 터미널 창 내부에서 다음을 사용하여 docker-compose를 다시 시작합니다.

$ yarn start:compose

종속성이 변경되면 도커 이미지를 다시 작성하기 때문에 시간이 걸릴 수 있습니다.

AppSignal 메인 대시보드

이제 AppSignal이 설치된 애플리케이션을 실행했으므로 대시보드를 볼 수 있습니다. AppSignal에서 실행 중인 모든 애플리케이션과 환경을 보려면 다음으로 이동하십시오.appsignal.com/accounts:

애플리케이션 이름을 클릭하면 AppSignal이 기본적으로 모니터링하는 항목을 탐색할 수 있습니다.

몇 분 안에 트래픽 생성 스크립트로 인해 일부 데이터가 이미 수집됩니다.

기본 대시보드에서 몇 가지 필수 애플리케이션 메트릭에 대한 높은 수준의 좋은 개요를 얻을 수 있습니다. 이제 AppSignal 내에서 좀 더 구체적인 영역을 살펴보겠습니다.

AppSignal의 오류 대시보드

오류 페이지에서 애플리케이션에서 보고한 모든 오류 목록을 찾을 수 있습니다. 설치 스크립트를 실행했을 때 테스트 오류가 AppSignal로 전송되었습니다. 꽤 정기적으로 발생하는 것으로 보이는 오류가 있음을 알 수 있습니다. 오류를 클릭하면 문제를 디버깅하는 데 유용할 수 있는 자세한 내용이 포함된 페이지가 열립니다.

이 경우 백트레이스 섹션에서 애플리케이션 홈페이지(/ ) app/controllers/pages_controller.rb:7 home에서 확인 오류가 발생했습니다. .

기타 AppSignal 대시보드

사이드바의 '대시보드'에서 AppSignal이 이미 몇 가지 다른 대시보드를 제공했음을 알 수 있습니다.

'개요' 대시보드는 모든 애플리케이션에서 사용할 수 있으며 다음을 제공합니다.

  • 응용 프로그램 오류율
  • 처리량
  • 응답 시간
  • 자세한 내용을 확인할 수 있는 기타 최근 활동

또한 Active Job용과 Sidekiq용의 두 가지 매직 대시보드가 ​​있습니다. AppSignal에는 Rails 애플리케이션과 자동으로 작동하는 많은 인기 있는 프레임워크 및 gem에 대한 통합이 내장되어 있습니다.

이러한 대시보드를 볼 때 해당 통합의 활동과 관련된 정보를 볼 수 있습니다. 활성 작업 대시보드에서 각 대기열의 작업 수, 각 작업의 기록된 기간 등에 대한 그래프를 볼 수 있습니다. 한번 보세요!

앱 성능

실적 → 문제 목록 내부 , AppSignal이 측정하는 작업 목록을 볼 수 있습니다. 이러한 측정은 애플리케이션의 어느 부분이 많은 성능을 소비하는지에 대한 귀중한 통찰력을 제공할 수 있습니다.

예를 들어 PostsController#index 작업에 대한 문제를 클릭하여 , 우리는 컨트롤러의 성능에 대해 더 자세히 알아볼 수 있습니다. 가장 많은 시간을 소비한 위치 또는 가장 많은 개체 할당이 발생한 위치를 빠르게 확인할 수 있습니다.

AppSignal의 빠른 승리 및 숨겨진 보석:Puma 사용

많은 노력 없이 AppSignal에서 얻을 수 있는 숨겨진 보석(Ruby 종류가 아님)이 몇 가지 있습니다. 예제를 통해 이를 얼마나 쉽게 설정하고 실행할 수 있는지 봅시다.

config/puma.rb 내부 , 다음 행을 추가하십시오.

# config/puma.rb
plugin :appsignal

애플리케이션을 다시 시작하기 전에 docker-compose.yml의 12번째 줄 뒤에 다음 환경 변수를 추가합니다. :

# docker-compose.yml
APP_REVISION: "latest_version_tag"

Puma 서버 구성과 docker-compose 구성을 업데이트했으므로 ctrl-c를 사용하여 도커 컨테이너를 다시 시작해야 합니다. yarn start:compose를 사용하여 updocker-compose를 다시 시작합니다. .

새로운 통찰력 추적

서버가 다시 시작된 후 약 1분 동안 실행되도록 한 다음 AppSignal 대시보드로 돌아가 페이지를 새로 고칩니다. 현재 새로운 정보가 있는 두 가지 주요 영역이 있습니다.

첫 번째는 자동으로 생성된 새로운 Puma 메트릭 매직 대시보드입니다. AppSignal과 Puma의 기본 제공 통합으로 인해 이제 애플리케이션 서버의 활동에 대한 정보가 있습니다. plugin 지정 구성 파일에서 Puma 서버에 대한 메트릭을 보고하는 분당 프로브를 활성화했습니다.

마지막으로 전체 AppSignal 대시보드에 이제 배포 마커가 있습니다. APP_REVISION을(를) 설정할 수 있습니다. 환경 변수를 git commit SHA와 같이 애플리케이션의 현재 버전을 결정하는 데 도움이 되는 값으로 변경합니다.

AppSignal 대시보드의 '배포' 섹션을 보고 배포 내역(예:오류/성능 문제 목록)을 보고 배포 기록을 볼 수도 있습니다. 배포 간에 성능 또는 안정성이 어떻게 변경되었는지 확인하여 어떤 변경 사항으로 인해 새로운 버그가 발생할 수 있는지 알아보기 쉽습니다.

다음 단계:Ruby 앱을 위한 맞춤형 계측 및 모니터링

이 게시물은 애플리케이션에서 AppSignal을 설정하고 사용하여 코드의 가시성을 높이는 방법을 보여주었습니다.

AppSignal이 자동으로 Rails 및 Sidekiq 및 Puma와 같은 일부 애플리케이션의 종속성에 통합되는 방법을 시연했습니다. AppSignal은 기본적으로 더 많은 Ruby 프레임워크 및 보석과 함께 작동합니다. 여기에서 AppSignal의 Ruby 통합 전체 목록을 찾을 수 있습니다.

이 시리즈의 2부에서는 더 깊은 통찰력을 얻기 위해 Ruby on Rails 애플리케이션에 맞춤형 계측 및 모니터링을 추가하는 방법을 다룹니다.

다음 시간까지!

추신 Ruby Magic 게시물이 언론에 공개되는 즉시 읽고 싶다면 Ruby Magic 뉴스레터를 구독하고 게시물을 놓치지 마세요!