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

การตรวจสอบแอปพลิเคชัน Ruby on Rails ด้วย AppSignal

เมื่อเรียกใช้และบำรุงรักษาแอปพลิเคชันในสภาพแวดล้อมที่ใช้งานจริง เราต้องการรู้สึกมั่นใจเกี่ยวกับพฤติกรรมของแอปพลิเคชันและรู้ว่าเมื่อใดที่แอปพลิเคชันไม่ทำงานตามที่คาดไว้ อย่างน้อย เราต้องการติดตามข้อผิดพลาด ตรวจสอบประสิทธิภาพ และรวบรวมตัวชี้วัดเฉพาะตลอดทั้งแอปพลิเคชัน

เนื่องจากเราเป็นนักพัฒนาซอฟต์แวร์และชอบโซลูชันที่บำรุงรักษาได้ (ใช่ไหม) เราจึงไม่อยากจบลงด้วยเครื่องมือ การผสานรวม และการพึ่งพาที่ยุ่งเหยิงซึ่งทำให้เราติดตามทุกสิ่งได้ยากขึ้น

ในโพสต์นี้ เราจะเพิ่ม 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" ซึ่งจะมีขั้นตอนง่ายๆ ให้เราปฏิบัติตาม:

  1. เพิ่มอัญมณีลงใน Gemfile . ของคุณ

    # Gemfile
    gem 'appsignal'
  2. ติดตั้ง 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
  3. ติดตั้ง 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 ของเราและไม่พลาดแม้แต่โพสต์เดียว!