I'm having an issue logging to Stackdriver from my golang api. My configuration:
- GKE cluster running on three compute engine instances
- Logging and monitoring enabled on GKE container cluster
- Go service behind ESP
- There are three nodes in the kube-system namespace running the
fluentd
image. Names as fluentd-cloud-logging-xxx-xxx-xxx-default-pool-nnnnnn. - When I run my service locally (generated using go-swagger) text entries are sent to the
global
stackdriver log. Nothing when I deploy to my k8s cluster though.
Code I'm using is like:
api.Logger = func(text string, args ...interface{}) {
ctx := context.Background()
// Sets your Google Cloud Platform project ID.
projectID := "my-project-name"
// Creates a client.
client, err := logging.NewClient(ctx, projectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Sets the name of the log to write to.
logName := "tried.various.different.names.with.no.luck"
// Selects the log to write to.
logger := client.Logger(logName)
// Sets the data to log.
textL := fmt.Sprintf(text, args...)
// Adds an entry to the log buffer.
logger.Log(logging.Entry{Payload: textL, Severity: logging.Critical})
// Closes the client and flushes the buffer to the Stackdriver Logging
// service.
if err := client.Close(); err != nil {
log.Fatalf("Failed to close client: %v", err)
}
fmt.Printf("Logged: %v\n", textL)
}
I don't need error reporting at the moment as I'm just evaluating - I'd be happy with just sending unstructured text. But it's not clear whether I need to do something like Boris' discussion on error reporting/stack traces from Kubernetes pods just to get that?