我目前正在编写一个轻便摩托车日志解析器,以便监控轻量级查询运行时。 它使用runtime参数对QUERY命令很有用,但是INSERT和UPDATE没有运行时参数。所有INSERT和UPDATE后跟一个包含运行时的 getLastError COMMAND。
以下是一些轻便摩托车原木样本:
运行时查询
MOPED: 127.0.0.1:27017 QUERY database=X collection=X selector=X
flags=[] limit=-1 skip=0 batch_size=nil fields=nil runtime: 0.6950ms
INSERT没有运行时但使用COMMAND
MOPED: 127.0.0.1:27017 INSERT database=X collection=X documents=X flags=[]
COMMAND database=X command={:getlasterror=>1, :w=>1}
runtime: 0.4750ms
我非常确定COMMAND运行时是针对getlasterror调用而不是针对我的INSERT调用。 那么有没有办法获得INSERT查询的运行时信息?
答案 0 :(得分:0)
我没有使用日志解析器,而是使用类似的东西,而且效果很好:
ActiveSupport::Notifications.subscribe('query.moped') do |name, start, finish, id, payload|
runtime = (finish - start)*1000
moped_ops = payload[:ops]
moped_ops.each do |op|
unless op.collection == '$cmd'
query = op.class.name.split('::').last.downcase
query = op.selector.first[0].to_s.gsub(/\$/, '') if query == 'command'
DO SOMETHING WITH #{op.database}.#{op.collection}.#{query}
end
end
end