애플리케이션 성능에 대한 적절한 모니터링 개요를 설정하는 것은 복잡한 작업입니다. 일반적으로 먼저 모니터링해야 할 대상을 파악한 다음 코드를 계측하고 마지막으로 방출된 모든 데이터를 이해해야 합니다.
그러나 몇 가지 사항이 설정되고 Ruby를 기본적으로 지원하는 APM이 있으면 이 단계를 수행하는 것이 그 어느 때보다 쉽습니다. 이 게시물에서 여러분도 할 수 있는 방법을 보여드리겠습니다.
자동 계측 - 핸즈프리 APM 설정
코드의 어떤 부분이 성능 문제를 일으키는지 알아보려면 코드에 계측을 추가해야 합니다. 그렇게 하면 모든 작업을 분류하고 가장 느린 작업을 측정할 수 있습니다.
AppSignal의 자동 계측을 통해 우리는 가능한 한 많은 수동 작업을 제거합니다. CLI를 통해 몇 가지 명령을 실행하기만 하면 설정이 완료됩니다.
당사의 모니터링 에이전트는 인프라의 다양한 부분을 감지하고 자동으로 계측합니다. 이를 통해 AppSignal 앱은 가장 필요한 그래프와 대시보드를 요약, 처리, 모니터링 및 표시할 수 있습니다.
즉, 예를 들어 Ruby용 graphql gem의 경우 AppSignal은 들어오는 모든 GraphQL 요청을 계측합니다. 즉, 요청의 모든 이벤트에 대한 분석을 제공합니다.
즉시 사용 가능한 계측
AppSignal이 지원하는 모든 도구 목록을 만들었습니다. 꽤 광범위합니다:
유형 | 도구 |
---|---|
프레임워크 | 레일 |
Rails 기능 | 액션 메일러 |
Rails 기능 | 액션 케이블 |
Rails 기능 | 활성 기록 |
Rails 기능 | 활성 작업 |
Rails 기능 | 캐싱 |
ActiveRecord를 통해 지원 | PostgreSQL, MySQL, SQLite 등 |
Heroku 통합 | 헤로쿠 PostgreSQL |
프레임워크 | 파드리노 |
프레임워크 | 시나트라 |
보석 | 랙 |
보석 | 웹머신 |
웹 서버 | 퓨마 |
웹 서버 | 유니콘 |
ORM | 데이터매퍼 |
ORM | 속편 |
ORM | 몽고DB |
API | 포도 |
API | 그래프QL |
표준 라이브러리 | 넷::HTTP |
백그라운드 작업 | 대기 |
백그라운드 작업 | 사이드키크 |
백그라운드 작업 | 지연된 작업 |
백그라운드 작업 | 요청 |
백그라운드 작업 | 쇼류켄 |
보석 | 갈퀴 |
내가 말했듯이 목록이 꽤 길기 때문에 이 게시물에서 모든 도구에 대해 자세히 설명하지 않겠습니다.
웹 프레임워크 및 API
AppSignal은 즉시 사용 가능한 Ruby on Rails, Padrino 및 Sinatra의 웹 요청 계측을 지원합니다. Grape 또는 GraphQL gem을 사용하는 API도 지원됩니다.
루비 온 레일즈
Rails용 AppSignal 통합은 요청의 예외 및 성능을 추적하여 작동합니다. 요청하는 동안 컨트롤러에서 오류가 발생하면 AppSignal이 이를 보고합니다. 성능 문제는 요청 기간을 기반으로 하며 애플리케이션의 어느 부분이 가장 오래 걸렸는지 자세히 설명하는 이벤트 타임라인을 만듭니다.
HTTP 요청이 웹 서버의 로드 밸런서를 통해 Rails 앱에 도착하는 데 걸린 시간을 추적하는 것도 가능합니다. 기본적으로 켜져 있지 않은 경우 요청 대기열 시간 추적 헤더를 설정하면 AppSignal이 자동으로 대기열 시간을 그래프로 표시합니다.
그래프QL
AppSignal은 Ruby용 graphql gem을 지원합니다. 들어오는 모든 GraphQL 요청을 계측하고 요청의 모든 이벤트에 대한 분석을 제공합니다. 해석기를 구문 분석, 검증 및 실행하는 데 걸린 시간을 확인할 수 있습니다. 앱의 웹 프레임워크 및 데이터베이스 호출의 이벤트는 물론 이 분석에 포함됩니다.
이것은 시간이 오래 걸리는 GraphQL 쿼리를 디버그하려는 사용자에게 유용하며 어디에서 속도 저하가 발생할 수 있는지 확실하지 않습니다. 여기서도 예외 트리거를 잊지 마십시오. 이는 쿼리 시간이 특정 임계값에 도달할 때 경고하는 데 매우 유용할 수 있습니다.
시나트라, 파드리노, 포도
Sinatra, Padrino 및 Grape는 다양한 방식으로 앱의 일부가 될 수 있는 Ruby용 웹 및 API 프레임워크입니다. 독립 실행형 앱이거나 더 큰 Rails 앱에 탑재됩니다. 앱이 웹 서버에 마운트되는 방식에 따라 Sinatra, Padrino 및 Grape에 대해 몇 가지 다른 설치 단계가 필요합니다.
일단 설치되면 Sinatra, Padrino, Grape 요청이 모두 계측됩니다. 트래픽이 API에 도달하면 오류 및 성능 측정이 보고됩니다. 모든 (API) 엔드포인트는 어떤 엔드포인트에서 어떤 오류가 발생했는지 쉽게 찾기 위한 AppSignal의 자체 작업입니다. Rails 앱과 마찬가지로 성능 분석을 통해 어떤 데이터베이스 쿼리나 다른 부분 또는 앱이 다른 부분보다 느렸는지에 대한 통찰력을 제공합니다.
데이터베이스
활성 레코드 및 기타 ORM
요청이 데이터베이스를 쿼리하는 데 걸린 시간을 확인하려면 인시던트 세부 정보 페이지를 엽니다. 페이지 상단에는 요청에 기록된 이벤트 유형이 그룹별로 분류되어 있습니다. 여기에서 어떤 유형의 작업에 총 시간이 얼마나 소요되었는지 확인할 수 있습니다.
이 샘플의 성능을 더 확대하면 페이지 아래로 더 내려가면 요청의 모든 이벤트가 발생한 순서대로 타임라인이 표시됩니다. 이것은 실행된 각 쿼리와 가장 오래 걸리는 쿼리에 대한 개요를 제공합니다.
통합은 데이터베이스 호출에 대한 추적을 보여주므로 어떤 쿼리가 악의(또는 천재)의 근원인지 알 수 있습니다 😉
N+1개의 쿼리
요청에 N+1개의 쿼리가 발생하여 속도가 느려지는 것이 걱정되십니까? N+1개의 검색어를 감지하면 감지된 이벤트에 대한 이벤트 타임라인에 경고가 표시됩니다.
레디스
Redis 통합을 사용하면 Redis에 대한 호출이 이벤트 타임라인에 표시되는 것을 볼 수 있습니다.
Redis로 전송된 명령의 이름과 쿼리가 수행된 Redis 인스턴스의 주소도 볼 수 있습니다.
이것은 Redis 캐시에 대한 장기 실행 호출을 디버그하려는 사람들에게 좋은 소식입니다. 매우 오랫동안 실행되는 요청에 대해 경고를 보내도록 변칙 트리거를 설정할 수도 있습니다!
백그라운드 작업
Sidekiq와 함께 백그라운드 작업이 대기할 때마다 Delayed::Job, Resque, Shoryuken 및 Que AppSignal은 자동으로 오류 및 성능 측정을 보고합니다. 모든 활성 작업 어댑터도 지원되며 Sidekiq 및 Delayed::Job과 같은 일부 백그라운드 작업 라이브러리는 라이브러리 자체에서 훨씬 더 많은 메타데이터를 보고합니다.
Action Mailer로 이메일 보내기
Action Mailer를 사용하는 Rails 메일러가 deliver_later
로 설정된 경우 또한 활성 작업을 통해 라우팅되며 동일한 수준의 계측을 사용할 수 있습니다.
웹 소켓
Rails 앱에서 Action Cable을 사용 중이신가요? AppSignal은 메시지 및 구독에 대한 오류 및 성능 측정을 자동으로 보고합니다. 모든 메시지는 별도로 계측되므로 장기 실행 채널에서도 모든 활동을 보고합니다. 작업별로 그룹화되어 각 개별 작업이 수행되는 방식에 대한 명확한 개요를 제공합니다.
<블록 인용>👋 마음에 든다면 Ruby 성능 모니터링 체크리스트에서 다른 Ruby(on Rails) 성능 기사를 살펴보세요.
AppSignal을 사용해 보세요:쉽고 간편하게 모니터링할 수 있습니다 🍪
지난 7년 동안 우리는 수천 명의 개발자가 코드를 자동으로 구성하도록 도왔고 여러분도 우리를 사용해 보시기 바랍니다. 그럴 때 부담 없이 연락해 주시면 스트룹 와플 한 상자를 무료로 보내드립니다.
추신. 훌륭한 OSS 프로젝트로 세상을 돕고 있다면 무료 AppSignal 계정으로 도와드리겠습니다. 당신이 소중하게 생각하는 관리자에게 이 소식을 전하세요!