当前位置: 首页 > 知识库问答 >
问题:

如何向Go中的第二代应用程序引擎应用程序添加自定义跟踪?

庄高谊
2023-03-14

Google App Engine现在通过新的第二代标准环境支持Go 1.11。在将较旧的标准环境应用程序转换为第二代应用程序时,如何将来自应用程序引擎基础结构的跟踪信息与我使用OpenCensus添加到应用程序中的自定义跟踪相结合并不明显。

尽管我已经创建了一个堆栈驱动程序导出器并注册了跟踪,但我没有在附加到入站请求的堆栈驱动程序控制台中看到自定义跟踪信息。

共有1个答案

柳德义
2023-03-14

关键是我缺少的是了解跨度上下文是如何传达给服务应用程序的。Google利用X-Cloud-Trace-Context标头在发送到服务实例的请求中传播跨度上下文,go.opencensus.io/exporter/stackdriver/propagation库提供了一个实现来在超文本传输协议请求中提取和持久化此信息。

不要忘记创建stackdriver导出器,并向其注册跟踪。exporter库的文档显示了一个示例

// CreateSpanFromRequest returns a context and span based on the http.Request.
// If no existing spancontext is found, this will start a new span.
// Modifies existing request to contain the generated span's context.
func CreateSpanFromRequest(name string, r *http.Request) (context.Context, *trace.Span) {
    var span *trace.Span
    ctx := r.Context()
    httpFormat := &propagation.HTTPFormat{}
    sc, ok := httpFormat.SpanContextFromRequest(r)
    if ok {
        ctx, span = trace.StartSpanWithRemoteParent(ctx, name, sc)
    } else {
        ctx, span = trace.StartSpan(ctx, name)
    }
    // Write the span context into the http.Request.  We do this to
    // to enable chaining handlers together more easily.
    httpFormat.SpanContextToRequest(span.SpanContext(), r)
    return ctx, span
}

使用此功能,我可以向处理程序添加自定义范围,这些范围将与stackdriver中的传入请求信息正确关联:

func indexHandler(w http.ResponseWriter, r *http.Request) {
    _, span := CreateSpanFromRequest("indexHandler", r)
    defer span.End()
    if r.URL.Path != "/" {
        http.NotFound(w, r)
        return
    }
    fmt.Fprint(w, "Hello, World!")
}
 类似资料:
  • 我看到了这个Python问题:应用引擎延迟:跟踪内存泄漏 ...同样,我也遇到了这个可怕的错误: 在为总共384个请求提供服务后,超过了128 MB的软专用内存限制 ... 处理此请求后,发现处理此请求的进程占用了太多内存,因此被终止。这可能会导致应用程序的下一个请求使用新进程。如果经常看到此消息,则应用程序中可能存在内存泄漏。 根据另一个问题,可能是“实例类”太小,无法运行这个应用程序,但是在增

  • 我有一个java应用程序,需要部署在weblogic服务器中。我目前正在为该应用程序制作ear文件。我的ear文件中有一个ejb jar。我想将log4j2 jar添加到此应用程序中。所以我的文件夹结构是 目前,我已经将JAR放在APP-INF文件夹/lib和META-INF/application中。xml我把JAR放在了模块中。这是我的申请表。xml 但它不接受log4j罐子。有什么解决方案吗

  • 我有一个静态html文件,我只想管理员有权访问。所以我在我的 但我总是出错。控制台上写着 通用域名格式。谷歌。阿彭金。工具。管理AppVersionUpload checkEndpointsServingStatusResult严重:endpoint配置未更新。当Google Cloud Endpoints服务器试图与其通信时,应用程序返回了一个错误。 然后,我尝试将每个更改为,包括实际的静态文件

  • 背景: 我正在使用Eclipse Lunar和谷歌应用程序引擎插件来尝试建立一个网站。一切都进行得很顺利,直到我想保存一些数据,所以我遵循了使用Objectify的教程。我下载了Objectify jar并将其放入“/war/WEB-INF/lib/”中,然后将其添加到类路径中。然后我做了一个类,并创建了几个我自己的测试类(现在可以假设这些类不包含错误)。我也可以成功部署。 问题 当试图加载使用O

  • 我正在将一个非常基本的web应用程序部署到Google应用程序引擎。我使用的是Springboot,我可以在本地很好地运行应用程序,但当我部署到Google时,应用程序引擎不会启动实例。我在启动时配置了一个云SQL数据源。 我有云sql配置属性配置src/main/Resources/application.properties.App Engine似乎找不到这些属性,所以它无法正确设置Cloud

  • 我正在读取google appengine应用程序中文件夹(/war/config/client.properties)中的属性文件。它在我的本地服务器上运行良好,但在生产模式下不工作,并且抛出异常java。安全AccessControlException:拒绝访问(java.io.FilePermission)。 你能告诉我如何在生产模式下工作吗。