标签: opentracing

OpenTracing不会使用Serilog发送日志

我正在尝试将OpenTracing.Contrib.NetCore与Serilog 一起使用。我需要将自定义日志发送给Jaeger。现在,它仅在我使用默认记录器工厂时才有效Microsoft.Extensions.Logging.ILoggerFactory

我的创业公司:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    services.AddSingleton<ITracer>(sp =>
    {
        var loggerFactory = sp.GetRequiredService<ILoggerFactory>();
        string serviceName = sp.GetRequiredService<IHostingEnvironment>().ApplicationName;

        var samplerConfiguration = new Configuration.SamplerConfiguration(loggerFactory)
            .WithType(ConstSampler.Type)
            .WithParam(1);

        var senderConfiguration = new Configuration.SenderConfiguration(loggerFactory)
            .WithAgentHost("localhost")
            .WithAgentPort(6831);

        var reporterConfiguration = new Configuration.ReporterConfiguration(loggerFactory)
            .WithLogSpans(true)
            .WithSender(senderConfiguration);

        var tracer = (Tracer)new Configuration(serviceName, loggerFactory)
            .WithSampler(samplerConfiguration)
            .WithReporter(reporterConfiguration)
            .GetTracer();

        //GlobalTracer.Register(tracer);
        return tracer;
    });
    services.AddOpenTracing();
}
Run Code Online (Sandbox Code Playgroud)

在控制器中的某个位置:

[Route("api/[controller]")]
public class ValuesController : ControllerBase
{
    private readonly ILogger<ValuesController> _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}")] …
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core opentracing jaeger

13
推荐指数
1
解决办法
543
查看次数

如何在 opentracing 中更改 trace-id 标头?

有没有办法配置 opentracing-spring-jaeger-cloud-starter 来处理除 Uber-Trace-Id 之外的任何其他标头?我的 kubernetes 集群中有 Traefik 作为入口。Traefik 可以配置为更改 traceContextHeaderName。默认值为“uber-trace-id”。当我将其更改为某种自定义时,服务之间没有连接(我的意思是跨度连接)。我相信 opentracing 仅适用于 Uber-Trace-Id。有没有办法配置它?

我在 minikube 中使用 Traefik 作为入口进行测试。然后所有请求都转到 spring-cloud-gateway 并传播到服务。

感谢帮助!

java spring-cloud traefik opentracing jaeger

7
推荐指数
1
解决办法
3598
查看次数

如何将 opentracing 跨度注入 RabbitMQ?

我正在使用 OpenTracing,并且正在尝试通过 RabbitMQ 传播跨度。但是我不明白我应该如何注入跨度以及如何在以后提取它。

这是发送消息的代码

def send_message(self, message, tracer):
    root_span = tracer.get_span()
    with opentracing.tracer.start_span('Sending message to broker', child_of=root_span) as span:
        connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
        channel = connection.channel()
        channel.queue_declare(queue='default')

        json_message = json.dumps(message)

        channel.basic_publish(exchange='',
                            routing_key='default',
                            body=json_message)

        connection.close()`
Run Code Online (Sandbox Code Playgroud)

我有一个用于接收消息的回调函数

def _callback(self, ch, method, properties, body):
        print(" [x] Received %r" % body)
Run Code Online (Sandbox Code Playgroud)

所以在某个地方,我想以某种方式注入跨度,然后提取它。有没有人知道或有任何关于如何做的例子?

我曾尝试在像这样在发件人中调用 basic_publish 之前注入

tracer.inject(span, Format.HTTP_HEADERS, headers)
Run Code Online (Sandbox Code Playgroud)

但我不知道哪些参数将进入注入方法。

然后我尝试在回调中像这样提取它

span_ctx = tracer.extract(Format.HTTP_HEADERS, {})
Run Code Online (Sandbox Code Playgroud)

同样,我不知道哪些参数会进入提取方法。

编辑:解决了,有点

我通过将载体发送到属性标题来解决它。然后我可以从回调属性属性中提取跨度

在发件人中:

channel.basic_publish(exchange='',
                            routing_key='default',                     
                     properties=pika.BasicProperties(headers=carrier),
                            body=json_message)
Run Code Online (Sandbox Code Playgroud)

在回调中,提取跨度:

def _callback(self, ch, method, properties, body):
    span_ctx = tracer.extract(Format.TEXT_MAP, properties.headers)
Run Code Online (Sandbox Code Playgroud)

inject rabbitmq opentracing

6
推荐指数
1
解决办法
2075
查看次数

如何使用elasticsearch配置Jaeger?

我尝试执行此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 
Run Code Online (Sandbox Code Playgroud)

但是此命令给出以下错误。如何用ElasticSearch配置Jaeger?

"msg":"Failed to init storage factory","error":"health check timeout: no Elasticsearch node available","errorVerbose":"no Elasticsearch node available\
Run Code Online (Sandbox Code Playgroud)

elasticsearch docker opentracing jaeger distributed-tracing

6
推荐指数
2
解决办法
3206
查看次数

将 JDBC 查询信息添加到 opentracing/Jaeger spans

我们在 Istio 中使用 Opentracing/Jaeger 来跟踪多个基于 Spring Boot/Spring Cloud 的微服务。

我目前想知道是否有一个选项可以通过提供有关已执行查询(即 SQL 语句)的信息来丰富跟踪范围?使用opentracing-contrib/java-spring-cloud跟踪 JDBC 连接信息工作正常,但缺少附加信息。

我知道,例如,glowroot能够跟踪语句本身,但没有找到与 Opentracing 或 Jaeger 相关的任何内容。

如果有人可以展示一些研究方向,那就太好了!

spring-boot spring-cloud opentracing jaeger

6
推荐指数
1
解决办法
857
查看次数

使用 Jaeger Agent 的优点

所以我正在探索Jaeger for Tracing,我发现我们可以直接通过HTTP(端口:14268)将span从客户端发送到收集器,如果是这样那么使用jaeger代理有什么优势。

何时采用 Jaeger Agent 方法以及何时采用直接 HTTP 方法。使用直接方法收集器有什么缺点

deployment setup-deployment devops opentracing jaeger

6
推荐指数
1
解决办法
1394
查看次数

Python:获取 urllib3 请求标头

我们将跟踪信息注入到基于 urllib3 实现的 API 客户端库中所有 http 请求调用的请求标头中

def _init_jaeger_tracer():
    '''Jaeger tracer initialization'''
    config = Config(
        config={
            'sampler': {
                'type': 'const',
                'param': 1,
            },
        },
        service_name="session"
        )
    return config.new_tracer()

class APIObject(rest.APIObject):
    '''Class for injecting traces into urllib3 request headers'''
    def __init__(self, configuration):
        print("RESTClientObject child class called####")
        self._tracer = None
        super().__init__(configuration)
        self._tracer = _init_jaeger_tracer()

    # pylint: disable=W0221
    def request(self, method, url, *args, **kwargs):
        lower_method = method.lower()
        with self._tracer.start_active_span('requests.{}'.format(lower_method)) as scope:
            span = scope.span
            span.set_tag(tags.SPAN_KIND, tags.SPAN_KIND_RPC_CLIENT)
            span.set_tag(tags.COMPONENT, 'request')
            span.set_tag(tags.HTTP_METHOD, lower_method)
            span.set_tag(tags.HTTP_URL, url)
            headers …
Run Code Online (Sandbox Code Playgroud)

python urllib3 opentracing jaeger

6
推荐指数
1
解决办法
2160
查看次数

opentracing/jaeger 相对于 APM 跟踪功能的优势

我在看 APM 工具。本质上是 Dynatrace,我可以看到它还提供了似乎与语言无关且无需修改代码的跟踪功能。

与 dynatrace 之类的工具相比,jaeger/open tracking 在哪里会是更好的选择?

是的,dynatrace(或其他类似 Elastic APM)能够提供对跟踪以外的应用程序的更多洞察。

但仅从跟踪的角度来看...... jaeger 有哪些优势或能力比 APM 工具更好或在 APM 中不可用。仅从跟踪的角度来看。

apm dynatrace opentracing jaeger distributed-tracing

5
推荐指数
1
解决办法
811
查看次数

Angular 对 Jaeger 的开放追踪

我正在寻找开放跟踪实现以将应用程序跟踪到 JaegerUI。我们的应用程序前端是 angular,后端是 Asp.net Web api。

我能够使用 Jaeger C# nuget 包跟踪 webapi。但是,我还没有找到一种方法/ npm 包来跟踪到 Jaeger 的角度跟踪消息。

我知道有一个用于 node.js(server) 的 Jaeger npm 包,但没有用于在浏览器中运行的客户端 javascript/typescript。

您能否让我知道我们如何在前端(Javascript/angular)使用 Jaeger 实现 opentracing,以便我们可以在 Jaeger 中看到完整的跨度跟踪(前端到后端)

javascript opentracing angular jaeger

5
推荐指数
0
解决办法
1034
查看次数

使用具有正确层次结构的 Jaeger 进行分布式跟踪

我是 Jaeger 的新手,我想使用它来记录我的微服务的跟踪。

\n

我从 \xce\xbcservices 创建跟踪,提供traceId它们作为消息发布并在另一个服务中使用它们,以便将跟踪导出到 Jaeger。\n虽然我还没有找到一种方法来提供跨度 ID 并从生产方。

\n
    \n
  1. 我是否应该在消费者中保存某种状态,例如(每个跟踪的父范围),以便我可以拥有正确的层次结构?你会怎么做呢?

    \n
  2. \n
  3. 我当前的设置的顺序是由首先完成的设置设置的,而不是由首先开始的设置设置的,这是所期望的。API 应该是第一个。你知道我该如何解决这个问题吗?

    \n
  4. \n
\n

耶格

\n

任何想法或反馈都将受到高度赞赏。

\n

go opentracing jaeger distributed-tracing open-telemetry

5
推荐指数
1
解决办法
859
查看次数