How to add new fields from specific set of strings in the message?

Hi everyone,

I have a log file which records the query stats of a MongoDB server.

2016-06-06T00:31:14.848-0700 I COMMAND [conn55216] query ums.broadcasts query: { $readPreference: { mode: "secondary" }, $query: { status.state: "SEND_IN_PROGRESS", status.chanStats.EMAIL.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.SMS.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.APNS_PUSH.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.GCM.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.TWT.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.ADM.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.WINP7.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.WINP8.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.WIN8.state: { $nin: [ "IN_PROGRESS", "PENDING" ] }, status.chanStats.INBOX.state: { $nin: [ "IN_PROGRESS", "PENDING" ] } } } planSummary: IXSCAN { status.state: 1.0 } ntoreturn:0 ntoskip:0 nscanned:22055 nscannedObjects:22055 keyUpdates:0 writeConflicts:0 numYields:172 nreturned:9 reslen:11810 locks:{ Global: { acquireCount: { r: 346 } }, MMAPV1Journal: { acquireCount: { r: 173 } }, Database: { acquireCount: { r: 173 } }, Collection: { acquireCount: { R: 173 } } } 121ms

I want to capture specific data like numYields:172, nscannedObjects:22055, Database: { acquireCount: { r: 173 } }, Collection: { acquireCount: { R: 173 } } and turn them into separate fields? Any idea how would I do that? Any help would be deeply appreciated! Thanks!

The grok filter is frequently used for this task, but sometimes a kv filter is easier. In this case I'd probably use grok.