Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Theo dõi tải truy vấn MongoDB với Custom Metrics để có insight hiệu suất chính xác

Đôi khi instrumentation tiêu chuẩn không đủ để tìm nguyên nhân gốc rễ của vấn đề hiệu suất. Custom metrics giúp theo dõi những mảnh ghép còn thiếu.

Nhờ biểu đồ hiệu suất AppSignal, chúng ta biết chính xác phần nào trong codebase gây chậm. Trong ảnh chụp màn hình dưới, bạn thấy slowdown nghiêm trọng do MongoDB:

Nhưng nó không nói database nào trong nhiều database chạy trên ReplicaSets khác nhau gây slowdown. Dùng platform Custom Metrics, ta trả lời câu hỏi này chỉ cần liếc mắt.

Mongo::Monitoring

Với driver Ruby 2.x mới, gem mongo cung cấp monitoring API. Chúng ta dùng để theo dõi mọi truy vấn gửi đến database.

Dưới đây là class subscriber triển khai ba phương thức bắt buộc (started, succeeded, failed) 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 )

Dashboard Custom Metrics

Giờ gửi metrics đến AppSignal, cần tạo dashboard để visualize. Tạo hai graph: một cho query count, một cho average query duration:

- 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

Dùng key filter cung cấp Regex khớp bất kỳ query duration nào gửi đến AppSignal.

Kết quả

Giờ theo dõi từng query count/duration và có dashboard, có thể thấy database nào gây spike trong biểu đồ hiệu suất:

Đây là một trong nhiều ví dụ Custom Metrics giúp có insight sâu hơn về hiệu suất tổng thể của ứng dụng (của chúng ta và của bạn!).

Nếu muốn thử Custom Metrics, hoặc cần giúp xác định và theo dõi metrics giá trị, cứ cho chúng tôi biết.