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

ติดตามโหลดคิวรี่ MongoDB ด้วย Custom Metrics เพื่อข้อมูลเชิงลึกด้านประสิทธิภาพที่แม่นยำ

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

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

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

Mongo::Monitoring

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

นี่คือ subscriber class ที่นำเมธอด์ที่จำเป็น 3 ตัว (started, succeeded, failed) มาใช้และส่งข้อมูลไป 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 ทุก COMMAND queries ด้วย subscriber class ของเรา Mongo::Monitoring::Global.subscribe( Mongo::Monitoring::COMMAND, MongoComandSubscriber.new )

แดชบอร์ด Custom Metrics

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

- 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

เราใช้ key filter เพื่อให้ Regex ที่จับคู่ query duration ใดๆ ที่เราส่งไป AppSignal

ผลลัพธ์

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

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

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