Computer >> Máy Tính >  >> Lập trình >> Ruby

Dữ liệu giám sát cấu trúc trong các ứng dụng nguyên khối có không gian tên

Không gian tên là gì?

Mọi thứ xảy ra trong một ứng dụng do AppSignal giám sát đều được ghi lại trong một không gian tên. Không gian tên hoạt động giống như các thư mục, nhóm các sự kiện, sự cố và dữ liệu giám sát thành các phần có thể quản lý được.

Theo mặc định, mọi ứng dụng bắt đầu với ba không gian tên mặc định:web , backgroundfrontend .

  • Không gian tên web chứa tất cả các yêu cầu HTTP của bạn. Trong các khuôn khổ hướng MVC như Rails hoặc Sinatra, điều này bao gồm các hành động của bộ điều khiển.
  • Không gian tên nền chứa hoạt động từ các công việc nền, thư viện và nhiệm vụ.
  • Không gian tên giao diện người dùng ghi lại các sự kiện được gửi bởi AppSignal để tích hợp JavaScript.

AppSignal lập bản đồ các sự kiện đến bằng cách sử dụng các quy tắc tích hợp và mỗi ứng dụng được tích hợp sẵn. Tuy nhiên, bạn có thể thay đổi các ánh xạ này bất kỳ lúc nào và thậm chí tạo không gian tên mới để tạo mô hình cấu trúc ứng dụng của bạn.

Thử không gian tên trong Ruby

Hãy thử không gian tên trên ứng dụng Ruby on Rails (ROR). Sau khi tạo một dự án Rails mới với rails new và thiết lập tích hợp đường ray, bạn sẽ tìm thấy web không gian tên trong trang tổng quan của bạn.

AppSignal hiển thị không gian tên ngay khi nó nhận được các giao dịch từ bất kỳ bộ điều khiển nào.

Phần còn lại của không gian tên mặc định sẽ không xuất hiện cho đến khi có một số hoạt động trong đó. Hãy thêm một cái gì đó vào không gian tên nền để làm cho mọi thứ thú vị hơn. Đây là cách trang tổng quan trông như thế nào sau khi thêm Sidekiq vào dự án (kiểm tra mã trong kho lưu trữ ví dụ).

AppSignal chỉ định hành động cho không gian tên nền vì nó nhận ra Sidekiq như một bộ xử lý công việc. AppSignal tích hợp với hầu hết các bộ xử lý nền phổ biến hiện có, nhưng nếu bộ xử lý của bạn bị bỏ qua, bạn luôn có thể thêm thiết bị đo đạc vào công việc của mình theo cách thủ công.

Tạo không gian tên tùy chỉnh

Trên các ứng dụng nguyên khối lớn, không gian tên mặc định có thể cảm thấy quá chung chung. Một trang web lớn thường cung cấp nội dung tĩnh, trang động, điểm cuối API, trong số các dịch vụ web khác. Hầu hết điều này sẽ kết thúc trên web không gian tên.

Ngoài ra, mỗi phần của ứng dụng có một mức độ ưu tiên khác nhau. Sự cố trang đăng nhập cấp bách hơn nhiều so với sự cố trong bảng quản trị nội bộ. Tuy nhiên, AppSignal xử lý tất cả các vấn đề trong một không gian tên như nhau. Khi có nhiều hoạt động, có thể khó xác định các vấn đề quan trọng nhất.

Vì vậy, chúng ta nên tổ chức không gian tên theo mức độ ưu tiên và lĩnh vực trách nhiệm. Sau đó, chúng tôi có thể đính kèm các chính sách thông báo riêng biệt và chỉ cảnh báo cho các bên quan tâm. Theo lý luận này, chúng tôi có thể tạo không gian tên tùy chỉnh cho login_page , api_endpointsadmin_panel .

Để tạo một không gian tên mới trong Ruby, chúng tôi sẽ sử dụng Appsignal.set_namespace . Hãy xem đoạn mã sau, mã này sẽ tạo một công việc trong không gian tên có tên là urgent_background :

class FetchPricesWorker
    include Sidekiq::Worker
 
    def perform
        Appsignal.set_namespace("urgent_background")
 
        # worker code ...
 
    end
end

Sau khi chúng tôi thực hiện thay đổi này và khởi động lại ứng dụng, các công việc mới này sẽ xuất hiện trong vùng tên mới được tạo:

Chúng tôi có thể xác nhận rằng công việc thực tế đã được ghi lại bằng cách kiểm tra tên hành động trong trang tổng quan:

Không gian tên tùy chỉnh cũng hoạt động trong tất cả các tích hợp.

Bỏ qua Không gian tên

Một lợi ích khác của không gian tên tùy chỉnh là chúng cho phép chúng tôi bỏ qua các sự kiện từ các phần của ứng dụng mà chúng tôi không quan tâm. Ví dụ:chúng tôi có thể chọn bỏ qua các sự kiện từ admin_panel hoàn toàn.

Bỏ qua một vùng tên cần thực hiện ba bước:

  1. Gán những phần mà chúng tôi không muốn giám sát cho một vùng tên tùy chỉnh.
  2. Định cấu hình tích hợp để bỏ qua không gian tên.
  3. Khởi động lại ứng dụng của bạn.

Đối với Ruby, hãy thêm tùy chọn ignore_namespaces trong tệp cấu hình AppSignal:

production:
  ignore_namespaces:
    - "admin_panel"

Bỏ qua không gian tên sẽ bỏ qua tất cả dữ liệu giao dịch và mở rộng tại nguồn. Dữ liệu chỉ số tùy chỉnh vẫn được báo cáo.

Tích hợp Elixir và JavaScript có các tùy chọn tương tự. Để biết thêm chi tiết, hãy xem hướng dẫn bỏ qua không gian tên.

Không gian tên cho các ứng dụng nguyên khối

Bây giờ chúng ta đã biết cách không gian tên hoạt động, hãy xem xét một số cách chúng ta có thể sử dụng chúng để phân vùng một ứng dụng nguyên khối.

Mặc dù không có quy tắc thiết lập nào, nhưng việc phân vùng có hai chiến lược. Bạn có thể chọn một trong số chúng hoặc kết hợp cả hai làm điểm khởi đầu:

  • Theo vai trò :chúng tôi gán không gian tên cho các đơn vị chức năng hoặc logic trong dự án. Do đó, chúng tôi có thể thấy hợp lý khi xác định không gian tên chẳng hạn như billing , sign_in hoặc sign_up , admin_panelhomepage . Nhìn lướt qua bảng điều khiển AppSigal và bạn sẽ hiểu điều gì đang diễn ra trong từng phần của ứng dụng. Cách tiếp cận này hoạt động hiệu quả khi mã có thể được chia nhỏ theo ranh giới rõ ràng.
  • Theo mức độ nghiêm trọng :ở đây chúng tôi sử dụng không gian tên như một thiết bị ưu tiên. Tùy bạn thiết lập phần nào của mã critical , critical , medium hoặc low . Cách tiếp cận này cho phép bạn xác định ngay những vấn đề bạn muốn giải quyết trước tiên.

Giả sử rằng chúng ta có một bộ điều khiển xử lý việc đăng nhập và đăng ký của người dùng. Khi chọn phân vùng theo vai trò, chúng tôi có thể ánh xạ chúng tới user_login không gian tên.

# in Rails we use before_action callback to change
# the namespace before the request starts
class LoginController < ApplicationController
    before_action :set_appsignal_namespace
 
    def set_appsignal_namespace
        # Sets the namespace
        Appsignal.set_namespace("user_login")
    end
 
    # controller actions ...
end

Nhưng nếu bạn thích sử dụng không gian tên ưu tiên, một người kiểm soát phụ trách thanh toán có thể sẽ đi vào critical không gian tên.

class BillingPageController < ApplicationController
    before_action :set_appsignal_namespace
 
    def set_appsignal_namespace
        Appsignal.set_namespace("critical")
    end
end

Các bộ điều khiển kế thừa từ những bộ điều khiển này chia sẻ cùng một không gian tên với cha mẹ của chúng:

# any controllers that inherit from LoginController
# are also part of the "user_login" namespace
class RegistrationController < LoginController
 
    # there’s no need for before_action here
    # this controller already reports to the parent’s namespace
 
end

Như chúng ta đã thấy, các công việc và nhiệm vụ được tự động gán cho background không gian tên. Bất cứ khi nào có thể, chúng ta nên phân công chúng thành những cái cụ thể hơn. Ví dụ:công việc dọn dẹp cơ sở dữ liệu có thể đi vào cơ sở dữ liệu database không gian tên, như thế này:

class ActiveJobDatabaseCleanupJob < ActiveJob::Base
  queue_as :default
 
  def perform(argument = nil, options = {})
    Appsignal.set_namespace("database")

Ưu tiên cũng có tác dụng đối với công việc. Chúng tôi có thể gán các nhiệm vụ không quan trọng cho low chẳng hạn như trong tác vụ Rake này:

task :unimportant_job do
 
  # Run this rake job in the low namespace
  Appsignal.set_namespace("low")
 
  # job code ...
 
end

Trong một số trường hợp, bạn sẽ muốn ghi lại các hành động bằng giao dịch thủ công. Bạn có thể xác định không gian tên trong khi tạo nó, như trong ví dụ sau, mã này mã hóa công việc bưu phẩm tùy chỉnh:

class Job
    def perform
 
        # Create a transaction for this job and set the namespace
        transaction = Appsignal::Transaction.create(
            SecureRandom.uuid,
            "mailer",
            Appsignal::Transaction::GenericRequest.new(ENV.to_hash)
        )
 
        # job code ...
 
    end
end

Không gian tên và thông báo

Không phải tất cả mọi người trong nhóm đều cần được thông báo về mọi vấn đề. Các chuyên gia giao diện người dùng không quan tâm đến công việc nền nhiều như các nhà phát triển phụ trợ. Tuy nhiên, họ có thể muốn biết khi có sự cố trong phần phụ trợ. Các nhà phát triển phụ trợ chắc chắn sẽ muốn được thông báo về các vấn đề hiệu suất trên web không gian tên. Không gian tên cho phép chúng tôi định tuyến thông báo đến đúng người.

Thiết lập trình thông báo vùng tên riêng

Chúng tôi có thể tạo các nhóm thông báo chỉ hoạt động cho các không gian tên cụ thể. Ví dụ:chúng tôi có thể gửi email về các lỗi trong web không gian tên hoặc gửi tin nhắn vào kênh #frontend Slack để biết các sự cố trong frontend không gian tên.

Để tạo nhóm thông báo cho mỗi vùng tên, đi tới Cài đặt ứng dụng> Thông báo> Trình thông báo và nhấp vào Thêm tích hợp .

Chọn một trong các tích hợp và nhập tên của nó. Chọn loại tin nhắn để gửi và không gian tên. Ví dụ:hãy tạo thông báo Slack cho #frontend kênh.

Trong khi chúng tôi vẫn ở đây, hãy tạo thông báo thứ hai cho các nhà phát triển chương trình phụ trợ:

Bạn có thể định cấu hình số lượng thông báo cần thiết để giúp nhóm luôn cập nhật mọi thứ đang diễn ra.

Thay đổi thông báo về vùng không gian tên

Khi sự cố được tạo ra, AppSignal sẽ áp dụng chính sách thông báo. Chính sách này dựa trên không gian tên mà lỗi xuất phát từ. Chúng tôi có thể xác định các chính sách riêng biệt cho từng vùng tên.

Để xem mặc định không gian tên cho ứng dụng của bạn, hãy đi tới Cài đặt ứng dụng> Thông báo> Mặc định không gian tên .

Tại đây, bạn sẽ tìm thấy các tùy chọn để tùy chỉnh thông báo lỗi và hiệu suất cho mọi vùng tên:

  • Mọi lần xuất hiện :gửi thông báo mỗi khi sự cố được kích hoạt, với thời gian hồi là 5 phút.
  • Đầu tiên khi triển khai :thông báo cho bạn về lỗi đầu tiên sau khi triển khai ứng dụng.
  • Đầu tiên sau khi đóng :gửi thông báo lần đầu tiên một vấn đề đã đóng được mở lại.
  • Không bao giờ thông báo :tắt hoàn toàn thông báo.

Tạo trình kích hoạt vùng tên riêng

Các trình kích hoạt yêu cầu AppSignal tạo ra một sự cố và gửi thông báo khi một chỉ số vượt qua hoặc thấp hơn một giá trị được xác định trước. Vì các phần khác nhau của ứng dụng có thể có các ngưỡng khác nhau, chúng ta nên tạo các trình kích hoạt riêng biệt cho từng không gian tên. Ví dụ cổ điển là một trình kích hoạt cảnh báo chúng tôi khi thông lượng quá thấp trong web không gian tên.

Để tạo trình kích hoạt, hãy chuyển đến Phát hiện bất thường> Trình kích hoạt và nhấp vào Thêm trình kích hoạt đầu tiên của bạn .

Chọn loại trình kích hoạt Hành động trên menu bên trái và chọn không gian tên có liên quan. Sau đó, đặt các ngưỡng kích hoạt cảnh báo.

Tại đây bạn cũng có thể xác định nhóm nào sẽ được thông báo. Để hoàn tất, hãy nhấp vào Lưu trình kích hoạt .

Kết luận

Không gian tên có ý nghĩa về dữ liệu giám sát ứng dụng của bạn. Chúng cũng không thể thiếu để kích hoạt thông báo và sự cố ở mức độ chi tiết, hạn chế nhiễu và tránh xác thực sai.

Sau khi kiểm tra cách không gian tên tùy chỉnh hoạt động trên Ruby, Node.js và Elixir, hãy đọc phần tiếp theo để tiếp tục tìm hiểu cách sử dụng không gian tên:

  • Không gian tên trong AppSignal
  • Nhóm với không gian tên
  • Sự khác biệt giữa Giám sát Webhooks và Công việc Nền
  • Gem 2.2 - Không gian tên tùy chỉnh!