我正在使用 Cloud Run 和 Cloud Tasks 对 Webhooks 进行一些异步处理。当我收到对 Cloud Run 服务的请求时,我会在 Cloud Tasks 队列中对任务进行排队,并立即从服务返回响应。然后,云任务将再次触发我的服务(不同的端点)并进行一些处理。我想使用相同的跟踪 ID 关联这些步骤中的所有日志,但它不起作用。
在 Cloud Tasks 中创建任务时,我请求它发送X-Cloud-Trace-Context标头,并用原始请求的标头值填充它X-Cloud-Trace-Context。理论上,当请求从 Cloud Tasks 发送到我的 Cloud Run 服务时,它应该具有此标头值,并且我的所有日志都将正确关联。但是,当第二个请求到来时,Cloud Run 似乎正在使用新的跟踪 ID 覆盖标头。
有没有办法防止这种情况发生?如果不是,那么在上述步骤中关联所有日志(由服务代码生成以及 GCP 自动生成的日志)的推荐解决方案是什么?
谢谢您的帮助!
google-cloud-platform google-cloud-trace google-cloud-logging google-cloud-tasks google-cloud-run
我在 GAE 上部署了一个 Web 应用程序。我正在使用 SLF4j 的 log4j2 实现进行日志记录。
我可以在 stackdriver 控制台上看到我的所有日志。但是我所有日志的级别都显示为 stackdriver 下的信息。它没有根据日志级别(如调试、信息、警告和错误)正确分类。
例如,我的log.error("error")也显示在 stackdriver 控制台的信息级别下。
但是当我使用 SLF4 (slf4j-jdk14) 的 JUL 实现时。所有日志都在 stackdriver 中以适当的日志级别正确报告。
任何人都可以建议可能是什么问题吗?
这里是 POM。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<exclusions>
<exclusion>
<artifactId>tomcat-embed-logging-juli</artifactId>
<groupId>org.apache.tomcat.embed</groupId>
</exclusion>
<exclusion>
<artifactId>tomcat-embed-websocket</artifactId>
<groupId>org.apache.tomcat.embed</groupId> …Run Code Online (Sandbox Code Playgroud) google-cloud-platform google-cloud-trace google-cloud-logging stackdriver google-cloud-stackdriver
随着 Opentelemetry 成为跟踪的新标准,并且它与供应商无关,那么我们如何为 opentelemetry 选择后端供应商?
例如,目前有很多厂商支持 Opentelemetry,如 GCP Cloudtrace、Datadog、Dynatrace、Lightstep、Instana。您如何为 opentelemtry 选择供应商?或者根本没有关系,因为 opentelemetry 与云无关,我们可以选择最便宜的一个来存储我们的跟踪
dynatrace google-cloud-trace datadog open-telemetry lightstep
我正在 Go 中使用 OpenCensus 将跟踪数据推送到 Stackdriver,以进行涉及 2 个或更多微服务链的调用,我注意到我得到的许多跟踪仅包含某些服务的范围,而不包含整个端到端调用。
目前,我将此归因于以下事实:并非所有调用都被跟踪(仅跟踪某个样本),并且每个服务决定是否跟踪其当前范围。
这是它的工作方式吗?有没有什么方法可以确保调用链中的所有服务在对跟踪进行采样时都这样做?
go google-cloud-trace stackdriver distributed-tracing opencensus
我的目标是通过多个组件对应用程序的整个过程进行跟踪。我正在使用 GCP 和 Pub/Sub 消息队列在组件之间传递信息(用 Python 开发)。
我目前正在尝试通过创建一个新的跨度作为根跟踪的子跨度来在组件 A 和组件 B 之间保持相同的根跟踪。
这是一个小图:
Component A ---> Pub/Sub message ---> component B
(create the root trace) (contain information) (new span for root trace)
Run Code Online (Sandbox Code Playgroud)
我有一个给定的trace_id和span_id我的父母,我可以通过 Pub/Sub 传输,但我不知道如何声明一个新的跨度作为最后一个的子跨度。我所做的就是将新跟踪链接到父跟踪,但这不是我正在寻找的行为。
有人已经尝试过做类似的事情吗?
问候,
python google-cloud-platform google-cloud-trace open-telemetry
我正在使用此处记录的开放遥测 Java 代理来检测 Java Spring Boot 应用程序并将跟踪导出到 Google Cloud Trace。
我的命令是:
java \
-javaagent:/opentelemetry/opentelemetry-javaagent.jar \
-Dotel.javaagent.extensions=/opentelemetry/exporter-auto-0.22.0-alpha.jar \
-Dotel.traces.exporter=google_cloud_trace \
-Dotel.metrics.exporter=none \
-jar \
/app.jar
Run Code Online (Sandbox Code Playgroud)
有用。
但是,由于我使用活性探针在 kubernetes 下部署应用程序,代理还会记录端点的跟踪/actuator/health。
我想过滤掉这些呼叫,以便代理不会记录它们并将其发送给收集器。
代理配置文档似乎没有涵盖这个用例。
是否可以通过 http 调用过滤跟踪但尚未记录?这是计划中的功能吗?
java google-cloud-platform google-cloud-trace open-telemetry
Google Cloud 拥有强大的跟踪工具,用于分析请求和 RPC 的延迟。但它似乎只是选择了一些它认为值得跟踪的请求。有时这已经足够了,您只需浏览现有的跟踪即可。但是,如果您正在致力于性能增强,您希望立即跟踪特定查询,您不想等到它被认为有趣的时候。
问题是
哪些规则会影响决定跟踪哪些查询?
有没有办法要求捕获给定 URI 的跟踪?
是从开发人员控制台中,还是从我们的应用程序中调用一些 API?或者通过一些 app.yaml 配置?或者我们是否必须等待并祈祷伟大的算法来选择我们的请求?
google-app-engine appstats google-app-engine-python google-cloud-trace
我有一个 Spring Boot 应用程序,我希望自动生成使用 OpenTelemetry Java 代理的跟踪,然后将这些跟踪上传到 Google Cloud Trace。
我已将以下代码添加到应用程序的入口点以发送跟踪:
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(
SimpleSpanProcessor.create(TraceExporter.createWithDefaultConfiguration())
)
.build()
)
.buildAndRegisterGlobal();
Run Code Online (Sandbox Code Playgroud)
...我正在使用以下系统属性运行我的应用程序:
-javaagent:path/to/opentelemetry-javaagent-all.jar \
-jar myapp.jar
Run Code Online (Sandbox Code Playgroud)
...但我不知道如何将两者联系起来。
我可以应用一些代理配置吗?就像是:
-Dotel.traces.exporter=google_cloud_trace
Run Code Online (Sandbox Code Playgroud) java ×2
stackdriver ×2
appstats ×1
datadog ×1
dynatrace ×1
go ×1
lightstep ×1
opencensus ×1
python ×1