попасть внутрь акка и спрей

Kamon - это инструмент мониторинга JVM; он работает, проверяя / переплетая ваш код и профилируя его в режиме реального времени. Что отличает Kamon от visualVM и других инструментов JVM, так это то, что он отлично подходит для akka. Другие инструменты JVM позволяют глубоко анализировать потоки, выполняемые на виртуальной машине; они не подходят для мониторинга событийной и асинхронной системы, такой как akka .

На этом уровне нам нужен глубокий анализ сообщений, обрабатываемых потоком; akka не упаковывает расширение мониторинга; Камон спешит на помощь: D

Как работает Камон

Камон работает, используя аспектJ и контекст трассировки. Он использует аспектJ для запуска кода; он подключается к вызовам метода, выполняемым akka's actorSystem; с помощью этого хука Камон может отслеживать и собирать метрики в системе akka в реальном времени. Большим преимуществом этого инструментария является то, что он требует небольшого изменения кода в нашем приложении.

Теперь мы можем отслеживать наше приложение, цель которого - собрать локальные метрики для каждого актора и поток сообщений между акторами. Это дает нам более ясную картину того, что на самом деле происходит в системе акка. С помощью Kamon мы также можем отслеживать показатели JVM и системы.

Но почему мы должны отслеживать?

  1. Знайте общее состояние нашего приложения
  2. Проверить безопасность кода
  3. Проверить отказоустойчивость приложений
  4. Знайте производительность приложений

Что касается мониторинга акка, нас интересует поиск;

  1. Пропускная способность актера
  2. Задержка актера
  3. # обработанных сообщений
  4. Средний размер почтового ящика на актера
  5. Обработанных сообщений на актера
  6. Среднее время, потраченное на сообщение, находится в почтовом ящике - насколько быстро актер работает

Начало работы с Камоном

Обновите sbt и добавьте зависимости камона.

"io.kamon"    %% "kamon-core"           % kamonVersion,
"io.kamon"    %% "kamon-annotation"     % kamonVersion,
"io.kamon"    %% "kamon-akka"           % kamonVersion,
"io.kamon"    %% "kamon-statsd"         % kamonVersion,
"io.kamon"    %% "kamon-spray"          % kamonVersion,
"io.kamon"    %% "kamon-log-reporter"   % kamonVersion,
"io.kamon"    %% "kamon-system-metrics" % kamonVersion,
"org.aspectj" %  "aspectjweaver"        % "1.8.1",

Полная Build.scala здесь. Мы добавляем зависимость sbt (plugins.sbt) рядом, чтобы позволить нам загружать агент aspectJ при вызове run. Также важно, чтобы репортер журнала регистрировал каждую метрику, отправляемую в statsD (графит). И kamon-akka, и kamon-spray для работы нуждаются в зависимости aspectJ; другие модули используют трассировку, что позволяет использовать инструменты байт-кода для сбора показателей и выполнения распространения TraceContext на akka.

addSbtPlugin("com.typesafe.sbt" % "sbt-aspectj" % "0.10.0")

Затем мы обновляем наш application.conf и добавляем ключ kamon.

Затем мы должны запустить Kamon, чтобы опубликовать показатели, вызвав его метод start.

import kamon.Kamon
Kamon.start

На ключе kamon мы добавляем бэкэнд statsD, где будем публиковать нашу статистику; и интервал, который мы хотим отслеживать. Полный application.conf здесь.

При сборке с sbt; вам нужно будет разработать стратегию слияния для конфликтов. Здесь есть образец файла слияния aop.

Настройка бэкэнда statsD и Grafana

Kamon-statsd использует statsD и графический сервер для публикации статистики; это делается по UDP; с очевидным преимуществом быть очень быстрым. Мы используем Grafana для визуализации этих показателей, которые публикует Камон. Благодаря ребятам из kamon у нас есть образ докера, который мы можем установить, этот образ объединяет statsD, graphite и Grafana и позволяет нам легко настроить.

Идеальная установка для мониторинга

Недостатки

Камон великолепен; Однако исправление обезьяны стоит дорого, и если некоторые части не будут отключены, ваша производительность резко снизится. Камон - молодой проект, но он растет.

«Помните, что получение трассировки стека при каждом использовании шаблона запроса не дается бесплатно. При использовании тяжелого режима Камон создает новое исключение и сохраняет трассировку своего стека в течение всего времени существования запроса, что потребует дополнительных ресурсов ЦП и памяти ». - Камон документы