2017-02-16 38 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