我不是RegEx专家。我试图了解是否可以使用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
},
我的问题
我的问题是,我可以使用RegEx来提取文件的子集吗?例如,CPU利用率或内存等?如果可以,我该如何编写RegEx?如果可能,我可以使用它深入到提取的文档中以获取单个数据元素。
非常感谢你的帮助。
答案 0 :(得分:0)
首先,我同意塞巴斯蒂安:一个合适的JSON解析器更好。
无论如何,有时必须使用脏方法。如果您的文本布局不会改变,那么正则表达式很简单:
E.g。 "total": (\d+\.\d+)
获取CPU使用率和"total": (\d\d\d+)
总内存使用量(匹配至少3位数不匹配第一个总文本,内存可能永远不会小于100: - )。
如果需要进行更改,请使其更加稳定:["']total["']\s*:\s*(\d+\.\d+)
。
也可以匹配agains返回字符,如下所示:"cpuUtilization"\s*:\s*\{\s*\n.*\n\s*"irq"\s*:\s*(\d+\.\d+)
使其更稳定(这次是irq值)。
依旧等等。
你看到你可以快速进入非常复杂的表达式。这种做法非常脆弱!
P.S。根据loggy正则表达式的具体细节,细节可能会有所变化。以上示例基于Perl。