2017-02-16 68 views
0

我不是RegEx專家。我想了解是否可以使用RegEx從JSON文件中查找數據塊。如何使用RegEx提取JSON文檔中的數據

我的情景:

我使用並加強監測的AWS RDS實例。監控數據正在發送到CloudWatch日誌流。我試圖使用CloudWatch中發佈的數據在日誌管理解決方案Loggly中可見。

攝取是沒有問題的,我可以看到Loggly中的數據。但是,整個消息被包含在一個大的blob字段中。字段內容是一個JSON文檔。我想弄清楚我是否可以使用RegEx僅提取JSON文檔的某些部分。

這裏是我使用的JSON有效載荷的樣品提取液:

{ 
    "engine": "MySQL", 
    "instanceID": "rds-mysql-test", 
    "instanceResourceID": "db-XXXXXXXXXXXXXXXXXXXXXXXXX", 
    "timestamp": "2017-02-13T09:49:50Z", 
    "version": 1, 
    "uptime": "0:05:36", 
    "numVCPUs": 1, 
    "cpuUtilization": { 
     "guest": 0, 
     "irq": 0.02, 
     "system": 1.02, 
     "wait": 7.52, 
     "idle": 87.04, 
     "user": 1.91, 
     "total": 12.96, 
     "steal": 2.42, 
     "nice": 0.07 
    }, 
    "loadAverageMinute": { 
     "fifteen": 0.12, 
     "five": 0.26, 
     "one": 0.27 
    }, 
    "memory": { 
     "writeback": 0, 
     "hugePagesFree": 0, 
     "hugePagesRsvd": 0, 
     "hugePagesSurp": 0, 
     "cached": 505160, 
     "hugePagesSize": 2048, 
     "free": 2830972, 
     "hugePagesTotal": 0, 
     "inactive": 363904, 
     "pageTables": 3652, 
     "dirty": 64, 
     "mapped": 26572, 
     "active": 539432, 
     "total": 3842628, 
     "slab": 34020, 
     "buffers": 16512 
    }, 

我的問題

我的問題是,我可以使用正則表達式來提取,說該文件的一個子集?例如,CPU利用率或內存等?如果可能的話,我如何編寫RegEx?如果可能的話,我可以使用它深入到提取的文檔中以獲取單獨的數據元素。

非常感謝您的幫助。

+1

如果有JSON解析器可用,則應該優先於使用正則表達式手動解析。 –

回答

0

首先我同意塞巴斯蒂安:適當的JSON解析器更好。

無論如何,有時必須使用髒方法。如果你的文本佈局不會改變,那麼正則表達式很簡單:

E.g. "total": (\d+\.\d+)獲取CPU使用率和"total": (\d\d\d+)總內存使用情況(匹配至少3位數字不匹配第一個總文本,內存可能永遠不會少於100 :-)。

如果需要改變,使其更穩定:["']total["']\s*:\s*(\d+\.\d+)

它也可能匹配這樣的返回字符:"cpuUtilization"\s*:\s*\{\s*\n.*\n\s*"irq"\s*:\s*(\d+\.\d+)使它更穩定一些(這次爲irq值)。

依此類推。

你看到你可以快速進入非常複雜的表達式。這種方法非常脆弱!

P.S.取決於loggy的正則表達式的確切細節,細節可能會改變。以上示例基於Perl。

+0

非常感謝,德克。我會測試它! – sadeq68