Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal

ในส่วนแรกของชุดบทความนี้ เราได้ deploy แอปพลิเคชัน Ruby on Rails เรียบง่ายไปที่ DigitalOcean's app platform เรายังเชื่อมต่อ Rails app กับ AppSignal ดูว่าข้อผิดพลาดง่ายๆ ถูกติดตามและแสดงใน Errors dashboard ของ AppSignal อย่างไร

ในส่วนนี้ของชุด เราจะเจาะลึกว่าจะตั้งค่าสิ่งต่อไปนี้สำหรับแอปพลิเคชัน Ruby on Rails ของคุณโดยใช้ AppSignal อย่างไร:

  • Performance monitoring
  • Rails background jobs monitoring รวมถึงวิธีติดตาม simple API calls
  • Logging
  • Notification alerts

มาเริ่มกัน!

การติดตามประสิทธิภาพ Rails App โดยใช้ AppSignal

เมื่อ uptime monitor ของคุณแสดงว่าแอปของคุณ up มันอาจน่าล่อลวงให้คิดว่าทุกอย่างโอเค แต่ในความเป็นจริง ปัญหาอาจกำลังเดือดร้อนใต้ฝาครอบในรูปของ slow processes, unoptimized database queries และ long-running service calls

นี่เป็นเรื่องสำคัญมากเมื่อคุณพิจารณาว่ามี correlation ระหว่าง slow-loading web pages และ low visitor conversion rate ในข้อความสั้นๆ กระบวนการที่รันช้าจะมีค่าใช้จ่ายสูงหากปล่อยไว้โดยไม่ตรวจสอบ แต่กับหลาย moving parts ของ Ruby on Rails app คำถามสำคัญคือ: คุณควรมองหาอะไร และที่ไหน?

นี่คือที่ที่ AppSignal เข้ามาเล่นบทบาท มาดูว่าคุณสามารถใช้ AppSignal เพื่อติดตามประสิทธิภาพของ Rails app ของคุณได้อย่างไร

การติดตาม Response Times

จาก default dashboard AppSignal ให้สองกราฟที่สามารถให้ quick overview ได้ว่า Rails app ของคุณรันช้า (หรือเร็ว) แค่ไหน: กราฟ Throughput และ Response time

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Throughput and Response Time Graphs
  • Throughput - นี้วัดพื้นฐานว่าแอปของคุณกำลังประมวลผล requests กี่ request ต่อวินาที (ไม่สับสนกับว่ามันสามารถจัดการได้กี่ request ต่อวินาทีโดยรวม) Rule of thumb พื้นฐานคือ: ยิ่งมาก requests ต่อวินาที ยิ่งดี อย่างไรก็ตาม หาก app server จัดการ requests มากเกินไปต่อวินาที อาจถึงเวลา scale server resources เพื่อจัดการสิ่งนี้
  • Response time - เวลาเฉลี่ยที่ browser response ใช้ใน milliseconds ยิ่ง response ใช้เวลานาน ยิ่งแอปของคุณรันแย่ Rule of thumb ที่ดีในที่นี้คือ หาก Rails web app ของคุณมี response times ต่ำกว่า 100ms คุณสามารถพิจารณาว่ามันเร็ว ในขณะที่ 300ms+ response times สามารถพิจารณาว่าช้า

ตอนนี้ สมมติว่าเราอยากติดตาม response times และ throughput ของแอปเราในช่วง 7 วัน นั่นง่ายมาก — เพียงไปที่ sub-menu Graphs ภายใต้ Performance ที่อยู่ในเมนูด้านซ้าย จากนั้นใช้ time filter buttons บนกราฟ ตามที่แสดงด้านล่าง:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Time Filter Buttons

กับนั้น คุณสามารถมองเห็นได้ง่ายว่าแอปของคุณรันช้าในบางวันเทียบกับวันอื่นๆ

ขณะอยู่บน view นี้ ยังสำคัญที่จะ check out กราฟ Event groups ที่อยู่ด้านล่างกราฟ Response time และ Throughput:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Event Groups Graph

กราฟนี้ให้รายละเอียดเกี่ยวกับว่าแอปของคุณรันเร็วหรือช้าแค่ไหนใน controller layer และ view layer จากที่นี่ คุณสามารถค้นหาว่าอะไรกำลังทำให้ response times ช้า และแก้ไขปัญหาตามลำดับ

มาเปลี่ยนทิศทางไปที่การติดตาม database queries โดยใช้ AppSignal

การติดตาม Database Queries

โดยทั่วไปเป็นจริงที่คุณสามารถบีบ speed มากขึ้นจากแอปของคุณโดยการ optimize response times และ throughput อย่างไรก็ตาม มากกว่าที่ไม่ slow, unoptimized database queries เป็นผู้กระทำผิดที่แย่ที่สุดเมื่อพูดถึง sluggish app behavior

มาดูตัวอย่างของ infamous N+1 query ใน expense tracker app ที่แนะนำในส่วน 1 index method ใน expenses controller เป็นอย่างนี้:



สิ่งนี้อาจดู innocent แต่หากคุณดูที่ Issues list ใน AppSignal dashboard ของคุณ คุณจะเห็นสิ่งน่าสนใจ:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
N+1 Query Issue

N+1 query ถูกไฮไลท์ใน index method ของ expenses controller

หากเราขุดลึกกว่าด้วยการคลิกที่ issue link เราจะไปที่หน้าจอ Issue details อย่างนี้:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Issue Details

สังเกตว่า AppSignal เสนอคำอธิบายของ issue รวมถึง link ไปยัง blog post โดยละเอียดที่แสดงวิธีจัดการมัน

มาเคลื่อนต่อและเรียนรู้ว่า AppSignal ช่วยคุณกับ background jobs อย่างไร

การติดตาม Rails Background Jobs ด้วย AppSignal

Background jobs เป็นคุณสมบัติทั่วไปในหลาย production Ruby on Rails applications พร้อมกับ variety ของ job queue processing gems และ libraries ให้เลือก

AppSignal รองรับการติดตามและ monitoring background job processing libraries ต่างๆ รวมถึง Sidekiq, Que, Delayed Job, Resque และอื่นๆ

สมมติว่าเราอยากได้ฟีเจอร์ที่ users ได้ daily currency exchange rates ใน dashboard ของพวกเขา

เพื่อให้สิ่งนี้ทำงาน เราต้องการ API call ไปยัง service ที่ให้ rates เหล่านี้ (เราจะใช้ตัวที่ไม่ต้องการ configuration หรือการชำระเงินมากล่วงหน้า เช่น ตัวนี้ เพื่อดึง currency rates) เรายังต้องการ background job เพื่อ queue การเรียก service นี้ในช่วงเวลาประจำ

Background processing gem ที่เราจะใช้ใน expense tracker app คือ GoodJob แต่คุณอิสระที่จะใช้สิ่งที่เหมาะกับคุณ

มาสร้าง background job เพื่อ fetch rates:



และจากนั้นตั้งค่า GoodJob ให้รัน cron สำหรับ job นี้ทุกไม่กี่นาที (หรืออย่างที่คุณเห็นพอ) AppSignal ตรวจจับ presence ของ background service โดยอัตโนมัติ และรวม nifty filter เพื่อแยกมันจาก default web dashboards:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Background Jobs Filter

โดยไม่ต้องการ tooling มากล่วงหน้า AppSignal ยังตรวจจับ API calls และติดตาม issues ใดๆ:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
API Call Monitoring

หากคุณอยากเจาะลึก monitoring Rails background jobs ด้วย AppSignal แนะนำให้คุณดู documentation สำหรับตอนนี้ มาเปลี่ยนไปที่ uptime monitoring

Uptime Monitoring (การติดตาม Uptime)

อีกเรื่องที่เกี่ยวข้องกับหลาย Rails developers คือ continuous availability ของแอปพลิเคชันของพวกเขาสำหรับ end users Downtime ใดๆ อาจหมายถึง loss of revenue และผลลัพธ์เชิงลบอื่นๆ

即便如此 คุณไม่ควร poll uptime status ของแอปด้วยตนเอง คุณสามารถตั้งค่า uptime monitoring โดยใช้ AppSignal

การตั้งค่านี้เป็นเรื่องง่าย เริ่มต้นด้วยการคลิก link Uptime monitoring ในเมนูด้านซ้าย

จากนั้น เมื่อคุณคลิกปุ่ม create uptime monitor คุณควรได้ dialog คล้ายกับที่แสดงด้านล่าง:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Create Uptime Monitor
ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Uptime Monitor Settings

Complete uptime monitor ของคุณโดยเพิ่ม settings สำคัญที่สุด:

  • Name - ให้ uptime monitor ของคุณชื่อที่เหมาะสม
  • URL - ให้ full URL ไปยัง uptime route เริ่มต้นด้วย Rails 7.1 default uptime route คือ https://your-app-domain/up
  • Region - เลือก regions ที่คุณอยากตรวจสอบ uptime
  • Notification - เลือก notification channel/s เพื่อรับ alerts

กับสิ่งที่ทำเสร็จ ไปข้างหน้าและสร้าง monitor!

สิ่งหนึ่งที่ควรบันทึกกับ AppSignal uptime monitor คือ เนื่องจาก polling ทำเกือบทุกนาที มันง่ายมากที่จะ hit plan limits ของคุณ แต่มี workaround ที่ดีมากสำหรับสิ่งนี้ที่คุณอ่านเพิ่มเติมได้ใน docs ของพวกเขา

ก่อนจะไปที่การที่ AppSignal ช่วยกับ logging มีฟีเจอร์สำคัญอีกอย่างเพื่อ complete uptime monitoring layer: free public status pages

คลิกที่ link creating a public status page ตามที่แสดงด้านล่าง:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Public Status Page Link

จากนั้นคลิกปุ่ม New status page นำคุณไปที่นี่:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
New Status Page
ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Status Page Configuration

ไปข้างหน้าและกรอกข้อมูลที่จำเป็นทั้งหมด โปรดสังเกตว่าหากคุณใช้ custom domain คุณจะต้องเพิ่ม CNAME directive 指向 cname.appsignal-status.com ใน DNS settings ของ custom domain ของคุณ

Logging ด้วย AppSignal

Logging เป็นฟีเจอร์ที่ใหม่ค่อนข้างใน AppSignal แต่ทันเวลาและได้รับการต้อนรับ ด้วย AppSignal คุณไม่ต้องรัน application monitoring และ logging เป็น separate services

เพื่อเริ่มต้นกับ logging ตรวจสอบให้แน่ใจว่าคุณกำลังรัน latest version ของ AppSignal gem หากคุณมี older version ของ gem ให้อัปเดตมันด้วย:



จากนั้นสร้าง initializer ใหม่และแก้ไขมันแบบนี้:



ตอนนี้คุณสามารถเข้าถึง logs ของแอปได้อย่างนี้:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
AppSignal Logging

สังเกตว่าคุณยังได้ filter ที่ดีเพื่อ filter log records โดย severity รวมถึงการเข้าถึง live logs

คุณสามารถอ่าน AppSignal's logging for Ruby documentation ที่นี่

Other Notable Features (ฟีเจอร์เด่นอื่นๆ)

มี notable features อีกสองอย่างที่คุณสามารถใช้ใน AppSignal: anomaly detection และ custom metrics

Anomaly Detection (การตรวจจับความผิดปกติ)

สมมติว่าคุณกังวลกับแอปของคุณที่จะหมด memory คุณสามารถตั้งค่า trigger ที่ส่ง email notification หากแอปของคุณมี notable drop ใน available memory

ไปที่ link Anomaly detection และสร้าง trigger ใหม่ จากนั้นกำหนดค่ามัน:

ติดตามประสิทธิภาพแอป Ruby on Rails ได้อย่างมีประสิทธิภาพด้วย AppSignal
Anomaly Detection Setup
  • Metric - ในกรณีของผม ผมสนใจ memory usage แต่คุณสามารถเลือก metric อื่นที่ specific เพื่อ use case ของคุณ
  • Trigger details - ที่นี่ คุณจะกำหนด details ที่เกี่ยวข้องกับ trigger ในกรณีของผม trigger จะ fire หาก host memory ต่ำกว่า 200MB

Custom Metrics (เมตริกกำหนดเอง)

AppSignal ยังให้เครื่องมือให้คุณ capture และ visualize custom metrics ฟีเจอร์นี้เพียงอย่างเดียวสมควรได้บทความทั้งหมด คุณสามารถอ่านทั้งหมดเกี่ยวกับมันใน How to Monitor Custom Metrics with AppSignal และดู docs ของ AppSignal ด้วย

สรุป

ในส่วนหนึ่งของชุดบทความนี้ เราตั้งค่า Rails app ที่ hosted บน DigitalOcean และติดตามมันสำหรับ errors โดยใช้ AppSignal

ในส่วนที่สองและส่วนสุดท้ายนี้ เราดูฟีเจอร์ยอดเยี่ยมบางอย่างของ AppSignal สำหรับ Rails app ของคุณ รวมถึง performance monitoring, uptime monitoring, logging และอื่นๆ

มีอะไรมากกว่านี้ใน AppSignal ที่ไม่สามารถครอบคลุมได้อย่างมีประสิทธิภาพโดยชุดบทความนี้ ผมแนะนำอย่างยิ่งให้คุณดูมันสำหรับ Rails app ของคุณ

Happy coding!

P.S. หากคุณอยากอ่าน Ruby Magic posts ทันทีที่พวกเขาออก ให้ subscribe Ruby Magic newsletter ของเรา และไม่เคยพลาดโพสต์เดี่ยว!