1

これは、stackdriver trace go client パッケージの使用を縮小したものです。

この簡単な例は機能するはずですが、エラーが発生します。

package main

import (
    "context"
    "flag"
    "log"
    "net/http"

    "cloud.google.com/go/trace"
    "github.com/davecgh/go-spew/spew"
    "google.golang.org/api/option"
)

var (
    projectID         = flag.String("projectID", "", "projcect id")
    serviceAccountKey = flag.String("serviceAccountKey", "", "path to serviceacount json")
)

func main() {
    flag.Parse()
    mux := http.NewServeMux()
    log.Fatalln(http.ListenAndServe(":9000", Trace(*projectID, *serviceAccountKey, mux)))
}

func Trace(projectID string, keyPath string, h http.Handler) http.HandlerFunc {
    client, err := trace.NewClient(context.Background(), projectID, option.WithServiceAccountFile(keyPath))
    if err != nil {
        panic(err)
    }
    return func(w http.ResponseWriter, r *http.Request) {
        s := client.SpanFromRequest(r)
        defer func() { err := s.FinishWait(); spew.Dump(err) }()
        h.ServeHTTP(w, r)
    }
}

私はこれを次のように実行しています:

$ teststackdrivertrace -projectID ${GCLOUD_PROJECT_ID} -serviceAccountKey ${PATH_TO_SERVICEACCOUNT_JSON}

そしてそれをカーリングすると、次のようになります。

$ curl -s --header "X-Cloud-Trace-Context: 205445aa7843bc8bf206b120001000/0;o=1" localhost:9000

$ (*googleapi.Error)(0xc4203a2c80)(googleapi: Error 400: Request contains an invalid argument., badRequest)

私は何が欠けていますか?

4

1 に答える 1

0

私の traceId の長さは 32 ではなく 30 バイトでした。例の curl をhttps://cloud.google.com/trace/docs/faqから取得しましたが、これもわずか 30 バイトです。

于 2016-11-12T01:17:25.023 に答える