Jaeger Service: как настроить в Google Kubernetes?

Создал развертывание в Google Kubernetes с помощью jaegertracing / all- in-one общедоступный образ из Docker Hub

Затем представил развертывание с типом службы LoadBalancer.

Теперь запустил пользовательский интерфейс Jagger, и он работает, но не показывает никаких служб кроме jagger-query.

Я развернул свое приложение веб-API .net для тестирования на кубернетах.

В моем приложении есть только один веб-API, который успешно работает на движке Google Kubernetes и предоставляется через тип службы балансировки нагрузки. В API все данные жестко запрограммированы, и он не вызывает никаких других служб или баз данных.

В проекте использовались следующие пакеты nuget:

Jaeger -Версия 0.2.2
OpenTracing.Contrib.NetCore -Версия 0.5.0

Я добавил следующий код в файл Startup.cs моего API:

    services.AddSingleton<ITracer>(serviceProvider =>
    {
        //string serviceName = Assembly.GetEntryAssembly().GetName().Name;
        string serviceName = serviceProvider.GetRequiredService<IHostingEnvironment>().ApplicationName;

        ILoggerFactory loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();

        ISampler sampler = new ConstSampler(sample: true);

        string jaegerHost = Environment.GetEnvironmentVariable("jaeger_host");

        var reporter = new RemoteReporter.Builder()
            .WithLoggerFactory(loggerFactory)
            .WithSender(new UdpSender(jaegerHost, 6831, 0)) // todo: 
            .Build();

        ITracer tracer = new Tracer.Builder(serviceName)
            .WithLoggerFactory(loggerFactory)
            .WithSampler(sampler)
            .WithReporter(reporter)
            .Build();

        GlobalTracer.Register(tracer);

        return tracer;
    });

    services.AddOpenTracing();

Переменной среды jaegerHost назначается IP созданной службы jaeger.

Вопрос в том, как и где внести изменения, чтобы моя служба приложения стала доступной в пользовательском интерфейсе Jaeger, чтобы я мог видеть ее следы.

Я застрял здесь, может ли кто-нибудь помочь, как действовать дальше?


person CodeZila    schedule 05.06.2020    source источник
comment
Состоит ли ваше приложение из отдельно развернутой клиентской и серверной частей? Насколько я понимаю, ваши клиентские модули выполняют свою работу, и вы смогли успешно раскрыть их через службу LoadBalancer. Обмениваются ли они с некоторыми серверными модулями? Определили ли вы какие-либо дополнительные сервисы для предоставления серверных модулей внешним интерфейсам?   -  person mario    schedule 05.06.2020
comment
@mario В моем приложении есть только один веб-API, который успешно работает на движке Google Kubernetes и предоставляется через тип службы балансировки нагрузки. В API все данные жестко запрограммированы, и он не вызывает никаких других служб или баз данных. Но сервис не отображается в пользовательском интерфейсе Jagger.   -  person CodeZila    schedule 06.06.2020
comment
@mario, пожалуйста, проверьте мое обновление в вопросе   -  person CodeZila    schedule 06.06.2020
comment
переменной среды jaegerHost назначается IP-адрес созданной службы jaeger. - вы имеете в виду kubernetes Service в этом контексте? Не могли бы вы также рассказать немного о том, как вы развернули его на кубернетах? Это управляется Deployment или, может быть, StatefulSet? Я не уверен, что вам не нужно устанавливать jaegerHost через jaeger_host env var, а не на полное доменное имя Pod ... Я предполагаю, что он должен иметь возможность привязки к адресу хоста. Может быть, даже localhost будет правильным значением? И еще одна деталь ... вы установили jaeger_host env var или jaegerHost, как написали в своем вопросе?   -  person mario    schedule 10.06.2020


Ответы (1)


Сервис jaeger-agent должен выглядеть так:

apiVersion: v1
kind: Service
metadata:
  name: jaeger-agent
  namespace: jaeger
  labels:
    app: jaeger
    app.kubernetes.io/name: jaeger
    app.kubernetes.io/component: agent
spec:
  type: LoadBalancer
  ports:
  - name: agent-compact
    port: 6831
    protocol: UDP
    targetPort: 6831
  - name: agent-binary
    port: 6832
    protocol: UDP
    targetPort: 6832
  - name: agent-configs
    port: 5778
    protocol: TCP
    targetPort: 5778
  selector:
    app.kubernetes.io/name: jaeger
    app.kubernetes.io/component: all-in-one

Не используйте IP, используйте полное доменное имя. Сначала попробуйте жестко запрограммировать значение для jaegerHost

string jaegerHost = "jaeger-agent.jaeger";

где jaeger-agent - имя сервиса, jaeger - пространство имён сервиса

Также вам следует создать jaeger-collector сервис

person Roman Marusyk    schedule 12.06.2020