最小的堆栈驱动程序跟踪客户端使用失败

Posted

技术标签:

【中文标题】最小的堆栈驱动程序跟踪客户端使用失败【英文标题】:minimal stackdriver trace client usage failing 【发布时间】:2017-03-25 00:25:01 【问题描述】:

这是使用 stackdriver trace go 客户端包的缩图。

看起来这个简单的例子应该可以工作,但它会产生错误。

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)

我错过了什么?

【问题讨论】:

【参考方案1】:

我的 traceId 的长度是 30 个字节而不是 32 个。我从 https://cloud.google.com/trace/docs/faq 中获取了示例 curl,它也只有 30 个字节。

【讨论】:

以上是关于最小的堆栈驱动程序跟踪客户端使用失败的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 打印堆栈跟踪信息

导致 OOM 的线程的堆栈跟踪

在堆栈驱动程序中看不到跟踪

我的程序崩溃时如何自动生成堆栈跟踪

跟踪应用程序堆栈更改事件 wp8.1

如何从像 Asp.Net 这样的堆栈跟踪中获取“源错误”?