gcloud logging使用正则表达式及时间筛选CLI执行报错如何解决?
问题原因
你遇到的报错是shell的字符串解析规则导致的:gcloud logging控制台直接输入的过滤规则不会经过额外解析,但CLI中输入的命令会先被shell处理引号、特殊字符,最终传给gcloud服务的过滤规则和你写的原文不一致,才会触发语法解析错误。
解决方案
方案1:外层使用单引号包裹整个过滤规则(推荐)
单引号在shell中属于强引用,内部的所有特殊字符、引号、正则符号、时间格式的冒号都不会被转义解析,会原封不动传递给gcloud工具。
你两个场景的正确命令写法如下:
- 正则匹配邮箱场景:
gcloud logging read 'resource.type=gce_instance AND protoPayload.authenticationInfo.principalEmail=~".*@example.com.au"' --limit=10 --format=json
- 时间戳筛选场景:
gcloud logging read 'resource.type=gce_instance AND timestamp > "2021-06-15T00:00:00.000000Z"'
方案2:外层用双引号时主动转义内部特殊字符
如果需要在过滤规则中插入shell变量,必须用双引号做外层引用的场景,需要对内部的引号、特殊符号添加反斜杠转义:
示例(带变量的正则匹配):
TARGET_EMAIL=".*@example.com.au" gcloud logging read "resource.type=gce_instance AND protoPayload.authenticationInfo.principalEmail=~\"$TARGET_EMAIL\"" --limit=10 --format=json
验证方法
可以在gcloud命令后添加--log-http参数,查看实际提交给日志服务的过滤规则是否和控制台的正常写法一致,确认解析结果符合预期即可。
内容的提问来源于stack exchange,提问作者Ari
相关产品推荐
相关产品推荐

