我有一个带有Zipkin库的客户端应用程序,其中包含spring application.properties中的配置.
camel.zipkin.host-name=hawkular-apm-server.com
camel.zipkin.port=443
camel.zipkin.include-message-body-streams=true
Maven依赖
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-zipkin-starter</artifactId>
    </dependency>
可以从本地计算机访问hawkular apm服务器控制台.
但是,当调用客户端应用程序中暴露的其余api时,会记录zipkin跟踪,但不会在hawkular apm服务器上收集它们.
04:31:55.632 [http-nio-0.0.0.0-8080-exec-1] INFO  o.a.c.c.s.CamelHttpTransportServlet - Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=]
04:31:55.668 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - clientRequest [service=MyCamelClient, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.672 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - serverRequest [service=MyCamel, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.676 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - serverResponse[service=MyCamel, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.677 [http-nio-0.0.0.0-8080-exec-1] DEBUG org.apache.camel.zipkin.ZipkinTracer - clientResponse[service=MyCamelClient, traceId=-5541987202080201726, spanId=-5541987202080201726]
04:31:55.758 [pool-1-thread-1] WARN  o.a.t.transport.TIOStreamTransport - Error closing output stream.
java.net.SocketException: Socket closed
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:118)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
    at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
    at org.apache.thrift.transport.TIOStreamTransport.close(TIOStreamTransport.java:110) …我尝试执行此docker命令以使用Elasticsearch设置Jaeger Agent和Jaeger Collector。
sudo docker run \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-e SPAN_STORAGE_TYPE=elasticsearch \
--name=jaeger \
jaegertracing/all-in-one:latest 
但是此命令给出以下错误。如何用ElasticSearch配置Jaeger?
"msg":"Failed to init storage factory","error":"health check timeout: no Elasticsearch node available","errorVerbose":"no Elasticsearch node available\
Spring Cloud Sleuth 用于创建traceId(跨服务请求时唯一)和spanId(对于一个工作单元来说是相同的)。我的想法是使用 Zipkin 服务器来跨服务获取这些日志的集体可视化。但我知道并且已经使用过 ELK 堆栈,它必然具有相同的功能。我的意思是我们可以使用 ELK 堆栈将具有相同 traceId 的请求分组以进行可视化。但我确实看到人们尝试使用 Sleuth、ELK 以及 Zipkin 来实现分布式跟踪,如这些示例(Link1、Link2)中所示。但是如果已经有 ELK 来进行日志收集和可视化,为什么我们还需要 Zipkin呢?我哪里失踪了?
zipkin microservices elastic-stack spring-cloud-sleuth distributed-tracing
我正在使用开放遥测导出以下应用程序的跟踪信息:
input-topic. 它使用kafkajs带有库的仪器opentelemetry-instrumentation-kafkajs。我正在使用 AWS OTEL for NodeJS example中的示例。这是我的tracer.js:module.exports = () => {
  diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR);
  // create a provider for activating and tracking with AWS IdGenerator
  const attributes = {
      'service.name': 'nodejs-producer',
      'service.namespace': 'axel'
  }
  let resource = new Resource(attributes)
  const tracerConfig = {
    idGenerator: new AWSXRayIdGenerator(),
    plugins: {
        kafkajs: { enabled: false, path: 'opentelemetry-plugin-kafkajs' }
    },
    resource: resource
  };
  const tracerProvider = new NodeTracerProvider(tracerConfig);
  // add …我正在 Go 中使用 OpenCensus 将跟踪数据推送到 Stackdriver,以进行涉及 2 个或更多微服务链的调用,我注意到我得到的许多跟踪仅包含某些服务的范围,而不包含整个端到端调用。
目前,我将此归因于以下事实:并非所有调用都被跟踪(仅跟踪某个样本),并且每个服务决定是否跟踪其当前范围。
这是它的工作方式吗?有没有什么方法可以确保调用链中的所有服务在对跟踪进行采样时都这样做?
go google-cloud-trace stackdriver distributed-tracing opencensus
我在看 APM 工具。本质上是 Dynatrace,我可以看到它还提供了似乎与语言无关且无需修改代码的跟踪功能。
与 dynatrace 之类的工具相比,jaeger/open tracking 在哪里会是更好的选择?
是的,dynatrace(或其他类似 Elastic APM)能够提供对跟踪以外的应用程序的更多洞察。
但仅从跟踪的角度来看...... jaeger 有哪些优势或能力比 APM 工具更好或在 APM 中不可用。仅从跟踪的角度来看。
我是 OpenTelemetry 这个词的新手。我已分别为我的服务创建了跨度,但是当我尝试使用上下文传播组合两个不同服务的跨度时,我无法成功完成此操作。我使用了以下代码:
 // at client side:
  public static void sendContext(String resource) {
TextMapSetter<HttpURLConnection> setter =
    new TextMapSetter<HttpURLConnection>() {
      @Override
      public void set(HttpURLConnection carrier, String key, String value) {
        carrier.setRequestProperty(key, value);
      }
    };
HttpURLConnection transportLayer = null;
String urlString = "http://127.0.0.1:8080" + resource;
try {
  URL url = new URL(urlString);
  transportLayer = (HttpURLConnection) url.openConnection();
} catch (MalformedURLException ex) {
  System.out.println(ex.getMessage());
} catch (IOException e) {
  System.out.println(e.getMessage());
}
GlobalOpenTelemetry.getPropagators()
    .getTextMapPropagator()
    .inject(Context.current(), transportLayer, setter);
}
// at server side:
public static Context …假设我有 3 个微服务,并且我想使用 OpenTelemetry/Jaeger UI 跟踪请求。如何添加通过跨度传播的行李?假设我有一个名为 WeatherForecast 的 API,它向另一个名为 Matrix 的服务执行 get 请求,我创建了一个如下所示的行李:
    var res = HttpClient.GetStringAsync("http://localhost:5002/Matrix").Result;
    Baggage.Current.SetBaggage("weatherforecastid", "abced123");`
如何让当前行李通过 Matrix 服务(调用其他服务)传播?我尝试使用 Baggage.Current.SetBaggage 认为它会引用 WeatherForecast 中的行李,但看起来它只创建了一个新行李,并且没有传播以前的行李。
asp.net event-propagation distributed-tracing open-telemetry
我是 Jaeger 的新手,我想使用它来记录我的微服务的跟踪。
\n我从 \xce\xbcservices 创建跟踪,提供traceId它们作为消息发布并在另一个服务中使用它们,以便将跟踪导出到 Jaeger。\n虽然我还没有找到一种方法来提供跨度 ID 并从生产方。
我是否应该在消费者中保存某种状态,例如(每个跟踪的父范围),以便我可以拥有正确的层次结构?你会怎么做呢?
\n我当前的设置的顺序是由首先完成的设置设置的,而不是由首先开始的设置设置的,这是所期望的。API 应该是第一个。你知道我该如何解决这个问题吗?
\n任何想法或反馈都将受到高度赞赏。
\n我正在运行 Datadog APM 查询,并且可以在 APM 部分中看到我的跟踪。但是,当我在仪表板部分的查询定义中尝试相同的查询参数(env 和服务)时,我没有得到任何数据。
我有一个使用 OpenTelemetry 进行检测的 java 应用程序,并且在端口 4317 上设置了本地 OTel 收集器,并且我正在使用 Datadog 代理,并将 DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT 设置为指向端口 4317。 OTel 收集器和 datadog 代理均已设置作为 docker 容器。
我可以在 APM 部分看到数据,但不能在仪表板部分看到数据。
datadog distributed-tracing open-telemetry datadog-dashboard open-telemetry-collector
jaeger ×3
opentracing ×3
go ×2
java ×2
zipkin ×2
apache-camel ×1
apm ×1
asp.net ×1
aws-xray ×1
datadog ×1
docker ×1
dynatrace ×1
hawkular ×1
node.js ×1
opencensus ×1
openshift ×1
stackdriver ×1