Python 3.x 当bigquery的查询结果为空时(使用pthon),如何使用gcp stackdriver收集日志?
我有一个云函数,它执行查询并将作业结果存储到新的bigquery表中。每当我得到查询作业结果为空时,我想将日志存储到stackdriver中,这意味着找不到特定查询执行的记录。谁能建议我如何完成这项任务 云功能代码:Python 3.x 当bigquery的查询结果为空时(使用pthon),如何使用gcp stackdriver收集日志?,python-3.x,google-cloud-platform,google-bigquery,google-cloud-functions,google-cloud-stackdriver,Python 3.x,Google Cloud Platform,Google Bigquery,Google Cloud Functions,Google Cloud Stackdriver,我有一个云函数,它执行查询并将作业结果存储到新的bigquery表中。每当我得到查询作业结果为空时,我想将日志存储到stackdriver中,这意味着找不到特定查询执行的记录。谁能建议我如何完成这项任务 云功能代码: def main(request): query = "select * from `myproject.mydataset.mytable`" client = bigquery.Client() job_config = bigquery.QueryJ
def main(request):
query = "select * from `myproject.mydataset.mytable`"
client = bigquery.Client()
job_config = bigquery.QueryJobConfig()
dest_dataset = client.dataset(destination_dataset, destination_project)
dest_table = dest_dataset.table(destination_table)
job_config.destination = dest_table
job_config.create_disposition = 'CREATE_IF_NEEDED'
job_config.write_disposition = 'WRITE_APPEND'
job = client.query(query, location='US', job_config=job_config)
job.result()
- 转到GCP控制台中的Stackdriver日志部分李>
- 激活高级过滤器(单击过滤器字段右侧的箭头)
- 用以下内容填充自定义字段:
- 转到GCP控制台中的Stackdriver日志部分李>
- 激活高级过滤器(单击过滤器字段右侧的箭头)
- 用以下内容填充自定义字段:
然后可以创建到BigQuery、Storage或PubSub的导出,或者创建度量。如果您这样做,那么您可以在Stackdriver监视和警报中使用此度量。所有这一切都取决于您想做什么。您必须使用代码或使用GCP日志UI在中创建日志 在将日志传递给bigquery的过程中编写代码
private static MonitoredResource monitoredResource =
MonitoredResource.newBuilder("global")
.addLabel("project_id", logging.getOptions().getProjectId())
.build();
public static void writeLog(Severity severity, String logName, Map<String, String> jsonMap) {
List<Map<String, String>> maps = limitMap(jsonMap);
for (Map<String, String> map : maps) {
LogEntry logEntry = LogEntry.newBuilder(Payload.JsonPayload.of(map))
.setSeverity(severity)
.setLogName(logName)
.setResource(monitoredResource)
.build();
logging.write(Collections.singleton(logEntry));
}
private static MonitoredResource MonitoredResource=
MonitoredResource.newBuilder(“全球”)
.addLabel(“项目id”,logging.getOptions().getProjectId())
.build();
公共静态void writeLog(严重性、字符串日志名、映射jsonMap){
列表映射=limitMap(jsonMap);
用于(地图:地图){
LogEntry LogEntry=LogEntry.newBuilder(Payload.JsonPayload.of(map))
.setSeverity(严重性)
.setLogName(logName)
.setResource(监视器资源)
.build();
logging.write(Collections.singleton(logEntry));
}
您必须使用代码或GCP日志UI在中创建日志 在将日志传递给bigquery的过程中编写代码
private static MonitoredResource monitoredResource =
MonitoredResource.newBuilder("global")
.addLabel("project_id", logging.getOptions().getProjectId())
.build();
public static void writeLog(Severity severity, String logName, Map<String, String> jsonMap) {
List<Map<String, String>> maps = limitMap(jsonMap);
for (Map<String, String> map : maps) {
LogEntry logEntry = LogEntry.newBuilder(Payload.JsonPayload.of(map))
.setSeverity(severity)
.setLogName(logName)
.setResource(monitoredResource)
.build();
logging.write(Collections.singleton(logEntry));
}
private static MonitoredResource MonitoredResource=
MonitoredResource.newBuilder(“全球”)
.addLabel(“项目id”,logging.getOptions().getProjectId())
.build();
公共静态void writeLog(严重性、字符串日志名、映射jsonMap){
列表映射=limitMap(jsonMap);
用于(地图:地图){
LogEntry LogEntry=LogEntry.newBuilder(Payload.JsonPayload.of(map))
.setSeverity(严重性)
.setLogName(logName)
.setResource(监视器资源)
.build();
logging.write(Collections.singleton(logEntry));
}
您可以尝试使用结果中的属性,类似于
r=job.result();如果r.total\u rows==0:stack\u client.send\u log()
@WillianFuks基于您的建议,我对代码做了一些修改,它给出了我期望的结果。下面是代码:logging\u client=logging.client()log\u name='bigquery logs'logger=logging\u client.logger(log\u name)如果r.total\u行为None:logger.log\u text(“接收到的空查询结果”),您可以尝试使用结果中的属性,例如r=job.result();如果r.total\u行==0:stack\u client.send\u log()
@WillianFuks根据您的建议,我对代码做了一些修改,它给了我我所期望的。下面是代码:logging\u client=logging.client()log\u name='bigquery logs'logger=logging\u client.logger(log\u name),如果r.total\u行为None:logger.log\u text(“收到空查询结果”)我按照您的方式尝试了它,但在我的情况下,它并没有给我期望的输出。我在过滤器中填充自定义字段后尝试的代码是:logging\u client=logging.client()log\u name='bigquery logs'logger=logging\u client.logger(log\u name)try:job.result()r=job.result(),如果r.total\u rows==0:logger.log\u text(“收到空查询结果”),除了RuntimeError:print(client1.report_exception())Note=作为测试的一部分,我在查询中使用空表。我按您的方式尝试了它,但在我的情况下,它没有给我所需的输出。在填充筛选器中的自定义字段后,我尝试的代码是:logging_client=logging.client()log\u name='bigquery logs'logger=logging\u client.logger(log\u name)try:job.result()r=job.result()如果r.total\u rows==0:logger.log\u text(“收到的空查询结果”),除了运行时错误:print(client1.report\u exception())注意=作为测试的一部分,我在查询中使用空表。