Sentry for Rails

Đặt vấn đề

Trong quá trình phát triển web, không tránh khỏi việc ứng dụng của chúng ta xảy lỗi hệ thống.Mỗi lỗi hệ thống, crash, hoặc sự cố có thể gây ra tác động nghiêm trọng đến trải nghiệm người dùng và ảnh hưởng đến hiệu suất của ứng dụng. Sentry là một lựa chọn có thể giúp chúng ta kiểm soát tình hình và quản lý các lỗi hệ thống này một cách hiệu quả.

Giới thiệu Sentry

Sentry là một dịch vụ giám sát lỗi và hiểu lỗi phát triển dành cho các ứng dụng web và di động. Sentry giúp các nhà phát triển theo dõi và kiểm soát lỗi trong ứng dụng của họ để cải thiện chất lượng và hiệu suất của ứng dụng. Dưới đây là một số điểm quan trọng về Sentry:

  1. Giám sát Lỗi (Error Monitoring): Sentry thu thập thông tin về lỗi và sự cố trong ứng dụng và hiển thị chúng trong một giao diện quản trị để giúp bạn dễ dàng theo dõi và quản lý lỗi.
  2. Ghi Log (Logging): Ngoài việc giám sát lỗi, Sentry cũng hỗ trợ ghi log để giúp bạn theo dõi và hiểu hơn về hoạt động của ứng dụng.
  3. Integrations: Sentry có khả năng tích hợp với nhiều ngôn ngữ lập trình và framework phổ biến như JavaScript, Python, Ruby, PHP, Java, và nhiều ứng dụng web framework khác.
  4. Tích hợp CICD: Sentry có thể tích hợp vào quy trình Continuous Integration và Continuous Deployment (CI/CD) để đảm bảo rằng lỗi không xuất hiện trong các phiên bản mới của ứng dụng.
  5. Thời gian thực (Real-Time): Sentry cung cấp thông tin về lỗi và sự cố trong thời gian thực, giúp bạn nhanh chóng phát hiện và giải quyết các vấn đề liên quan đến hiệu suất của ứng dụng.
  6. Cấu hình tùy chỉnh (Customization): Bạn có thể tùy chỉnh Sentry để phản ánh cơ cấu tổ chức và yêu cầu riêng của ứng dụng của bạn.

Sentry là một công cụ quan trọng trong việc quản lý và cải thiện chất lượng của ứng dụng, giúp đảm bảo rằng lỗi được xử lý một cách hiệu quả và không ảnh hưởng đến trải nghiệm người dùng.

Config Sentry cho Rails app

Đăng ký / Đăng nhập tại đây

Sau khi đăng nhập hãy tạo 1 project

Có thể thấy Sentry hỗ trợ rất nhiều ngôn ngữ và framework. Có một option Ruby nhưng option Rails sẽ hỗ trợ nhiều hơn và dễ sử dụng.

Sau khi tạo 1 sự án, Sentry sẽ cho chúng ta 1 hướng dẫn tích hợp Sentry vào Rails app như trên

Tiếp theo, setup cho source rails:


Add gem sentry-rubysentry-rails

Đừng quên chạy bundle install nhé 🤣🤣

#Gemfile
gem "sentry-ruby"
gem "sentry-rails"

Khởi tạo SDK với một số cấu hình cơ bản phục vụ cho việc tracking lỗi:

#config/initializers/sentry.rb
Sentry.init do |config|
  config.dsn = 'https://4506035982696448.ingest.sentry.io/....'
  config.send_default_pii = true
  config.include_local_variables = true
  config.breadcrumbs_logger = [:sentry_logger, :active_support_logger, :http_logger]

  filter = ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters)
  config.before_send = lambda do |event, hint|
    filter.filter(event.to_hash)
  end

  config.traces_sample_rate = 0.1
end

Ở trong phần configure này, các cấu hình có ý nghĩa sau:

config.dsnCấu hình Data Source Name (DSN) do Sentry cung cấp
config.send_default_piiĐặt giá trị này thành true để gửi thông tin cá nhân (PII – Personally Identifiable Information) mặc định với các báo cáo lỗi. Thông tin cá nhân bao gồm địa chỉ IP và thông tin người dùng. Có thể điều chỉnh cài đặt này để bảo vệ sự riêng tư của người dùng.
config.include_local_variablesĐặt giá trị này thành true để bao gồm các biến cục bộ (local variables) trong báo cáo lỗi. Cài đặt này giúp theo dõi giá trị của các biến tại thời điểm xảy ra lỗi.
config.breadcrumbs_loggerCấu hình loại logger mà Sentry sẽ sử dụng để ghi lại breadcrumbs. Trong trường hợp này, chỉ định ba loại logger: :sentry_logger, :active_support_logger, và :http_logger. Điều này có nghĩa là các breadcrumbs sẽ được ghi lại từ các sự kiện được ghi log bởi Sentry, Active Support, và HTTP.
config.before_sendĐây là một hàm lambda (anonymous function) được sử dụng để lọc dữ liệu trước khi nó được gửi đến Sentry. Trong trường hợp này, bạn sử dụng ActiveSupport::ParameterFilter để lọc các tham số cấu hình trong Rails để bảo vệ thông tin nhạy cảm trước khi gửi chúng đến Sentry.
config.traces_sample_rateĐây là tỷ lệ mẫu (sample rate) cho việc theo dõi và thu thập dữ liệu về hiệu suất (traces). Giá trị 1.0 có nghĩa là tất cả các traces sẽ được thu thập. Nếu muốn giảm tỷ lệ thu thập, có thể đặt giá trị này dưới 1.0.

Sau khi configure, hãy kiểm tra xem Sentry đã được tính hợp đúng trong ứng dụng của chúng ta chưa nhé!


Có thể tạo 1 Exception hoặc sử dụng rails console và chạy lệnh sau:

Sentry.capture_message("test message")

Kết quả Sentry trả về cho chúng ta một event tracking lỗi chứa một số thông tin như: thời gian, tên OS, môi trường, server name, message, vv…
như vậy có nghĩa là chúng ta đã tích hợp thành công Sentry vào Rails app

Các thông tin này sẽ được gửi lên server của Sentry và chúng ta có thể xem nó trên giao diện dasborad

Summary

Tóm tắt lại, trong bài viết này, chúng ta đã tìm hiểu về Sentry, một công cụ quan trọng trong quá trình phát triển ứng dụng Rails. Sentry không chỉ giúp theo dõi và ghi lại lỗi, mà còn cung cấp nhiều tính năng hữu ích khác để cải thiện chất lượng phần mềm.

Chúng ta đã xem xét cách tích hợp Sentry vào ứng dụng Rails, cấu hình gem, tùy chỉnh các cài đặt như gửi thông tin cá nhân, breadcrumbs, và lọc thông tin trước khi gửi đến Sentry.

Không chỉ với Ruby hay Rails, Sentry còn hỗ trợ hơn 85 Platforms khác nhau.
Tôi nghĩ trong vòng đời ứng dụng, việc tích hợp Sentry là càng sớm càng tốt

Tài liệu
https://docs.sentry.io/platforms/ruby/guides/rails/

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like