2014-10-10 3 views
5

Мы используем Amazon Kinesis (служба очереди) и читаем на очереди читателей на Java. Они в основном читают из очереди и вставляют данные в наш хранилище данных. Мне было интересно, удалось ли кому-либо добиться успеха в использовании новой реликвии для мониторинга фоновых сотрудников очереди?Новая реликвия для мониторинга работ Amazon Kinesis

Некоторые аналитики меня интересуют:

  1. Сколько очередей рабочих работает прямо сейчас? (они масштабируются вверх и вниз по нагрузке)
  2. Сколько сообщений в секунду занимает каждый рабочий стол очереди? Как это выглядит со временем?
  3. Сколько сообщений в секунду занимает весь рабочий флот?
  4. Рабочие запрашивают как MySQL, так и Cassandra. Какая часть их времени тратится на это?
  5. Мы регистрируемся с log4j. Если рабочие порождают ошибки/следы, каковы они? Каков коэффициент ошибок с течением времени?

Спасибо,

Advait

ответ

2

New Relic не имеет каких-либо проблем мониторинга пакетных заданий, в отличие от веб-транзакций, так что не будет проблемой.

Предполагая, что вы начинаете с приложения Java, для которого у вас есть исходный код, лучший путь вперед - использовать API-интерфейс агента: https://docs.newrelic.com/docs/agents/java-agent/custom-instrumentation/java-agent-api. Это оставляет вам хорошее место, чтобы сообщать о любых показателях, которые вам нравятся, даже если мы не записываем их автоматически. Я отвечу на ваши вопросы 1 по 1:

1) У нас есть несколько способов разрезать этот пирог, но самый простой из них, о котором я могу думать, - сделать NewRelic.recordMetric («Custom/Queue_worker/alive», 1) вызов. У меня просто был бы таймер, чтобы совершать этот звонок один раз в минуту (так как это наш цикл сбора метрик) для каждого рабочего. Затем в пользовательской панели (https://docs.newrelic.com/docs/apm/dashboards-menu/custom-dashboards) вы можете игнорировать значения показателей (которые будут усреднены), поэтому, если у вас нет мастера, который «знает» значение и может просто сообщать об этом так часто, как вы хотите, вы не получите желаемого эффект путем сообщения 1 + 1 + 1 ... = 1). Вы будете отображать поле call_count, чтобы увидеть, сколько рабочих заработало эту минуту.

2) В этом случае вы хотели бы использовать тот же шаблон, что и выше, за исключением создания другого настраиваемого показателя для каждого работника. К счастью, пользовательские панели помогают справиться с тяжелым подъемом здесь - что-то вроде NewRelic.recordMetric («Custom/Queue_worker/y/number_of_messages», x) для x = количество обработанных сообщений, y = некоторый уникальный идентификатор (случайное значение GUID?) на одного работника ... через минуту - и тогда вы можете просто нарисовать Custom/Queue_worker/*/number_of_messages, чтобы все они были выложены на одном и том же графике.

3) каждый работник представляет один и тот же пользовательский показатель, Custom/queue_worker/message_sent и счетчик графов на эту метрику. Еще раз вы не можете просто сообщить значение для каждого работника, так как последующие метрические данные будут усреднены вместе, но мы сохраним хороший счетчик звонков для вас.

4) вы получите MySQL время бесплатно (при условии, что вы используете соединитель mysql или JDBC, указанный здесь: https://docs.newrelic.com/docs/agents/java-agent/getting-started/new-relic-java#h2-compatibility) - он будет отображаться как «база данных» в ваших графиках и транзакционных трассировках. Для Cassandra у нас нет специальных инструментов, но вы можете снова использовать API-интерфейс агента (рекомендуется NewRelic.recordResponseTimeMetric()), чтобы хотя бы записать это и рассчитать его отдельно.

5) Вы получаете коэффициент ошибок бесплатно, если ваши ошибки состоят из необработанных исключений - или вы можете сделать вызов API в любое время, когда вы обрабатываете исключение (или любое условие ошибки, которое вы хотите пометить) в NewRelic. noticeError(). Кроме того, если ошибки возникают как необработанные исключения (аккуратный трюк: обрабатывайте исключение в своем коде, а затем сверьте его, чтобы наш агент увидел его с контекстом), вы получите трассировку стека и любые метаданные о транзакции, записанный с помощью NewRelic.addCustomParameter(). Мы не обрабатываем лог-файл, хотя вы можете написать очень маленькую программу для обработки и импорта показателей с использованием вышеуказанных методов, и поскольку мы лицензируем для каждого хоста, а не для агента, вы можете запустить это на уже лицензированной за дополнительную плату.

Есть много более простых способов сделать это с помощью Insights (https://docs.newrelic.com/docs/insights/new-relic-insights) - например, вы можете получить доступ к списку работающих агентов с течением времени без дополнительной работы, и вы можете сообщить номера, которые не будут усреднены, на которых вы можете делать математику и графовать их. Но это отдельный продукт, и я не пытаюсь вас разогнать :)

примечание: Я работаю над новой реликвией.

Смежные вопросы