Мы уже писали, что такое Kafka Connect и как этот инструмент обеспечивает потоковую передачу данных между Apache Kafka и другими системами на примере интеграции с Elasticsearch. Сегодня рассмотрим новый коннектор, который позволяет загружать данные из топиков Apache Kafka в платформу удаленного мониторинга работоспособности мобильных и веб-приложений New Relic через гибкий REST API. Читайте далее про мониторинг телеметрии и событийно-потоковую обработку данных в виде JSON-конфигураций.
Телеметрия приложений или за чем следить будем
Прежде всего, поясним, что такое New Relic и зачем это нужно. New Relic – это телеметрическая платформа удаленного мониторинга мобильных и веб-приложений, которая позволяет собирать, исследовать и получать оповещения обо всех данных телеметрии из любого источника в одном месте. Готовая интеграция с open-source инструментами упрощает настройку, устраняя затраты и сложности работы с дополнительными хранилищами данных. Удобные дэшборды в веб-GUI включают возможности онлайн-аналитики всех логов, метрик, событий, пользовательских и технических данных, упрощая работу администратора и дата-инженера [1].
А аналитик сможет эффективно работать с бизнес-метриками и быстро понять, как сбои транзакций и прочих бизнес-операций зависят от проблем с производительностью системы. Для сбора данных New Relic использует .NET Profiling API, когда агенты мониторинга регистрируются как профайлеры CLR при запуске приложения. Это не требует изменения кода приложения. Агенты New Relic перехватывают CLR вызовы и сохраняют их в репозиторий [2], в качестве которого может выступать Apache Kafka – масштабируемая платформа сбора и агрегации потоковых данных. Кроме того, Kafka может выполнять роль источника данных для New Relic. Интеграция платформ обеспечивается с помощью коннектора New Relic для Kafka Connect, о котором мы поговорим далее.
New Relic выделяет 4 категории вида телеметрии [3]:
- метрики (metrics) – числовые показатели, агрегированные по времени, такие как количество событий в секунду, или текущие, например, температура процессора в настоящий момент. Есть 3 категории метрик: датчик (Gauge), например, температура, использование ЦП и памяти; количество (Count), например, попадание в кэш и количество потоков за интервал отчетности; сводка (Summary), такие как количество или продолжительность транзакций и очередей.
- события (events) – действия, случившиеся в системе, например, изменение настройки сервера или пользовательский клик мышью;
- логи (logs) о производительности приложений и инфраструктуры (события и ошибки), которые нужны, чтобы сократить среднее время разрешения и устранять неполадки;
- трассировки (traces), которые показывают путь запроса через несколько приложений и служб, от начала до конца, чтобы найти узкие места и ошибки производительности. Поскольку запросы перемещаются между сервисами, каждый сегмент записывается как интервал, который представляет время, потраченное на службы или ресурсы этих служб. Все отрезки запроса объединяются в единую распределенную трассировку, предоставляя целостную картину всего запроса.
Примечательно, что коннектор берет на себя всю обработку ошибок: например, если сообщения не соответствуют рекомендуемому формату, их можно перенаправить их в очередь недоставленных сообщений, прервать обработку, если некорректное сообщение прочитано, или продолжать обработку данных несмотря ни на что. Подробнее про очередь недоставленных сообщений и варианты работы с ними мы рассказывали здесь. В частности, некорректный ключ API немедленно завершит работу коннектора, при сетевой ошибке коннектор будет повторять попытку до установленного лимита, а если нагрузка слишком велика, коннектор разорвет соединение и повторит попытку, пока не отправит все заново.
На октябрь 2020 года коннектор New Relic к Apache Kafka поддерживает только типы данных телеметрии метрика (Metric) и событие (Event). Однако, в ближайшее время ожидается поддержка и оставшихся типов данных телеметрии: логи (Log) и трассировки (Trace) [4]. Далее мы рассмотрим, как ведется обработка метрик и событий.
Как создать и настроить коннекторы событий и метрик New Relic в Kafka Connect
Для создания коннектора событий в Kafka Connect используется JSON-код:
{
«name»: «events-connector»,
«config»: {
«connector.class»: «com.newrelic.telemetry.events.TelemetryEventsSinkConnector»,
«value.converter»: «com.newrelic.telemetry.events.EventsConverter»,
«topics»: «nrevents»,
«api.key»: «»
}
}
Этот JSON-код создаст коннектор с именем events-connector, который начнет получать сообщения из топика Apache Kafka под названием nrevents. Пример сообщения о событии выглядит следующим образом, при этом поле метки времени (timestamp) в полезной нагрузке должно быть эпохой Unix в миллисекундах:
[
{
«eventType»:»Purchase»,
«account»:3,
«Amount»:259.54,
«timestamp»:<CURRENT_TIMESTAMP>
},
{
«eventType»:»Purchase»,
«account»:5,
«amount»:12309,
«product»:»Item»,
«timestamp»:<CURRENT_TIMESTAMP>
}
]
Важно, что сообщения в топике Kafka должны соответствовать этому JSON-формату. Для события поля eventType и timestamp обязательны. EventsConverter отвечает за проверку этих сообщений и помечает их как ошибки, если они не соответствуют требуемому формату.
Для создания коннектора метрик используется следующий JSON-код:
{
«name»: «metrics-connector»,
«config»: {
«connector.class»: «com.newrelic.telemetry.events.TelemetryMetricsSinkConnector»,
«value.converter»:»com.newrelic.telemetry.metrics.MetricsConverter»,
«value.converter.schemas.enable»: false,
«topics»: «nrmetrics»,
«api.key»: «»
}
}
Эта конфигурация создаст коннектор с именем metrics-connector, который будет принимать показатели из раздела nrmetrics. На практике нужно заменить <NEW_RELIC_API_KEY> на реальный ключ API от платформы New Relic, а также убедиться, что используется корректная текущая метка времени (timestamp). В этом примере JSON-сообщения создаются три разных метрики типа Count, Gauge и Summary.
[
{
«metrics»: [
{
«name»: «cache.misses»,
«type»: «count»,
«value»: 15,
«timestamp»: <CURRENT_TIMESTAMP>,
«interval.ms»: 10000,
«attributes»: {
«cache.name»: «myCache»,
«host.name»: «dev.server.com»
}
},
{
«name»: «temperature»,
«type»: «gauge»,
«value»: 15,
«timestamp»: <CURRENT_TIMESTAMP>,
«attributes»: {
«city»: «Portland»,
«state»: «Oregon»
}
},
{
«name»: «service.response.duration»,
«type»: «summary»,
«value»: {
«count»: 5,
«sum»: 0.004382655,
«min»: 0.0005093,
«max»: 0.001708826
},
«interval.ms»: 10000,
«timestamp»: <CURRENT_TIMESTAMP>,
«attributes»: {
«host.name»: «dev.server.com»,
«app.name»: «foo»
}
}
]
}
]
Как уже было отмечено выше, можно запустить повторную обработку в случае проблем с сетью, используя два дополнительных поля в JSON-конфигурации [4]:
- max.retries – максимальное количество попыток, по умолчанию равно 5;
- retry.interval.ms – интервал между повторными попытками в миллисекундах, по умолчанию 1000.
Как еще использовать Kafka Connect, чтобы обеспечить интеграцию Apache Kafka с другими Big Data системами, а также организовать эффективное администрирование и эксплуатацию Кафка для потоковой обработки и хранения больших данных в проектах цифровизации частного бизнеса, государственных и муниципальных предприятий, вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники
- https://newrelic.com/platform/telemetry-data-platform
- https://habr.com/ru/company/microsoft/blog/272467/
- https://docs.newrelic.com/docs/telemetry-data-platform/ingest-manage-data/understand-data/new-relic-data-types
- https://www.confluent.io/blog/kafka-connect-for-new-relic/