ในคู่มือนี้ เราจะใช้ AppSignal เพื่อตรวจจับ วิเคราะห์ และกำจัดปัญหา bottleneck ด้านประสิทธิภาพ และใช้ tracing อย่างเหมาะสมในแอปพลิเคชัน Ruby on Rails ตั้งแต่การตั้งค่า tracing การจับข้อผิดพลาด และการ logging เราครอบคลุมทุกอย่างให้คุณ
เราจะทำให้แอปพลิเคชันของคุณรันลื่นไหลกว่าที่เคย แม้ภายใต้โหลดหนักที่สุด!
แต่ก่อน มาสัมผัสพื้นฐานเกี่ยวกับการกำหนด tracing และประโยชน์ของมันก่อน
Tracing คืออะไร?
Tracing เป็นกระบวนการติดตามคำขอและการดำเนินการผ่านแอปพลิเคชัน ในแอปพลิเคชัน Ruby tracing จับกระดูกการทำงาน ให้ข้อมูลเชิงลึกลึกซึ้งเกี่ยวกับประสิทธิภาพขององค์ประกอบต่างๆ
ประโยชน์ของ Tracing
Tracing มีประโยชน์หลายประการ รวมถึง:
- การเพิ่มประสิทธิภาพ (Performance Optimization): Tracing ระบุส่วนที่ช้าของแอปพลิเคชันที่ต้องการปรับปรุงประสิทธิภาพ
- การ Debug ที่ดีขึ้น (Better Debugging): Traces ที่ละเอียดช่วยให้คุณระบุปัญหาโค้ดและกำหนดสาเหตุได้อย่างรวดเร็ว
- ความน่าเชื่อถือที่ดีขึ้น (Improved Reliability): Tracing ติดตามพฤติกรรมแอปพลิเคชัน ให้การดำเนินงานของระบบที่น่าเชื่อถือและมีประสิทธิภาพมากขึ้น
สถานการณ์: แอป Rails ที่ Lag ของเรา
สมมติว่าเป็น Black Friday วันที่ช้อปปิ้งมากที่สุดของปี แพลตฟอร์มอีคอมเมิร์ซที่พัฒนาด้วย Rails ของคุณเต็มไปด้วยลูกค้าที่กระตือรือร้นหลายพันราย ตะกร้าของพวกเขาเต็มไปด้วยสินค้า พร้อมเช็คเอาท์ ทุกอย่างดูสมบูรณ์ — จนกระทั่งระบบเริ่ม lag
ธุรกรรมล้มเหลว ตะกร้าที่ถูกทิ้งเพิ่มขึ้นอย่างรวดเร็ว ภาวะปánico เกิดขึ้น นี่คือคำรามของนักพัฒนาทุกคน แต่จะเป็นอย่างไรหากคุณมีอาวุธลับ? เครื่องมือที่ไม่เพียงแจ้งเตือนปัญหาใน real-time แต่ยังดำน้ำลึกเข้าใจหัวใจของแอปพลิเคชันของคุณ tracing ทุกคำขอ ทุก database query และทุก background job? เข้าสู่ AppSignal
วิธีตั้งค่า Tracing สำหรับแอป Ruby on Rails โดยใช้ AppSignal
เพื่อสาธิตพลังของ tracing โดยใช้ AppSignal ฉันได้สร้างโปรเจกต์ Rails e-commerce ตัวอย่างที่เราสามารถบูรณาการกับ AppSignal นี่จะช่วยให้คุณเห็นด้วยตนเองว่า tracing สามารถระบุและแก้ไขปัญหาเหล่านี้ได้อย่างไร
ข้อกำหนดเบื้องต้น
- Ruby Version: AppSignal รองรับ Ruby 2.5 ขึ้นไป
- AppSignal Account: สร้างบัญชีบน AppSignal (มี free trial ให้)
ตอนนี้คุณพร้อมที่จะตั้งค่า tracing ในแอปพลิเคชัน Ruby ของคุณโดยใช้ AppSignal
ขั้นตอนที่ 1: ติดตั้ง AppSignal Gem
นี่คือ gem:
เพียงรัน bundle install:
ขั้นตอนที่ 2: เริ่มต้น AppSignal
รันคำสั่งติดตั้ง AppSignal เพื่อตั้งค่าไฟล์การกำหนดค่าที่จำเป็น
ปฏิบัติตามพรอมบนเทอร์มินัลของคุณ คุณสามารถเลือก config file หรือ environment variables เพื่อกำหนดค่า AppSignal ในแอปของคุณ เราจะเลือกตัวเลือก config file
คำสั่งนี้จะสร้างไฟล์การกำหนดค่า appsignal.yml ในไดเรกทอรี config ของคุณ ไฟล์นี้จะถูกเติมข้อมูลล่วงหน้าด้วย push API key ของ AppSignal และการตั้งค่าพื้นฐานบางอย่าง
ขั้นตอนที่ 3: กำหนดค่า AppSignal
ให้แน่ใจว่า config/appsignal.yml ถูกกำหนดค่าอย่างถูกต้องสำหรับ environments ของคุณ ไฟล์นี้มีการตั้งค่าคอนฟิกสำหรับ environments ต่างๆ (development, test, production) ข้าม actions ที่ให้คุณค่าน้อย
และตาดา! คุณตั้งค่าเสร็จแล้ว:
การ Instrument แอปพลิเคชัน Ruby on Rails ของเรา
AppSignal สามารถ instrument องค์ประกอบหลักหลายอย่างของแอป Rails ของเราโดยอัตโนมัติ เช่น database queries และ web requests เรายังสามารถเพิ่ม custom instrumentation เพื่อ trace ส่วนเฉพาะของแอปพลิเคชันของเราได้
Custom Rails Instrumentation
เพื่อ instrument ส่วนเฉพาะของโค้ดของเรา เราจะห่อหุ้มบรรทัดโค้ดบางบรรทัดด้วยเมธอด Appsignal.instrument เมธอดนี้สามารถใช้ trace บล็อกโค้ดเฉพาะได้ เช่น ส่วนที่ซับซ้อนของ controller actions หรือ background jobs
การส่งคำขอไปยัง endpoint นี้จะทำให้ N+1 query ถูกรายงาน
ปัญหา N+1 เกิดขึ้นเมื่อแอปพลิเคชันของเราทำ database queries หลายครั้งเพื่อโหลด associated records สำหรับแต่ละออบเจ็กต์ในคอลเลกชัน แทนที่จะใช้ single query ที่มีประสิทธิภาพ สิ่งนี้สามารถลดประสิทธิภาพลงอย่างมีนัยสำคัญ โดยเฉพาะเมื่อจัดการกับข้อมูลขนาดใหญ่
วิธีแก้ในกรณีนี้คือการ eager load get all orders query — เพียงแทนที่โค้ดนี้:
ด้วยโค้ดต่อไปนี้:
การรวบรวมและรายงาน Ruby Errors ด้วย AppSignal
AppSignal อนุญาตให้คุณจับและรายงานข้อผิดพลาดของแอปพลิเคชันโดยใช้เมธอด Appsignal.set_error
นี่คือตัวอย่างการจับและรายงานข้อผิดพลาดใน order controller index action:
ในตัวอย่างนี้ เราสาธิต custom error handling ภายใน controller action เฉพาะ อย่างไรก็ตาม สำคัญที่จะต้องทราบว่า AppSignal รายงานข้อผิดพลาดโดยค่าเริ่มต้น ดังนั้นการรายงานข้อผิดพลาดอย่างชัดเจนด้วย Appsignal.set_error จึงไม่จำเป็นปกติ
สำหรับการจัดการข้อผิดพลาดที่สอดคล้องและรวมศูนย์ทั่วทั้ง controller actions แนะนำให้ใช้ rescue_from ที่ระดับ controller วิธีนี้ทำให้แน่ใจว่า unhandled exceptions ใน controller actions ของคุณถูกรายงานและจัดการอย่างเหมาะสม
นี่คือตัวอย่างวิธีการนำไปใช้:
บนแท็บ Error > Issue list เราสามารถเห็นรายการข้อผิดพลาดทั้งหมด สถานะของแต่ละ issue และว่าข้อผิดพลาดเกิดขึ้นกี่เวลาก่อน:
การคลิกที่ RuntimeError เราสามารถเห็น error log และบรรทัดโค้ดที่กระตุ้นข้อผิดพลาดนี้:
มาแตะพื้นฐาน advanced tracing techniques ก่อนที่เราจะปิดท้าย
Advanced Tracing Techniques (เทคนิค Tracing ขั้นสูง)
เราจะนำ advanced tracing techniques บางอย่างไปใช้กับ order endpoint ของแอป e-commerce ของเรา
เทคนิคเหล่านี้จะช่วยให้เราจัดการสภาพแวดล้อม high-traffic ได้อย่างมีประสิทธิภาพ รับรองความเป็นส่วนตัวของข้อมูล และรักษาความปลอดภัยการเข้าถึง trace data
High Traffic Use Cases (กรณีการใช้งาน Traffic สูง)
ในสภาพแวดล้อม high-throughput การรวบรวม trace data สำหรับทุกคำขออาจนำไปสู่ overhead ที่มาก Sampling ช่วยลดสิ่งนี้โดยการรวบรวม trace data สำหรับเพียง subset ของคำขอ
การเพิ่ม Metadata ให้ Transactions
คุณสามารถให้บริบทเพิ่มเติมเกี่ยวกับข้อผิดพลาดและปัญหาประสิทธิภาพโดยใช้ tags และ sample data สิ่งนี้ช่วยเพิ่มข้อมูลที่ไม่ได้เป็นส่วนหนึ่งของ request, session, หรือ environment parameters แล้ว อ่านเพิ่มเติมเกี่ยวกับวิธีการส่งผ่านและเพิ่ม metadata เพิ่มเติม
Asynchronous Processing (การประมวลผลแบบ Asynchronous)
Asynchronous processing เป็นเทคนิคทั่วไปที่ใช้จัดการงานที่ใช้เวลานานเกินกว่าจะทำได้ใน request-response cycle เช่น การส่งอีเมล ประมวลผล background jobs และจัดการนำเข้าข้อมูลขนาดใหญ่ แอปพลิเคชัน Ruby on Rails ทั่วไปใช้ background job libraries เช่น Sidekiq, Resque, หรือ Delayed Job เพื่อจัดการงานเหล่านี้
AppSignal บูรณาการกับไลบรารีอย่าง Active Job, DelayedJob, Shoryuken, Sidekiq, และ Que ได้อย่างราบรื่น เพื่อให้ข้อมูลเชิงลึกเกี่ยวกับประสิทธิภาพและข้อผิดพลาดของ background jobs ของคุณ
Security Considerations (ข้อควรพิจารณาด้านความปลอดภัย)
ความปลอดภัยเป็นส่วนสำคัญมากของแอปพลิเคชัน production-ready ใดๆ เราต้องแน่ใจว่าข้อมูล nhạy cảmไม่ได้รวมอยู่ใน trace data เพื่อรักษาความเป็นส่วนตัวของผู้ใช้ ค่าของ filter parameters จะถูกแทนที่ด้วย [FILTERED] เมื่อส่งไปยัง AppSignal
มาแก้ไข config/appsignal.yml เพื่อรวม sensitive request params หลายตัวที่ต้องการ mask
หากคุณใช้ Rails filter_parameters config option AppSignal จะ merge config ของมันกับของ Rails ดังนั้นจึงไม่ต้องกำหนดค่าสองครั้ง
โดยการนำ advanced tracing techniques เหล่านี้ไปใช้ คุณสามารถจัดการสภาพแวดล้อม high-traffic อย่างมีประสิทธิภาพและรับรองความเป็นส่วนตัวของข้อมูล nhạy cảm อ่านเพิ่มเติมเกี่ยวกับ filter parameters
สรุป
เราเห็นว่าการตั้งค่า tracing สำหรับแอป Ruby โดยใช้ AppSignal เกี่ยวข้องกับการเข้าใจพื้นฐาน tracing การเตรียมแอปพลิเคชันของคุณ และการปฏิบัติตามกระบวนการตั้งค่าทีละขั้นตอน วิธีการขั้นสูงและเทคนิค debugging สามารถใช้เพื่อเพิ่มประสิทธิภาพ tracing ได้
การนำ tracing ไปใช้อย่างสม่ำเสมอในวัฏจักรการพัฒนาและบำรุงรักษานำไปสู่ประสิทธิภาพและความน่าเชื่อถือที่สูงขึ้น เริ่มต้นใช้งาน AppSignal วันนี้สำหรับการติดตามที่เพิ่มขึ้นและข้อมูลเชิงลึกประสิทธิภาพลึกซึ้งสำหรับแอปพลิเคชัน Ruby ของคุณ
Happy coding!
Daniel Amah
ผู้เขียนรับเชิญ Daniel เป็น Principal Software Engineer และ Technical Founder ที่มีประสบการณ์มากกว่าทศกาลในการสร้างเว็บและแพลตฟอร์มมือถือที่ขยายได้โดยใช้ Ruby on Rails, React และสถาปัตยกรรม AI-powered เขาคือผู้สร้าง Taskclan และเขียนบ่อยเกี่ยวกับ engineering leadership, developer workflows และ startup execution บน Medium และ LinkedIn
บทความทั้งหมดโดย Daniel Amah