Сегодня мы опускаем наши пальцы на собрание пользовательских метрик с автономным агентом. Мы будем принимать наши собственные брокеры Kafka и используем протокол STATSD, чтобы получить метрики в Appsignal. Этот пост предназначен для тех, кто имеет некоторый опыт использования инструментов мониторинга, и которые хотят принять мониторинг на каждый угол своей архитектуры или хотите добавить свои собственные метрики на их установку мониторинга.
Почему автономный агент
Appsignal для Ruby, Elixir и узел вне коробки дает вам все в одном мониторинге: ошибки, производительность, метрики хоста, пользовательские метрики и приборные панели.
Имея все соответствующие метрики, собранные и отправляемые в Appsignal, все данные мониторинга в одном месте. Это одна из вещей, которые мы считаем важным в отношении хорошего мониторинга:
Вам нужно иметь ошибки, производительность и метрики хоста в одном месте, и вам нужна как большая часть вашей архитектуры, как это, в одном месте.
Таким образом, вы можете сортировать со всех сторон. Например, вы можете обнаружить проблему производительности в фоновом задании, затем увидите, что это вызвано длительным ожиданием на сервере БД, а затем выяснить, что это было вызвано сетевыми проблемами на хосте базы данных.
Это работает вне коробки в приложении Ruby, Elixir или Node.js. Если у вас есть часть вашей архитектуры, запущена в системах без каких-либо RUBY, Elixir или Node.js, вы можете добавить их метрики в Appsignal, используя автономный агент. Например, когда у вас есть определенные работники делают вещи в ржавчине, или когда у вас есть автономный сервер базы данных.
Как мы делаем вне дома мониторинг
Мы используем эту настройку для мониторинга наших брокеров Kafka.
Одна из вещей, которые нам нужны, чтобы держать закрытый глаз, это доступно удержание в Кафке. Есть несколько жестких ограничений на дисковом пространстве, и нам нужно убедиться, что мы можем достичь требуемого удержания. В противном случае нам нужно расширить наш кластер.
Поскольку запросы, которые мы мониторируем для наших клиентов, могут прибавить их много метаданных, это означает, что темы Кафки могут быть огромными. Чтобы убедиться, что все не сбиваются с пути, потому что хост-диск используется полностью, мы разместили нашу настройку KAFKA на использование диска, которые мы также контролируем. 😉
Использование диска легко мониторировать, поскольку автономный Appsignal Agent автоматически отправляет метрики HOST для AppSignal прямо из коробки.
На самом деле вы можете увидеть см. В этом 30-дневном графике разрешения, когда мы сделали убрать этот диск, путь, прежде чем все пошло не так 😁
Это оставляет удержание. Удержание не доступно в стандартных метриках Кафки, поэтому мы должны найти другое решение. Мы отслеживаем удержание, глядя на первый проиндексированный меток времени каждого раздела/темы на самой брокере. Если это короче, чем установленное количество часов/дней, мы хотели бы быть уведомлены о том, что может повлиять на наших клиентов во время отключения.
Мы делаем это, используя наш инструмент мониторинга KAFKA (под названием WatchMan). Он написан в Rust, и мы используем (очень простой) статический клиентский код Statsd для отправки данных на Автономный Appsignal Agent работает на каждом брокере.
В нашем процессе WatchMan мы отправляем эти метрики удержания в Appsignal Agent, который слушает Statsd:
statsd_client.send_gauge("topic_retention_hours", (now_timestamp() - timestamp) as f32 / 3600.0, &format!("topic:{},partition:{}", topic, partition))?;
А также:
statsd_client.send_gauge("topic_retention_short", ms_short, &format!("topic:{},partition:{}", topic, partition))?;
Kafka Brokers сообщает гораздо больше метрик, с JMX как репортер по умолчанию. Поэтому кроме WatchMan, мы также отправляем эти метрики JMX на наш автономный агент, работающий на сервере.
Использование данных мониторинга с графами и триггерами
Как только эти данные попадают в AppSignal, вы можете сделать приборные панели с ним и установить триггеры, как во всем в AppSignal.
Вот что похоже на приборную панель на Appsignal:
В этом одночасовом разрешении вы на самом деле можете увидеть, как Logrotate Kafka, который бросает их раз в то время как раз. Вы можете заметить это, происходящее с каждым внезапным падением в линии.
Затем мы можем настроить триггеры, когда topic_retedente_short
выше 0 мс
Таким образом, мы будем предупреждены, когда отметка времени указывает, что удержание короче указанного времени. Это поможет нам внести обоснованные решения о том, какие темы предотвращают больше дискового пространства или какого воздействия потока сообщений на время удержания.
Округлять
Это завершает наш маленький погружение в использование автономного агента Statsd, чтобы получить данные о мониторировании данных и того, как мы appsignal.
Это не единственный способ получить пользовательские метрики в Appsignal, хотя из вашего приложения Ruby/Elixir/Node.js вы также можете добавить любую метрику, который вы хотите. Если вы хотите настроить это самостоятельно, прочитайте его в документации о Пользовательские метрики или документация о Автономный агент Отказ
Придавать Большое благодаря Роберта и Тиху. Я набрал блогпост, но ваш мозг написал это 😉
Оригинал: «https://dev.to/appsignal/how-appsignal-monitors-their-own-kafka-brokers-g65»