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

Theo dõi tải MongoDB (truy vấn) bằng các Chỉ số tùy chỉnh

Đôi khi thiết bị đo tiêu chuẩn không đủ để theo dõi nguyên nhân gốc rễ của vấn đề hiệu suất. Các chỉ số tùy chỉnh giúp chúng tôi theo dõi các phần còn thiếu.

Nhờ biểu đồ hiệu suất của AppSignal, chúng tôi biết chính xác phần nào trong cơ sở mã của chúng tôi gây ra các vấn đề về hiệu suất. Trong ảnh chụp màn hình bên dưới, bạn có thể thấy chúng tôi đã bị chậm nghiêm trọng do MongoDB:

Những gì nó không cho chúng ta biết là cái nào trong số rất nhiều cơ sở dữ liệu chạy trên các ReplicaSets khác nhau đã gây ra sự chậm chạp này. Sử dụng nền tảng Số liệu tùy chỉnh của chúng tôi, chúng tôi có thể trả lời câu hỏi này trong nháy mắt.

Mongo ::Giám sát

Với trình điều khiển Ruby 2.x mới, mongo gem cho thấy một API giám sát. Chúng tôi sử dụng điều này để theo dõi mọi truy vấn được gửi đến cơ sở dữ liệu.

Đây là lớp người đăng ký thực hiện ba phương thức bắt buộc (bắt đầu, thành công và không thành công) và gửi dữ liệu đến AppSignal:

# config/initializers/mongo_command_subscriber.rb
class MongoComandSubscriber
  VALID_DATABASES = Mongoid.clients.map { |k,v| v['database']}
 
  def started(event)
  end
 
  def failed(event)
    finished(event)
  end
 
  def succeeded(event)
    finished(event)
  end
 
  def finished(event)
    database = event.database_name
    duration = event.duration
    return unless VALID_DATABASES.include?(database)
 
    Appsignal.increment_counter("query_count.#{database}", 1)
    Appsignal.add_distribution_value("query_duration.#{database}", duration)
  end
end
 
# Subscribe to all COMMAND queries with our subscriber class
Mongo::Monitoring::Global.subscribe(
  Mongo::Monitoring::COMMAND,
  MongoComandSubscriber.new
)

Trang tổng quan về Chỉ số tùy chỉnh

Bây giờ chúng tôi đang gửi các số liệu này đến AppSignal, chúng tôi phải tạo một trang tổng quan để trực quan hóa các số liệu. Hãy tạo hai biểu đồ, một cho số lượng truy vấn và một cho thời lượng truy vấn trung bình:

- title: "MongoDB Query Load"
  graphs:
    - title: "Database Query count"
      kind: count
      filter: "query_count/*"
      format: number
    - title: "Database average query duration"
      kind: measurement
      filter: "query_duration/*"
      format: duration

Chúng tôi sử dụng filter để cung cấp một Regex phù hợp với bất kỳ thời lượng truy vấn nào mà chúng tôi đã gửi đến AppSignal.

Kết quả

Giờ đây, chúng tôi theo dõi số lượng / thời lượng truy vấn riêng lẻ và có một trang tổng quan, đồng thời có thể xem cơ sở dữ liệu nào đã gây ra mức tăng đột biến trong biểu đồ hiệu suất của chúng tôi:

Đây là một trong nhiều ví dụ trong đó việc sử dụng Số liệu tùy chỉnh giúp hiểu rõ hơn về hiệu suất tổng thể của ứng dụng của chúng tôi (và của bạn!).

Nếu bạn muốn dùng thử các Chỉ số tùy chỉnh hoặc cần trợ giúp trong việc xác định và theo dõi các chỉ số có giá trị, chỉ cần cho chúng tôi biết.