Trong hướng dẫn này, chúng tôi sẽ khai thác AppSignal để phát hiện, chẩn đoán và loại bỏ các tắc nghẽn về hiệu suất cũng như sử dụng tính năng theo dõi thích hợp trong ứng dụng Ruby on Rails. Từ việc thiết lập tính năng theo dõi đến phát hiện lỗi và ghi nhật ký, chúng tôi đều hỗ trợ bạn.
Chúng tôi sẽ đảm bảo ứng dụng của chúng tôi chạy mượt mà hơn bao giờ hết, ngay cả khi tải nặng nhất!
Nhưng trước tiên, hãy nhanh chóng tìm hiểu cách xác định việc theo dõi và lợi ích của nó.
Truy tìm là gì?
Truy tìm là quá trình thực hiện theo yêu cầu và thao tác thông qua một ứng dụng. Trong các ứng dụng Ruby, tính năng theo dõi ghi lại luồng thực thi, cung cấp thông tin chuyên sâu về hiệu suất của nhiều thành phần khác nhau.
Lợi ích của việc truy tìm
Việc truy tìm có một số lợi ích, bao gồm:
- Tối ưu hóa hiệu suất :Truy tìm xác định các phần chậm của ứng dụng cần cải thiện hiệu suất.
- Gỡ lỗi tốt hơn :Dấu vết chi tiết cho phép bạn nhanh chóng xác định các vấn đề về mã và xác định nguyên nhân của chúng.
- Độ tin cậy được cải thiện :Truy tìm dấu vết hành vi của ứng dụng, đảm bảo hệ thống hoạt động hiệu quả và đáng tin cậy hơn.
Tình huống:Ứng dụng Rails bị tụt hậu của chúng tôi
Giả sử hôm nay là Thứ Sáu Đen, ngày mua sắm lớn nhất trong năm. Nền tảng thương mại điện tử dựa trên Rails của bạn đang thu hút hàng nghìn khách hàng háo hức, giỏ hàng của họ chứa đầy sản phẩm, sẵn sàng thanh toán. Mọi thứ dường như hoàn hảo — cho đến khi hệ thống bắt đầu bị lag.
Giao dịch thất bại. Những chiếc xe bị bỏ rơi tăng vọt. Sự hoảng loạn xảy ra sau đó. Đây là cơn ác mộng của mọi nhà phát triển. Nhưng nếu bạn có vũ khí bí mật thì sao? Một công cụ không chỉ cảnh báo bạn về các vấn đề trong thời gian thực mà còn đi sâu vào trọng tâm ứng dụng của bạn, truy tìm mọi yêu cầu, mọi truy vấn cơ sở dữ liệu và mọi công việc nền? Nhập AppSignal .
Cách thiết lập tính năng theo dõi cho ứng dụng Ruby on Rails bằng AppSignal
Để chứng minh sức mạnh của việc theo dõi bằng AppSignal, tôi đã tạo một dự án thương mại điện tử Rails mẫu mà chúng tôi có thể tích hợp với AppSignal. Điều này sẽ giúp bạn trực tiếp thấy được cách truy tìm có thể xác định và giải quyết những vấn đề này.
Điều kiện tiên quyết
- Phiên bản Ruby :AppSignal tương thích với Ruby 2.5 trở lên.
- Tài khoản AppSignal :Tạo tài khoản trên AppSignal (có bản dùng thử miễn phí)
Bây giờ bạn đã sẵn sàng thiết lập theo dõi trong ứng dụng Ruby của mình bằng AppSignal.
Bước 1:Cài đặt AppSignal Gem
Đây là viên ngọc quý:
Chỉ cần chạy bundle install :
Bước 2:Khởi tạo AppSignal
Chạy lệnh cài đặt AppSignal để thiết lập các tệp cấu hình cần thiết.
Làm theo lời nhắc trên thiết bị đầu cuối của bạn. Bạn có thể chọn tệp cấu hình hoặc biến môi trường để định cấu hình AppSignal trong ứng dụng của mình. Chúng ta sẽ chọn tùy chọn file config.
Lệnh này sẽ tạo ra một appsignal.yml tệp cấu hình trong thư mục cấu hình của bạn. Tệp này sẽ được điền sẵn khóa API đẩy AppSignal và một số cài đặt cấu hình cơ bản.
Bước 3:Định cấu hình AppSignal
Đảm bảo config/appsignal.yml được cấu hình đúng cho môi trường của bạn. Tệp này chứa các cài đặt cấu hình cho các môi trường khác nhau (phát triển, thử nghiệm, sản xuất). Bỏ qua những hành động mang lại ít giá trị.
Và ta da! Bạn đã thiết lập xong:

Thiết bị ứng dụng Ruby on Rails của chúng tôi
AppSignal có thể tự động thiết lập một số thành phần chính của ứng dụng Rails của chúng tôi, chẳng hạn như truy vấn cơ sở dữ liệu và yêu cầu web. Chúng tôi cũng có thể thêm công cụ tùy chỉnh để theo dõi các phần cụ thể trong ứng dụng của mình.
Thiết bị đo đường ray tùy chỉnh
Để điều chỉnh các phần cụ thể trong mã của chúng tôi, chúng tôi sẽ gói một vài dòng mã bằng Appsignal.instrument phương pháp. Phương pháp này có thể được sử dụng để theo dõi các khối mã cụ thể, chẳng hạn như các phần phức tạp hơn của hành động của bộ điều khiển hoặc công việc nền.
Việc gửi yêu cầu đến điểm cuối này sẽ dẫn đến truy vấn N+1 được báo cáo.
Sự cố N+1 xảy ra khi ứng dụng của chúng tôi thực hiện nhiều truy vấn cơ sở dữ liệu để tải các bản ghi liên quan cho từng đối tượng trong một bộ sưu tập, thay vì sử dụng một truy vấn hiệu quả duy nhất. Điều này có thể làm giảm đáng kể hiệu suất, đặc biệt là khi xử lý các tập dữ liệu lớn.
Cách khắc phục trong trường hợp này là tải nhanh truy vấn nhận tất cả đơn hàng — chỉ cần thay thế mã này:
Với những điều sau đây:
Thu thập và báo cáo lỗi Ruby bằng AppSignal
AppSignal cho phép bạn nắm bắt và báo cáo lỗi ứng dụng bằng Appsignal.set_error phương pháp.
Dưới đây là ví dụ về việc nắm bắt và báo cáo lỗi trong hành động chỉ mục của bộ điều khiển đơn hàng:
Trong ví dụ này, chúng tôi trình bày cách xử lý lỗi tùy chỉnh trong một hành động cụ thể của bộ điều khiển. Tuy nhiên, điều quan trọng cần lưu ý là AppSignal báo cáo lỗi theo mặc định, vì vậy việc báo cáo lỗi rõ ràng bằng Appsignal.set_error thường không cần thiết.
Để xử lý lỗi nhất quán và tập trung trên tất cả các hành động của bộ điều khiển, bạn nên sử dụng rescue_from ở cấp độ điều khiển. Cách tiếp cận này đảm bảo rằng mọi trường hợp ngoại lệ chưa được xử lý trong hành động của bộ điều khiển của bạn đều được báo cáo và quản lý đúng cách.
Sau đây là ví dụ về cách bạn có thể triển khai điều này:
Về Lỗi> Danh sách vấn đề tab, chúng ta có thể xem danh sách tất cả các lỗi, trạng thái của từng vấn đề và lỗi đã xảy ra cách đây bao lâu:

Nhấp vào RuntimeError , chúng ta có thể thấy nhật ký lỗi và dòng mã gây ra lỗi này:

Hãy đề cập đến một số kỹ thuật theo dõi nâng cao hơn trước khi chúng ta kết thúc.
Kỹ thuật truy tìm nâng cao
Chúng tôi sẽ triển khai một số kỹ thuật theo dõi nâng cao trên điểm cuối đặt hàng của ứng dụng thương mại điện tử của chúng tôi.
Những kỹ thuật này sẽ giúp chúng tôi quản lý môi trường có lưu lượng truy cập cao một cách hiệu quả, đảm bảo quyền riêng tư của dữ liệu và quyền truy cập an toàn vào dữ liệu theo dõi.
Các trường hợp sử dụng lưu lượng truy cập cao
Trong môi trường thông lượng cao, việc thu thập dữ liệu theo dõi cho mọi yêu cầu có thể dẫn đến chi phí đáng kể. Việc lấy mẫu giúp giảm thiểu điều này bằng cách chỉ thu thập dữ liệu theo dõi cho một tập hợp con các yêu cầu.
Thêm siêu dữ liệu vào giao dịch
Bạn có thể cung cấp thêm ngữ cảnh về lỗi và vấn đề hiệu suất bằng cách sử dụng thẻ và dữ liệu mẫu. Điều này có thể giúp thêm thông tin chưa có trong tham số yêu cầu, phiên hoặc môi trường. Đọc thêm về cách chuyển và thêm siêu dữ liệu bổ sung.
Xử lý không đồng bộ
Xử lý không đồng bộ là một kỹ thuật phổ biến được sử dụng để xử lý các tác vụ quá tốn thời gian để thực hiện trong chu trình phản hồi yêu cầu, chẳng hạn như gửi email, xử lý công việc nền và xử lý nhập dữ liệu lớn. Các ứng dụng Ruby on Rails thường sử dụng các thư viện công việc nền như Sidekiq, Resque hoặc Delayed Job để quản lý các tác vụ này.
AppSignal tích hợp liền mạch với các thư viện như Active Job, DelayedJob, Shoryuken, Sidekiq và Que để cung cấp thông tin chi tiết về hiệu suất cũng như lỗi của các công việc nền của bạn.
Cân nhắc về bảo mật
Bảo mật là một phần rất quan trọng của bất kỳ ứng dụng sẵn sàng sản xuất nào. Chúng tôi cần đảm bảo rằng dữ liệu nhạy cảm không được đưa vào dữ liệu theo dõi để duy trì quyền riêng tư của người dùng. Giá trị của tham số bộ lọc sẽ được thay thế bằng [FILTERED] khi được truyền tới AppSignal.
Hãy sửa đổi config/appsignal.yml để bao gồm một số thông số yêu cầu nhạy cảm cần được che giấu.
Nếu bạn sử dụng Rails filter_parameters config, AppSignal sẽ hợp nhất cấu hình của nó với cấu hình của Rails, do đó không cần phải định cấu hình hai lần.
Bằng cách triển khai các kỹ thuật theo dõi nâng cao này, bạn có thể quản lý hiệu quả các môi trường có lưu lượng truy cập cao và đảm bảo quyền riêng tư của dữ liệu nhạy cảm. Đọc thêm về các tham số bộ lọc.
Kết thúc
Chúng tôi đã thấy rằng việc thiết lập tính năng theo dõi cho ứng dụng Ruby bằng AppSignal bao gồm việc hiểu các nguyên tắc cơ bản về theo dõi, chuẩn bị ứng dụng của bạn và tuân theo quy trình thiết lập từng bước. Sau đó, các phương pháp nâng cao và kỹ thuật gỡ lỗi có thể được sử dụng để nâng cao khả năng theo dõi.
Việc thường xuyên áp dụng tính năng theo dõi trong các chu kỳ phát triển và bảo trì sẽ mang lại hiệu suất và độ tin cậy cao hơn. Hãy bắt đầu với AppSignal ngay hôm nay để nâng cao khả năng giám sát và hiểu biết sâu sắc về hiệu suất trong các ứng dụng Ruby của bạn.
Chúc bạn viết mã vui vẻ!
Daniel Amah
Tác giả khách mời của chúng tôi, Daniel là Kỹ sư phần mềm chính và Người sáng lập kỹ thuật với hơn một thập kỷ kinh nghiệm xây dựng các nền tảng web và di động có thể mở rộng bằng cách sử dụng các kiến trúc Ruby on Rails, React và AI. Anh ấy là người tạo ra Taskclan và thường xuyên viết về khả năng lãnh đạo kỹ thuật, quy trình làm việc của nhà phát triển và quá trình triển khai khởi nghiệp trên Medium và LinkedIn.
Tất cả bài viết của Daniel Amah