เมื่อเรียกใช้และบำรุงรักษาแอปพลิเคชันในสภาพแวดล้อมที่ใช้งานจริง เราต้องการรู้สึกมั่นใจเกี่ยวกับพฤติกรรมของแอปพลิเคชันและรู้ว่าเมื่อใดที่แอปพลิเคชันไม่ทำงานตามที่คาดไว้ อย่างน้อย เราต้องการติดตามข้อผิดพลาด ตรวจสอบประสิทธิภาพ และรวบรวมตัวชี้วัดเฉพาะตลอดทั้งแอปพลิเคชัน
เนื่องจากเราเป็นนักพัฒนาซอฟต์แวร์และชอบโซลูชันที่บำรุงรักษาได้ (ใช่ไหม) เราจึงไม่อยากจบลงด้วยเครื่องมือ การผสานรวม และการพึ่งพาที่ยุ่งเหยิงซึ่งทำให้เราติดตามทุกสิ่งได้ยากขึ้น
ในโพสต์นี้ เราจะเพิ่ม AppSignal ให้กับแอปพลิเคชัน Ruby on Rails เพื่อช่วยให้เข้าใจถึงพฤติกรรมของแอปพลิเคชันอย่างชัดเจน
ข้อกำหนดเบื้องต้นหากคุณต้องการปฏิบัติตามโค้ด:
- บัญชีบน www.appsignal.com
- ติดตั้งและใช้งาน Docker (เพื่อใช้
docker-compose
).*จำเป็นเฉพาะในกรณีที่ใช้แอปพลิเคชันตัวอย่างในโพสต์นี้
การตั้งค่า AppSignal
หมายเหตุ :คุณสามารถข้ามส่วนนี้ได้หากคุณเพิ่ม AppSignal ในแอปพลิเคชัน Rails ของคุณเอง ในกรณีดังกล่าว คุณยังสามารถละเว้นคำแนะนำที่เกี่ยวข้องกับ 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
และการดำเนินการ CRUD ทั้งหมดเปิดเผยผ่าน /posts
เส้นทาง
เรายังมีโฮมเพจที่แสดงโดย PagesController
ซึ่งจัดคิวงานเบื้องหลัง CreateRandomPostsJob
เพื่อสร้างโพสต์แบบสุ่มแบบอะซิงโครนัส
สุดท้ายนี้ เราใช้ Sidekiq สำหรับการประมวลผลงานเบื้องหลัง
แพลตฟอร์มบล็อกขนาดเล็กของเรามีผู้ใช้ที่ใช้งานอยู่แล้ว มี ascript (./bin/traffic
) ทำงานในพื้นหลังร่วมกับเซิร์ฟเวอร์ที่ส่งคำขอสองสามอย่างเป็นประจำเพื่อเลียนแบบการรับส่งข้อมูลบนแอปพลิเคชัน
แค่นั้นแหละ. เราเพิ่งเปิดตัวผลิตภัณฑ์ และทุกอย่างทำงานได้อย่างสมบูรณ์...
หรืออย่างน้อยนั่นคือสิ่งที่เราคิดจนกว่าเราจะเริ่มเห็นรายงานของผู้ใช้เกี่ยวกับประสิทธิภาพของแอปพลิเคชันและผู้ใช้พบข้อผิดพลาด
แล้วเราจะรู้ได้อย่างไรว่าเกิดอะไรขึ้น? เมื่อเราทำงานในสภาพแวดล้อมการพัฒนา การตรวจสอบข้อผิดพลาดจะง่ายขึ้น แต่เมื่อแอปพลิเคชันของเราทำงานในเวอร์ชันที่ใช้งานจริง การดำเนินการนี้จะยากขึ้น จะต้องมีวิธีที่ดีกว่าในการค้นหาข้อผิดพลาดมากกว่าการค้นหาผ่านบันทึกของเซิร์ฟเวอร์เหล่านั้น
AppSignal ช่วยชีวิต!
การเริ่มต้นใช้งาน AppSignal
มาเริ่มต้นการติดตามตรวจสอบของเราโดยเพิ่ม AppSignal ในแอปพลิเคชันของเรา คุณจะต้องลงชื่อเข้าใช้บัญชีของคุณที่www.appsignal.com
หากคุณเป็นผู้ใช้ AppSignal ใหม่ คุณจะเห็นหน้าด้านล่างเพื่อเพิ่ม anapplication (ในขณะที่ผู้ใช้ที่มีอยู่ต้องคลิกที่ 'Add app')
เลือก "ติดตั้งสำหรับ Ruby" ซึ่งจะมีขั้นตอนง่ายๆ ให้เราปฏิบัติตาม:
-
เพิ่มอัญมณีลงใน
Gemfile
. ของคุณ# Gemfile gem 'appsignal'
-
ติดตั้ง gem โดยเรียกใช้
bundle install
ภายในคอนเทนเนอร์นักเทียบท่า ซึ่งคุณสามารถเข้าถึงได้ด้วย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
-
ติดตั้ง AppSignal
ระหว่างการติดตั้ง คุณจะต้องตอบกลับข้อความแจ้งสองรายการ:
Do you want to change how this is displayed in AppSignal? (y/n): n
How do you want to configure AppSignal?
:ใส่1
เพราะเราจะใช้ไฟล์ปรับแต่งแทนตัวแปรสภาพแวดล้อม
ใช้คีย์ API ที่แสดงในหน้าการตั้งค่า AppSignal:
$ 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 แบบพุชของคุณ คุณจะลบออกจากไฟล์นี้และใช้ตัวแปรสภาพแวดล้อมแทน ไม่จำเป็นสำหรับโพสต์นี้
เราจำเป็นต้องรีสตาร์ทแอปพลิเคชันเพื่อให้แน่ใจว่าการเปลี่ยนแปลงของเรามีผลเนื่องจากเราได้ติดตั้งอัญมณีใหม่ วิธีที่ง่ายที่สุดคือหยุดคอนเทนเนอร์นักเทียบท่าด้วย ctrl-c
ภายในหน้าต่างเทอร์มินัลที่รันเซิร์ฟเวอร์ และเริ่ม docker-compose อีกครั้งด้วย:
$ yarn start:compose
อาจใช้เวลาสักครู่เพราะจะสร้างอิมเมจนักเทียบท่าใหม่เมื่อการขึ้นต่อกันเปลี่ยนไป
แดชบอร์ดหลักของ AppSignal
ตอนนี้เรามีแอปพลิเคชันที่ทำงานพร้อมกับ AppSignal แล้ว เราสามารถดูแดชบอร์ดได้ หากต้องการดูแอปพลิเคชันและสภาพแวดล้อมทั้งหมดที่คุณใช้งานบน AppSignal คุณสามารถไปที่ appsignal.com/accounts:
คลิกที่ชื่อแอปพลิเคชัน และคุณสามารถสำรวจสิ่งที่ AppSignal ตรวจสอบได้ทันที
ภายในไม่กี่นาที ข้อมูลบางส่วนจะถูกเก็บรวบรวมเนื่องจากสคริปต์การสร้างทราฟฟิกของคุณ
จากแดชบอร์ดหลัก คุณสามารถรับภาพรวมระดับสูงที่ดีของตัวชี้วัดแอปพลิเคชันที่ไม่สำคัญบางประการ ตอนนี้เรากำลังจะเจาะลึกเข้าไปในส่วนที่เฉพาะเจาะจงมากขึ้นภายใน AppSignal
แดชบอร์ดข้อผิดพลาดใน AppSignal
ในหน้าข้อผิดพลาด คุณจะพบรายการข้อผิดพลาดทั้งหมดที่รายงานโดยแอปพลิเคชันของคุณ เมื่อเรารันสคริปต์การติดตั้ง ข้อผิดพลาดในการทดสอบถูกส่งไปยัง AppSignal คุณจะเห็นว่าเรายังมีข้อผิดพลาดที่ดูเหมือนจะเกิดขึ้นค่อนข้างบ่อย การคลิกที่ข้อผิดพลาดจะเปิดหน้าที่มีรายละเอียดเพิ่มเติม ซึ่งอาจเป็นประโยชน์ในการแก้ปัญหา
ในกรณีนี้ เราจะเห็นได้จากส่วน backtrace ที่หน้าแรกของแอพพลิเคชั่น (/
) มีข้อผิดพลาดในการตรวจสอบความถูกต้องที่เกิดขึ้นในapp/controllers/pages_controller.rb:7 home
.
แดชบอร์ด AppSignal อื่นๆ
ใต้ 'แดชบอร์ด' ในแถบด้านข้าง คุณจะเห็นว่า AppSignal ได้จัดเตรียมแดชบอร์ดต่างๆ ไว้ให้เราแล้ว
แดชบอร์ด 'ภาพรวม' พร้อมใช้งานสำหรับทุกแอปพลิเคชันและให้:
- อัตราข้อผิดพลาดในการสมัครของคุณ
- ปริมาณงาน
- เวลาตอบสนอง
- กิจกรรมล่าสุดอื่นๆ ที่คุณสามารถดูรายละเอียดเพิ่มเติมได้
คุณยังมีแดชบอร์ดวิเศษ 2 อัน อันหนึ่งสำหรับ Active Job และอีกอันสำหรับ Sidekiq AppSignal มีการผสานรวมในตัวสำหรับเฟรมเวิร์กยอดนิยมและอัญมณีจำนวนมากที่ทำงานโดยอัตโนมัติกับแอปพลิเคชัน Rails ของคุณ
เมื่อดูแดชบอร์ดเหล่านี้ คุณสามารถดูข้อมูลที่เกี่ยวข้องกับกิจกรรมของการผสานรวมนั้นได้ ใน Active Jobdashboard คุณจะเห็นกราฟสำหรับจำนวนงานในแต่ละคิว ระยะเวลาที่บันทึกไว้ของแต่ละงาน และอื่นๆ ลองดูสิ!
ประสิทธิภาพของแอปของคุณ
ภายใน ประสิทธิภาพ → รายการปัญหา คุณสามารถดูรายการการกระทำที่วัดจาก AppSignal การวัดผลเหล่านี้สามารถให้ข้อมูลเชิงลึกที่มีคุณค่าว่าส่วนใดของแอปพลิเคชันที่ใช้ประสิทธิภาพมาก
ตัวอย่างเช่น โดยการคลิกเข้าไปในปัญหาสำหรับการกระทำ PostsController#index
เราสามารถเจาะลึกประสิทธิภาพของคอนโทรลเลอร์ได้ คุณดูรายละเอียดได้อย่างรวดเร็วว่าใช้เวลาไปที่ไหนมากที่สุด หรือการจัดสรรวัตถุส่วนใหญ่เกิดขึ้น
ชัยชนะอย่างรวดเร็วและอัญมณีที่ซ่อนอยู่จาก AppSignal:การใช้ Puma
มีอัญมณีที่ซ่อนอยู่สองสามอย่าง (ไม่ใช่ประเภท Ruby) ที่คุณจะได้รับจาก AppSignal โดยไม่ต้องใช้ความพยายามมากนัก มาดูกันว่าเราจะทำให้สิ่งเหล่านี้ใช้งานได้ง่ายเพียงใดพร้อมตัวอย่าง
ภายใน config/puma.rb
, เพิ่มบรรทัดต่อไปนี้:
# config/puma.rb
plugin :appsignal
ก่อนที่เราจะรีสตาร์ทแอปพลิเคชัน ให้เพิ่มตัวแปรสภาพแวดล้อมต่อไปนี้ afterline 12 ใน docker-compose.yml
:
# docker-compose.yml
APP_REVISION: "latest_version_tag"
เนื่องจากเราได้อัปเดตการกำหนดค่าเซิร์ฟเวอร์ Puma และการกำหนดค่านักเทียบท่าของเรา เราจึงต้องรีสตาร์ทคอนเทนเนอร์นักเทียบท่าด้วย ctrl-c
และ start-updocker-compose อีกครั้งด้วย yarn start:compose
.
การติดตามข้อมูลเชิงลึกใหม่ของคุณ
หลังจากที่เซิร์ฟเวอร์รีสตาร์ทแล้ว ให้ปล่อยให้เซิร์ฟเวอร์ทำงานประมาณหนึ่งนาที จากนั้นกลับไปที่แดชบอร์ด AppSignal และรีเฟรชหน้า มีสองส่วนหลักที่มีข้อมูลใหม่ในขณะนี้:
สิ่งแรกคือแดชบอร์ดมายากล Puma ที่สร้างขึ้นใหม่โดยอัตโนมัติเนื่องจากการผสานรวมในตัวของ AppSignal กับ Puma เราจึงมีข้อมูลเกี่ยวกับกิจกรรมของเซิร์ฟเวอร์แอปพลิเคชัน การระบุ plugin
ในไฟล์กำหนดค่าได้เปิดใช้งานโพรบนาทีที่รายงานตัววัดเกี่ยวกับเซิร์ฟเวอร์ Puma
สุดท้ายนี้ ในแดชบอร์ด AppSignal ทั้งหมด ขณะนี้มี Deploymarkers คุณสามารถตั้งค่า APP_REVISION
ตัวแปรสภาพแวดล้อมเป็นค่าใดๆ ที่ช่วยคุณกำหนดเวอร์ชันปัจจุบันของแอปพลิเคชันของคุณ เช่น git คอมมิต SHA
คุณยังสามารถดูประวัติการปรับใช้ของคุณได้โดยดูส่วน 'ปรับใช้' ในแดชบอร์ด AppSignal และกรองข้อมูลเชิงลึก (เช่น รายการข้อผิดพลาด/ประสิทธิภาพการทำงาน) โดยการปรับใช้ ดูว่าประสิทธิภาพหรือความน่าเชื่อถือเปลี่ยนแปลงไปอย่างไรระหว่างการปรับใช้ ทำให้เป็นข้อมูลที่เป็นประโยชน์มากขึ้นในการค้นหาว่าการเปลี่ยนแปลงใดจะทำให้เกิดจุดบกพร่องใหม่
ถัดไป:เครื่องมือวัดและการตรวจสอบแบบกำหนดเองสำหรับแอป Ruby
โพสต์นี้แสดงให้เห็นว่าคุณสามารถตั้งค่าและใช้ AppSignal ในแอปพลิเคชันของคุณได้อย่างไรเพื่อช่วยเพิ่มการมองเห็นโค้ดของคุณในป่า
เราได้สาธิตวิธีที่ AppSignal รวมเข้ากับ Rails และการขึ้นต่อกันของแอปพลิเคชัน เช่น Sidekiq และ Puma โดยอัตโนมัติ AppSignal ใช้งานได้กับเฟรมเวิร์ก Ruby และอัญมณีอีกมากมายที่พร้อมใช้งานทันที คุณสามารถดูรายการการผสานการทำงาน Ruby ของ AppSignal ทั้งหมดได้ที่นี่
ส่วนที่ 2 ของซีรีส์นี้จะกล่าวถึงวิธีการเพิ่มเครื่องมือและการตรวจสอบแบบกำหนดเองในแอปพลิเคชัน Ruby on Rails ของคุณเพื่อข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้น
จนกว่าจะถึงครั้งต่อไป!
ป.ล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่ออกจากสื่อ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว!