嗨,我正在使用 Windows powershell 脚本:
$startDate = "2024-11-07T11:00:00Z"
$endDate = "2024-11-07T11:40:00Z"
$startTimestamp = [int]([DateTimeOffset]::Parse($startDate).ToUnixTimeSeconds())
$endTimestamp = [int]([DateTimeOffset]::Parse($endDate).ToUnixTimeSeconds())
$logGroup = "logGroup"
$queryString = "fields @log, @timestamp, @message | limit 10"
$queryResult = aws logs start-query --log-group-name "$logGroup" --start-time $startTimestamp --end-time $endTimestamp --query-string "$queryString" --region us-east-1 | ConvertFrom-Json
$queryId = $queryResult.queryId
Write-Output "Query ID: $queryId"
$queryResults = aws logs get-query-results --query-id $queryId --region us-east-1
Write-Output "Resultados de la consulta:"
Write-Output $queryResults
如果我执行脚本,它可以工作,但我想要的是使用此查询来获取 httpCodes 的计数:
fields @log, @timestamp, @message
| filter @message like "\"httpCode\":4"
| parse @message '"message":"*' as Message
| parse Message '\"httpCode\":*,' as httpCode
| stats count() as CodeCount by httpCode
| sort CodeCount desc
| display CodeCount, httpCode
| limit 10
但我不确定如何转义特殊字符,以便 aws-cli 可以使用它,我尝试了反引号 (`),但它不起作用,我收到了类似的错误
调用时发生错误(MalformedQueryException) StartQuery 操作:发现意外符号:位于第 1 行和位置 172
问候!
让我们从您尝试传递的字符串的简化、逐字版本开始:
注:
"
字符的转义方面 - 我无法判断您的查询是否正确(例如,
@message
与Message
,额外的"
)在 '"message":"*'
中,我在下面省略了)。fields @log, @timestamp, @message
| filter @message like "\"httpCode\":4"
| parse @message '"message":*' as Message
您需要将字符串作为参数传递给Windows PowerShell中的外部程序(遗留的、随Windows附带的、仅限Windows的PowerShell版本,其最新和最后一个版本为5.1),以及 PowerShell (Core) 7 直至版本 7.2.x:
自己的语法要求...
and - 不幸的是 - 必须嵌入 "
字符(以及特定情况下的
\
字符)
\
- 转义(此要求不再适用于 PowerShellv7.3+;请参阅 this 答案 了解背景信息)。
# In Windows PowerShell and PowerShell (Core) up to v7.2.x
$queryString = @'
fields @log, @timestamp, @message
| filter @message like \"\\\"httpCode\\\":4\"
| parse @message '\"message\":*' as Message
'@