Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ตรวจสอบการโหลด MongoDB (แบบสอบถาม) ด้วย Custom Metrics

บางครั้งเครื่องมือวัดมาตรฐานอาจไม่เพียงพอที่จะติดตามสาเหตุที่แท้จริงของปัญหาด้านประสิทธิภาพ เมตริกที่กำหนดเองช่วยให้เราติดตามชิ้นส่วนที่ขาดหายไปได้

ขอบคุณกราฟประสิทธิภาพของ AppSignal เราทราบดีว่าส่วนใดของโค้ดเบสที่ทำให้เกิดปัญหาด้านประสิทธิภาพ ในภาพหน้าจอด้านล่าง คุณจะเห็นว่าเรามีการชะลอตัวอย่างรุนแรงเนื่องจาก MongoDB:

สิ่งที่มันไม่ได้บอกเราคือ อันไหน ของฐานข้อมูลจำนวนมากที่ทำงานบน ReplicaSets ที่แตกต่างกันทำให้เกิดการชะลอตัวนี้ เมื่อใช้แพลตฟอร์ม Custom Metrics ของเรา เราสามารถตอบคำถามนี้ได้อย่างรวดเร็ว

Mongo::การตรวจสอบ

ด้วยไดรเวอร์ 2.x Ruby ใหม่ mongo gem เปิดเผย API การตรวจสอบ เราใช้สิ่งนี้เพื่อติดตามทุกคำถามที่ส่งไปยังฐานข้อมูล

นี่คือคลาสสมาชิกที่ใช้วิธีการที่จำเป็นสามวิธี (เริ่มต้น สำเร็จ และล้มเหลว) และส่งข้อมูลไปยัง 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
)

แดชบอร์ดเมตริกที่กำหนดเอง

ขณะนี้ เรากำลังส่งเมตริกเหล่านี้ไปยัง AppSignal เราต้องสร้างแดชบอร์ดเพื่อแสดงภาพเมตริก มาสร้างกราฟสองกราฟ กราฟหนึ่งสำหรับการนับการสืบค้น และอีกกราฟสำหรับระยะเวลาการสืบค้นโดยเฉลี่ย:

- 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

เราใช้ filter คีย์เพื่อให้ Regex ที่ตรงกับระยะเวลาการสืบค้นที่เราได้ส่งไปยัง AppSignal

ผลลัพธ์

ตอนนี้เราติดตามจำนวน/ระยะเวลาการสืบค้นแต่ละรายการ และมีแดชบอร์ดพร้อมแล้ว และสามารถดูว่าฐานข้อมูลใดทำให้เกิดกราฟประสิทธิภาพของเราเพิ่มขึ้นอย่างรวดเร็ว:

นี่เป็นหนึ่งในตัวอย่างมากมายที่การใช้เมตริกที่กำหนดเองช่วยให้ได้รับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับประสิทธิภาพโดยรวมของแอปพลิเคชัน (และของคุณ!) ของเรา

หากคุณต้องการทดลองใช้เมตริกที่กำหนดเอง หรือต้องการความช่วยเหลือในการระบุและติดตามเมตริกที่มีค่า โปรดแจ้งให้เราทราบ