การตั้งค่า Monitoring Overview ที่เหมาะสมสำหรับประสิทธิภาพแอปพลิเคชันของคุณเป็นงานที่ซับซ้อน ปกติแล้ว คุณจะต้องหาก่อนว่าต้อง Monitor อะไรบ้าง แล้ว Instrument โค้ดของคุณ และสุดท้ายทำความเข้าใจข้อมูลทั้งหมดที่ถูก Emit ออกมา
อย่างไรก็ตาม ด้วยการตั้งค่าบางอย่าง และ APM ที่รองรับ Ruby อย่าง Native มันง่ายกว่าที่เคยที่จะก้าวข้ามขั้นตอนนี้ ในโพสต์นี้ เราจะแสดงวิธีที่คุณสามารถทำได้เช่นกัน
Automatic Instrumentation - Handsfree APM Setup
เพื่อค้นหาว่าสิ้นส่วนไหนของโค้ดของคุณก่อให้เกิดปัญหาประสิทธิภาพ คุณจะต้องเพิ่ม Instrumentation เข้าไป เพื่อที่คุณจะ Break Down Actions ทั้งหมดและวัดว่าตัวไหนช้าที่สุด
ด้วย Automatic Instrumentation ของ AppSignal เราเอางาน Manual มากที่สุดเท่าที่จะเป็นไปได้ แค่รันคำสั่งผ่าน CLI ไปซัก几个 คุณก็ Set แล้ว
Monitoring Agent ของเราตรวจจับส่วนต่างๆ ของ Infrastructure ของคุณและ Instrument มันโดยอัตโนมัติ นี่ทำให้ AppSignal App สามารถ Digest, Process, Monitor และแสดง Graphs และ Dashboards ที่คุณต้องการมากที่สุด
นั่นหมายความว่า ตัวอย่างเช่น สำหรับ GraphQL Gem สำหรับ Ruby AppSignal จะ Instrument ทุก GraphQL Request ที่เข้ามา หมายความว่ามันจะให้ Breakdown ของ Events ทั้งหมดใน Request
Out-of-the-box Instrumentation (Instrumentation พร้อมใช้งานทันที)
เราทำรายการ Tools ทั้งหมดที่ AppSignal รองรับ มันค่อนข้างกว้างขวาง:
| Type | Tool |
|---|---|
| Framework | Rails |
| Rails features | Action Mailer |
| Rails features | Action Cable |
| Rails features | Active Record |
| Rails features | Active Job |
| Rails features | Caching |
| Supported through ActiveRecord | PostgreSQL, MySQL, SQLite, etc. |
| Heroku integration | Heroku PostgreSQL |
| Framework | Padrino |
| Framework | Sinatra |
| Gem | Rack |
| Gem | WebMachine |
| Web server | Puma |
| Web server | Unicorn |
| ORM | DataMapper |
| ORM | Sequel |
| ORM | MongoDB |
| API | Grape |
| API | GraphQL |
| Standard library | Net::HTTP |
| Background job | Que |
| Background job | Sidekiq |
| Background job | Delayed Job |
| Background job | Resque |
| Background job | Shoryuken |
| Gem | Rake |
เช่นที่ฉันกล่าว รายการค่อนข้างยาว นั่นคือเหตุผลที่เราจะไม่เจาะลึก Tool ทุกตัวในโพสต์นี้
Web Frameworks และ APIs
AppSignal รองรับ Instrumentation ของ Web Requests ใน Ruby on Rails, Padrino และ Sinatra ทันทีที่ติดตั้ง APIs ที่ใช้ Grape หรือ GraphQL Gem ก็รองรับเช่นกัน
Ruby on Rails
AppSignal Integration สำหรับ Rails ทำงานโดยการ Track Exceptions และ Performance ใน Requests เมื่อเกิด Error ใน Controller ระหว่าง Request AppSignal จะ Report มัน Performance Issues จะคำนวณจาก Duration ของ Request และสร้าง Timeline ของ Events รายละเอียดว่าส่วนไหนของแอปพลิเคชันใช้เวลานานที่สุด
แม้แต่สามารถ Track ได้ว่า HTTP Requests ใช้เวลานานแค่ไหนในการมาถึง Rails App ผ่าน Load Balancer หรือ Web Server หากไม่ On โดย Default ให้ Setup Request Queue Time Tracking Header และ AppSignal จะ Graph Queue Time โดยอัตโนมัติ
GraphQL
AppSignal รองรับ GraphQL Gem สำหรับ Ruby มันจะ Instrument ทุก GraphQL Request ที่เข้ามา และให้ Breakdown ของ Events ทั้งหมดใน Request คุณจะเห็นได้ว่าใช้เวลานานแค่ไหนในการ Parse, Validate และ Execute Resolvers ของคุณ Events จาก Web Framework ของแอปและ Database Calls ก็รวมอยู่ใน Breakdown นี้ด้วย
สิ่งนี้ยอดเยี่ยมสำหรับผู้ที่ต้องการ Debug GraphQL Queries ที่ดูเหมือนจะใช้เวลานาน และคุณไม่แน่ใจว่า Slowdown อาจเกิดขึ้นที่ไหน อย่าลืม Anomaly Triggers ของเราด้วย — สิ่งเหล่านี้มีประโยชน์มากสำหรับการ Alert เมื่อ Query Time ถึงเกณฑ์หนึ่ง
Sinatra, Padrino และ Grape
Sinatra, Padrino และ Grape เป็น Web และ API Frameworks สำหรับ Ruby ที่สามารถเป็นส่วนหนึ่งของแอปในวิธีต่างๆ พวกเขาเป็น Standalone App หรือ Mounted บน Rails App ขนาดใหญ่ ขึ้นอยู่กับว่า App Mount บน Web Server อย่างไร ขั้นตอนการ Install บางอย่างอาจแตกต่างสำหรับ Sinatra, Padrino และ Grape
เมื่อติดตั้งแล้ว Sinatra, Padrino, Grape Requests ทั้งหมดถูก Instrumented: Errors และ Performance Measurements ถูก Report เมื่อ Traffic Hit API ทุก (API) Endpoint เป็น Action ของตัวเองใน AppSignal เพื่อหาได้ง่ายว่า Endpoint ไหนเจอ Error ไหน Performance Breakdown ให้ Insight เหมือนกับ Rails Apps ว่า Database Queries หรือส่วนอื่นของแอปไหนช้ากว่ากัน
Databases (ฐานข้อมูล)
Active Record และ ORMs อื่นๆ
เพื่อดูว่า Request ใช้เวลานานแค่ไหนในการ Query Database ให้เปิด Incident Detail Page บนสุดของหน้า Types ของ Events ที่ Record ใน Request ถูก Break Down ต่อ Group ที่นี่คุณเห็นว่าใช้เวลาทั้งหมดเท่าไหร่ใน Operation ประเภทไหน
หากเรา Zoom ใกล้ขึ้นอีกบน Performance ของ Sample นี้ ลงมาข้างล่างของหน้า คุณจะพบ Timeline ของ Events ทั้งหมดใน Request ตามลำดับที่เกิดขึ้น นี่ให้ Overview ของแต่ละ Query ที่ Execute และตัวไหนใช้เวลานานที่สุด
Integration แสดง Tracing สำหรับ Database Calls ดังนั้นคุณเห็นได้ว่า Query ไหนคือ Root ของความชั่วร้าย (หรือ Genius) 😉
N+1 Queries
กังวลว่าอาจมี N+1 Queries เกิดขึ้นใน Request และนั่นคือสิ่งที่ทำช้า? หากเราตรวจจับ N+1 Queries Warning จะปรากฏใน Event Timeline สำหรับ Events ที่ถูกตรวจจับ
Redis
ด้วย Redis Integration คุณจะเห็น Calls ไป Redis ใน Event Timeline:
คุณยังสามารถเห็นชื่อ Command ที่ส่งไป Redis และ Address ของ Redis Instance ที่ Query ถูกส่งไป:
นี่เป็นข่าวดีสำหรับผู้ที่ต้องการ Debug Long-running Calls ไป Redis Cache คุณสามารถตั้ง Anomaly Trigger ให้ส่ง Alert บน Requests ที่รันนานเกินไปได้!
Background Jobs
ทุกครั้งที่ Background Job ถูก Queued ด้วย Sidekiq, Delayed::Job, Resque, Shoryuken และ Que AppSignal จะ Report Errors และ Performance Measurements โดยอัตโนมัติ Active Job Adapters ทั้งหมดก็รองรับ และ Background Job Libraries บางอย่างเช่น Sidekiq และ Delayed::Job Report Metadata เพิ่มเติมจาก Libraries เอง
การส่ง Email ด้วย Action Mailer
หาก Rails Mailers ที่ใช้ Action Mailer ตั้งค่าเป็น deliver_later พวกเขาก็จะถูก Route ผ่าน Active Job และนับได้บนระดับ Instrumentation เดียวกัน
Websockets
ใช้ Action Cable ใน Rails App ของคุณ? AppSignal Report Errors และ Performance Measurements สำหรับ Messages และ Subscriptions โดยอัตโนมัติ ทุก Message ถูก Instrument แยกต่างหาก ดังนั้นแม้ Channel ที่รันนานก็จะ Report Activity ทั้งหมด พวกเขาถูก Group ต่อ Action ให้ Overview ชัดเจนว่าแต่ละ Action ทำงานอย่างไร
👋 หากคุณชอบนี้ ลองดูบทความ Ruby (on Rails) Performance อื่นๆ ใน Ruby Performance Monitoring Checklist ของเรา
ลอง AppSignal: Monitoring ทำง่ายและ Sweet 🍪
ใน 7 ปีที่ผ่านมา เราช่วยนักพัฒนาหลายพันคนให้ Instrument โค้ดของพวกเขาโดยอัตโนมัติ และเรายินดีคุณลองเราเช่นกัน เมื่อคุณลอง โปรดติดต่อเรา เราจะส่งกล่อง Stroopwafels ฟรีให้ด้วย
PS. หากคุณช่วยโลกด้วย OSS Project ที่ยอดเยี่ยม เราช่วยคุณกลับด้วยบัญชี AppSignal ฟรี แจ้งให้ Maintainers ที่คุณคุ้มค่ารู้จัก!