我有一个mongodb的日志文件。我想显示grep命令的所有输出大于或小于给定值“protocol:op_msg 523ms”
sed -n '/2022-09-15T12:26/,/2022-09-15T14:03/p' mongod.log| grep "op_msg 523ms"
日志文件输出:
7391:2022-11-22T09:23:23.047-0500 I COMMAND [conn26] command test.test appName: "MongoDB Shell" command: find { find: "test", filter: { creationDate: new Date(1663252936409) }, lsid: { id: UUID("7c1bb40c-5e99-4281-9351-893e3d23261d") }, $clusterTime: { clusterTime: Timestamp(1669126970, 1), signature: { hash: BinData(0, B141BFD0978167F8C023DFB4AB32BBB117B3CD80), keyId: 7136078726260850692 } }, $db: "test" } planSummary: COLLSCAN keysExamined:0 docsExamined:337738 cursorExhausted:1 numYields:2640 nreturned:1 queryHash:6F9DC23E planCacheKey:6F9DC23E reslen:304 locks:{ ReplicationStateTransition: { acquireCount: { w: 2641 } }, Global: { acquireCount: { r: 2641 } }, Database: { acquireCount: { r: 2641 } }, Collection: { acquireCount: { r: 2641 } }, Mutex: { acquireCount: { r: 1 } } } storage:{ data: { bytesRead: 28615999, timeReadingMicros: 288402 } } protocol:op_msg 523ms
我已经尝试了下面的命令,但这个命令只给出确切的值。我需要找到所有大于100ms的日志文件查询。
sed -n '/2022-09-15T12:26/,/2022-09-15T14:03/p' mongod.log| grep "op_msg 523ms"
2条答案
按热度按时间dgtucam11#
**选项1)**您可以像这样使用grep bash onliner来过滤特定执行时间范围内的mongo查询:
解释道:
1.筛选结尾为Number+“ms”的所有日志行。
1.循环查询以提取querytime变量中的执行时间
1.检查$querytime是否介于6000毫秒和7000毫秒之间
1.如果$queritime在指定的范围内打印当前的$LINE
**选项2)**您可以使用mtools软件包中mlogfilter的--slow MS、--fast MS选项,在该软件包中,您可以执行以下操作:
w1e3prcc2#
如果所有感兴趣的行都将
protocol:op_msg
作为倒数第二列,那么这就变得非常简单了:请注意,这在进行比较时完全忽略了单位,并且还会打印最后一列为
250h
或250ns
的行,但这很容易过滤。有了更准确的问题描述,肯定会有更准确的解决方案。