0

来自云运行的日志用 resource.labels.revision_name = my_name-00046-kip 吐出了一些好的 json。

json 路径 labels.instanceId 更像这样

00bf4bf02d71261c0c1f55a601331b336a5d90d365cca1b28330dcf3e456fb7c07d5b72f1d3c9a971e391b5edc3512aea8559d172b24e639

根据这个文件,我能够得到 revision_name

https://cloud.google.com/run/docs/reference/container-contract#env-vars

但我无法获取实例 ID,并且必须为每个实例报告指​​标,否则同一分钟内报告的两个实例将被拒绝。如何获取实例 ID(最好通过 DockerFile,如果不通过 api 调用)。如果云运行以一个修订名称启动 10 个实例,我必须确保向通用任务资源唯一地报告指标,我计划在其中使用实例 ID 填写 job_id。

谢谢,院长

4

3 回答 3

3

请尝试使用元数据服务器获取实例 ID:

http://metadata.google.internal/computeMetadata/v1/instance/id

请注意,“Metadata-Flavor: Google”标头也是必需的。

于 2020-05-20T05:46:09.953 回答
3

如果您使用 Java(如标签所示),以编程方式从“内部元数据服务器”获取实例 ID 的最简单方法可能是com.google.cloud:google-cloud-core:1.93.5通过 Gradle/Maven 包含依赖项(或更新版本),然后调用以下方法:

import com.google.cloud.MetadataConfig;

String instanceId = MetadataConfig.getInstanceId();
于 2020-06-06T17:00:44.310 回答
0

Stackdriver 中的日志记录如下

labels: {
  instanceId: "00bf4bf02d4b374e91dda64bc4c4241a218302c4bcc73a01ecf85e582127e8c8076fcbe18b3cc934f5ed33e5dc1348c58cfd40cbecc0c9ae2a0b6d2356"   
 }

  labels: {
   configuration_name: "cloudrunservice"    
   location: "us-central1"    
   project_id: "xxxx-xxxx-000"    
   revision_name: "cloudrunservice-00002-leq"    
   service_name: "cloudrunservice"    
  }
  type: "cloud_run_revision" 

正如您所提到的,每个都有实例 ID、修订名称和服务名称。通过这种方式,您不必担心在同一实例/时间的日志记录中被拒绝的条目。

我在 UI 中看不到与实例 ID 相关的内容,管理 Revisions。从日志中处理这个 JSON,你可以获得 InsanceID。

于 2020-03-17T23:15:26.513 回答