代码之家  ›  专栏  ›  技术社区  ›  0xC0DED00D

在stackdriver日志中标记适当的gce实例名

  •  1
  • 0xC0DED00D  · 技术社区  · 6 年前

    出于日志记录的目的,我使用StackDriver日志记录。日志正在生成,但是日志条目没有在适当的gce实例名称下被过滤。以下是资源标志在日志项中的方式

    resource: {
      labels: {
       instance_id:  "6000000000000000000" //A numeric id
       project_id:  "my-project"
       zone:  ""
      }
      type:  "gce_instance"   
     }
    

    resource: {
      labels: {
       instance_id:  "6000000000000000000" //A numeric id
       name: "instance-name"
       project_id:  "my-project"
       zone:  ""
      }
      type:  "gce_instance"   
     }
    

    在编写日志条目时,我没有添加任何自定义标签,因此我假设它应该自动生成。

    const Logging = require('@google-cloud/logging');
    
    function write(data) {
      const logging = new Logging();
      const logObj = logging.log('my-service');
      const logData = data.logData;
      const logText = data.logText;
      const severity = data.severity || 'DEFAULT';
      const httpRequest = data.httpRequest;
    
      // The metadata associated with the entry
      const metadata = {
        severity: severity,
        httpRequest: httpRequest
      };
    
      const logPayload = {
        text: logText,
        data: logData
      };
    
      // Prepares a log entry
      const entry = logObj.entry(metadata, logPayload);
      await logObj.write(entry);
    }
    

    我这样叫它-

    loggingService.write({
      httpRequest: httpRequest,
      logText: 'Text Data',
      logData: logDataDump.dump,
      severity: loggingService.DEBUG
    });
    

    3 回复  |  直到 6 年前
        1
  •  1
  •   Nakilon earlonrails    6 年前

    我猜你想卷曲 http://metadata.google.internal

    machine = if Google::Cloud.env.compute_engine?
      [ "gce_instance", {
        "instance_id" => `curl http://metadata.google.internal/computeMetadata/v1/instance/id -H "Metadata-Flavor: Google"`,
        "zone" => `curl http://metadata.google.internal/computeMetadata/v1/instance/zone -H "Metadata-Flavor: Google"`.split("/").last,
      } ]
    else
      "global"
    end
    
        2
  •  1
  •   0xC0DED00D    6 年前

    默认情况下,只有实例ID和项目ID可用于资源标记。我有 raised an issue

    这是代码在GCE实例上运行时自动设置资源标志时的代码。

    Metadata.getGCEDescriptor = function(callback) {
      gcpMetadata
        .instance('id')
        .then(function(resp) {
          callback(null, {
            type: 'gce_instance',
            labels: {
              instance_id: resp.data,
            },
          });
        })
        .catch(callback);
    };
    

    Nakilon Documentation

    instace_id = curl http://metadata.google.internal/computeMetadata/v1/instance/id -H "Metadata-Flavor: Google"
    zone = curl http://metadata.google.internal/computeMetadata/v1/instance/zone -H "Metadata-Flavor: Google"
    instance_name = curl http://metadata.google.internal/computeMetadata/v1/instance/name -H "Metadata-Flavor: Google"
    

    或者我们可以使用NPM包 gcp-metadata gcp-metadata

    const gcpMetadata = require('gcp-metadata');
    const res = await gcpMetadata.instance('name');
    const instance_name = res.data;
    

    attributes/
    cpu-platform
    description
    disks/
    hostname
    id
    image
    licenses/
    machine-type
    maintenance-event
    name
    network-interfaces/
    preempted
    remaining-cpu-time
    scheduling/
    service-accounts/
    tags
    virtual-clock/
    zone
    

    documentation

    GCP元数据

    在任何即将发布的版本中,一旦Github问题得到解决,我将更新答案。

        3
  •  0
  •   Asif Tanwir    6 年前

    resource.type=“gce_实例”

    例如,它显示:

    1. 在“是否有任何方法可以自动生成实例名”,如果您正在查看jsonPayload configuration