Skip to content
Merged
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ coverage.txt

# Other
.DS_Store
internal/env-tests-logging
70 changes: 68 additions & 2 deletions logging/logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -298,13 +298,75 @@ func detectGAEResource() *mrpb.MonitoredResource {
}
}

func isCloudRun() bool {
_, config := os.LookupEnv("K_CONFIGURATION")
return config
}

func detectCloudRunResource() *mrpb.MonitoredResource {
projectID, err := metadata.ProjectID()
if err != nil {
return nil
}
zone, err := metadata.Zone()
if err != nil {
return nil
}
return &mrpb.MonitoredResource{
Type: "cloud_run_revision",
Labels: map[string]string{
"project_id": projectID,
"location": regionFromZone(zone),
"service_name": os.Getenv("K_SERVICE"),
"revision_name": os.Getenv("K_REVISION"),
"configuration_name": os.Getenv("K_CONFIGURATION"),
},
}
}

func isCloudFunction() bool {
_, name := os.LookupEnv("FUNCTION_NAME")
_, target := os.LookupEnv("FUNCTION_TARGET")
if name || target {
return true
}
return false
}

func detectCloudFunction() *mrpb.MonitoredResource {
projectID, err := metadata.ProjectID()
if err != nil {
return nil
}
zone, err := metadata.Zone()
if err != nil {
return nil
}
// Newer functions runtimes store name in K_SERVICE
functionName, exists := os.LookupEnv("K_SERVICE")
if !exists {
functionName, _ = os.LookupEnv("FUNCTION_NAME")
}
return &mrpb.MonitoredResource{
Type: "cloud_function",
Labels: map[string]string{
"project_id": projectID,
"region": regionFromZone(zone),
"function_name": functionName,
},
}
}

func detectResource() *mrpb.MonitoredResource {
detectedResource.once.Do(func() {
switch {
// GAE needs to come first, as metadata.OnGCE() is actually true on GAE
// Second Gen runtimes.
// GAE, CloudRun need to come first, as metadata.OnGCE() returns true on these runtimes.
case os.Getenv("GAE_ENV") == "standard":
detectedResource.pb = detectGAEResource()
case isCloudFunction():
detectedResource.pb = detectCloudFunction()
case isCloudRun():
detectedResource.pb = detectCloudRunResource()
case metadata.OnGCE():
detectedResource.pb = detectGCEResource()
}
Expand Down Expand Up @@ -334,6 +396,10 @@ func monitoredResource(parent string) *mrpb.MonitoredResource {
}
}

func regionFromZone(zone string) string {
return zone[:strings.LastIndex(zone, "-")]
}

func globalResource(projectID string) *mrpb.MonitoredResource {
return &mrpb.MonitoredResource{
Type: "global",
Expand Down