บางครั้งเครื่องมือวัดมาตรฐานอาจไม่เพียงพอที่จะติดตามสาเหตุที่แท้จริงของปัญหาด้านประสิทธิภาพ เมตริกที่กำหนดเองช่วยให้เราติดตามชิ้นส่วนที่ขาดหายไปได้
ขอบคุณกราฟประสิทธิภาพของ 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
ผลลัพธ์
ตอนนี้เราติดตามจำนวน/ระยะเวลาการสืบค้นแต่ละรายการ และมีแดชบอร์ดพร้อมแล้ว และสามารถดูว่าฐานข้อมูลใดทำให้เกิดกราฟประสิทธิภาพของเราเพิ่มขึ้นอย่างรวดเร็ว:
นี่เป็นหนึ่งในตัวอย่างมากมายที่การใช้เมตริกที่กำหนดเองช่วยให้ได้รับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับประสิทธิภาพโดยรวมของแอปพลิเคชัน (และของคุณ!) ของเรา
หากคุณต้องการทดลองใช้เมตริกที่กำหนดเอง หรือต้องการความช่วยเหลือในการระบุและติดตามเมตริกที่มีค่า โปรดแจ้งให้เราทราบ