Использование инструментов Opentracing, таких как Jaeger
Я узнал об открытии и даже работаю над POC с Jaeger и Spring. У нас в разработке около 25+ микросервисов. Я читал об этом, но немного смущен тем, как его действительно можно использовать.
Я думаю использовать его как средство устранения неполадок, чтобы определить основную причину сбоя в приложении. Для этого мы можем искать коды httpStatus, настраиваемые теги, идентификаторы трассировки и журналы приложений в JaegerUI. Кроме того, мы можем найти узкие места / медлительность, отслеживая трассировки.
Какие еще варианты использования?
У Jaeger есть сэмплер запросов, и я думаю, что мы не должны отбирать каждый запрос в Prod, поскольку это может иметь неблагоприятные последствия. Это правда?
Если да, то почему и как это может повлиять на приложение? Думаю, в этом случае его нельзя использовать для устранения неполадок, поскольку у нас не будет данных по каждому запросу.
Какая конфигурация выборки рекомендуется для Prod?
Кроме того, чем такой инструмент, как Jaeger, отличается от инструментов APM и где он подходит? Я имею в виду, что вы можете делать что-то подобное и с инструментами APM. Например, можно детализировать транзакцию службы и перейти к соответствующему запросу к другой службе в AppDynamics. Оповещения могут быть выставлены на медленные транзакции. Можно также захватить заголовки / тело запроса, чтобы их можно было найти и т. Д.
1 ответ
Здесь много разных вопросов, и на некоторые из них нет ответов без дополнительной информации о вашей конкретной настройке, но я постараюсь дать вам хороший обзор.
Почему отслеживание?
Вы уже интуитивно поняли, что между APM и трассировкой много общего - различия минимальны. Распределенная трассировка - это расширенный набор возможностей, продаваемых как APM (мониторинг производительности приложений) и RUM (мониторинг реального пользователя), так как он позволяет вам собирать информацию о производительности работы, выполняемой в ваших сервисах, для обработки одного логического запроса по отдельности. -уровень обслуживания, а также на уровне всего запроса (или транзакции) от клиента к БД и обратно.
Данные трассировки, как и другие формы телеметрии, можно агрегировать и анализировать по-разному - например, несэмплированные данные трассировки можно использовать для генерации показателей RED (частота, ошибка, продолжительность) для заданной конечной точки API или вызова функции. Обычно данные трассировки аннотируются (помечаются) свойствами запроса или базовой инфраструктуры, обрабатывающей запрос (такие вещи, как идентификатор клиента или имя хоста сервера, обрабатывающего запрос, или раздел БД, к которому осуществляется доступ для данного запроса) это позволяет выполнять мощные исследовательские запросы в таком инструменте, как Jaeger, или в коммерческом инструменте трассировки.
Отбор проб
Общее влияние на производительность генерации трассировок варьируется. В целом библиотеки трассировки спроектированы так, чтобы быть довольно легковесными, хотя на эти накладные расходы влияет множество факторов, таких как количество атрибутов в диапазоне, связанные с ним события журнала и частота запросов службы. Такие компании, как Google, будут агрессивно проводить выборку из-за своего масштаба, но, честно говоря, выборку выгоднее рассматривать с точки зрения долгосрочного хранения, а не с точки зрения предварительных накладных расходов.
Хотя дополнительные накладные расходы на запрос для создания диапазона и передачи его на серверную часть трассировки могут быть небольшими, затраты на хранение данных трассировки с течением времени могут быстро стать непомерно высокими. Кроме того, большинство трассировок большинства систем не очень интересны. Вот почему динамический подход и выборка на основе хвостов стали более популярными. Эти системы переносят решение о выборке из отдельного уровня сервиса в какой-либо внешний процесс, такой как OpenTelemetry Collector., который может анализировать всю трассу и определять, следует ли производить выборку из нее на основе заданных пользователем критериев. Вы можете, например, обеспечить выборку любой трассы, в которой произошла ошибка, в то время как "базовые" трассы выбираются с частотой 1%, чтобы сохранить важную информацию об ошибке, давая вам представление о стабильной производительности.
Собственный APM против OSS
Одно важное различие между чем-то вроде AppDynamics или New Relic и такими инструментами, как Jaeger, заключается в том, что Jaeger не полагается на проприетарные инструментальные агенты для генерации данных трассировки. Jaeger поддерживает OpenTelemetry, что позволяет использовать инструменты с открытым исходным кодом, такие как OpenTelemetry Java Automatic Instrumentation.библиотеки, которые автоматически генерируют диапазоны для многих популярных платформ и библиотек Java, таких как Spring. Кроме того, поскольку OpenTelemetry доступен на нескольких языках с общим форматом данных и форматом контекста трассировки, вы можете гарантировать, что ваши трассировки будут правильно работать в среде полиглота (так, если у вас есть службы Node.JS или Golang в дополнение к Java служб, вы можете использовать OpenTelemetry для каждого языка, и распространение контекста трассировки будет работать без проблем между всеми ними).
Однако еще более выгодным является то, что ваши инструменты не привязаны к конкретному поставщику или инструменту. Вы можете инструментировать свой сервис с помощью OpenTelemetry, а затем отправлять данные в один или несколько инструментов анализа, как коммерческих, так и с открытым исходным кодом. Это освобождает вас от привязки к поставщику и позволяет выбрать лучший инструмент для работы.
Если вы хотите узнать больше об OpenTelemetry, наблюдаемости и других темах, я написал более длинную серию статей, которую вы можете найти здесь (ищите другие сообщения "OpenTelemetry 101").