如何在Cloud Logging中正确记录URL,而不将"与"符号转换为unicode表示



不确定我是否应该标记这个谷歌云日志或谷歌工作流,因为我不确定问题是否存在,所以我标记了两者

我有一个谷歌云工作流(下面提供了工作流定义(,它通过BigQuery jobs.insert REST API执行BigQuery存储过程。我想在谷歌云控制台中记录一条消息,该消息提供了该工作结果的URL。

感谢在bigquery控制台中链接到作业的可能性吗?我知道我可以构建一个URL,将我带到查询结果,它看起来像这样:

https://console.cloud.google.com/bigquery?project=<my-project>j=<bq:<location>:<job_id>>&page=queryresults

因此,我将我的谷歌云工作流中的一条消息记录到谷歌云日志中,其中包含该URL。以下是我的工作流程:

- bq_job_get_post_completion:
call: bqJobGet
args:
project_id: ${project_id}
job_id: ${job_id}
result: bq_job_get_response
- set_job_completion_vars:
assign:
- jobCompletionStats:
jobId: ${job_id}
totalBytesBilled: ${bq_job_get_response.body.statistics.query.totalBytesBilled}
totalBytesProcessed: ${bq_job_get_response.body.statistics.query.totalBytesProcessed}
totalSlotMs: ${bq_job_get_response.body.statistics.query.totalSlotMs}
jobDetailsUrl: ${"https://console.cloud.google.com/bigquery?project=" + project_id + "&j=bq:EU:" + job_id + "&page=queryresults"}

请注意jobDetailsUrl部分。

不幸的是,当它出现在云日志中时,URL看起来像这样:

https://console.cloud.google.com/bigquery?project=my-redacted-projectu0026j=bq:EU:job_XXXXXXu0026page=queryresults

正如您可能看到的,"与"符号已被替换为\u0026。我理解为什么这是,26是unicode字符代码的一个和。。。然而,URL不再让我直接在谷歌云控制台中找到正确的结果——基本上,URL中的相关信息已经无效。

有人能建议我如何阻止这种情况发生吗?我希望在云日志中显示正确的URL。

以下是我的全部工作流程:

main:
steps:
- call_subWorkflow:
call: callBQStoredProc
args:
stored_proc_name: "mydataset.my-stored-procedure"
project_id: my-redacted-project

#SUBWORKFLOWS
callBQStoredProc:
params: [stored_proc_name, project_id, poll_wait_time_seconds: 5]
steps:
- init:
assign:
- job:
jobReference:
location: EU
configuration:
query:
useLegacySql: false
useQueryCache: false
query: ${"call " + stored_proc_name + "()"}
- log_start:
call: sys.log
args:
text: >
${"Starting execution of bigquery stored procedure "" + stored_proc_name + "" using subworkflow executeBQStoredProc"}
severity: INFO
- postCallStoredProc:
call: http.post
args:
url: ${"https://bigquery.googleapis.com/bigquery/v2/projects/" + project_id + "/jobs"}
body: ${job}
auth:
type: OAuth2
result: bq_jobs_insert_response
- set_job_id:
assign:
- job_id: ${bq_jobs_insert_response.body.jobReference.jobId}
- bq_job_get:
call: bqJobGet
args:
project_id: ${project_id}
job_id: ${job_id}
result: bq_job_get_response
- set_job_vars:
assign:
- job_state: ${bq_job_get_response.body.status.state}
- job_project: ${bq_job_get_response.body.jobReference.projectId}
- log_job_state:
call: sys.log
args:
text: >
${"Job " + job_id + " in project " + job_project + " has state : " + job_state}
severity: INFO
- check_job_state:
switch:
- condition: ${job_state != "DONE"}
steps:
- wait_10s:
call: sys.sleep
args:
seconds: ${int(poll_wait_time_seconds)}
next: bq_job_get
- bq_job_get_post_completion:
call: bqJobGet
args:
project_id: ${project_id}
job_id: ${job_id}
result: bq_job_get_response
- set_job_completion_vars:
assign:
- jobCompletionStats:
jobId: ${job_id}
totalBytesBilled: ${bq_job_get_response.body.statistics.query.totalBytesBilled}
totalBytesProcessed: ${bq_job_get_response.body.statistics.query.totalBytesProcessed}
totalSlotMs: ${bq_job_get_response.body.statistics.query.totalSlotMs}
jobDetailsUrl: ${"https://console.cloud.google.com/bigquery?project=" + project_id + "&j=bq:EU:" + job_id + "&page=queryresults"}
- log_job_completion:
call: sys.log
args:
text: ${jobCompletionStats}
severity: INFO
- bq_job_get_query_results:
call: http.request
args:
url: ${"https://bigquery.googleapis.com/bigquery/v2/projects/" + project_id + "/queries/" + job_id}
method: GET
auth:
type: OAuth2
result: bq_job_get_query_results_response
- returnResult:
return: ${bq_job_get_query_results_response.body}
bqJobGet:
params: [project_id, job_id]
steps:
- bq_job_get:
call: http.request
args:
url: ${"https://bigquery.googleapis.com/bigquery/v2/projects/" + project_id + "/jobs/" + job_id}
method: GET
auth:
type: OAuth2
result: bq_job_get_response
- returnResult:
return: ${bq_job_get_response}

您正试图将地图记录为文本。在sys.log函数的文档中,还有记录json的选项。您只需将"text"替换为"json",如下所示:

- log_job_completion:
call: sys.log
args:
json: ${jobCompletionStats}
severity: INFO

另一种选择是在自己的日志步骤中记录url,如下所示:

- log_job_completion_details_url:
call: sys.log
args:
text: ${jobCompletionStats.jobDetailsUrl}
severity: INFO

希望这能给你想要的输出。

最新更新