Задачи отчетности (Reporting Tasks)
В первой статье мы рассмотрели вопросы мониторинга потоков данных и состояния системы средствами GUI NiFi. Теперь рассмотрим, как передать необходимые метрики и отчеты об ошибках и состоянии кластера во внешние системы. NiFi предоставляет возможность сообщать о состоянии, статистике, показателях и информации мониторинга внешним службам с помощью интерфейса задач отчетности (Reporting Task).
Apache NiFi предоставляет несколько вариантов задач отчетности для поддержки внешних систем мониторинга, таких как Ambari, Grafana, Prometheus и т. д. Разработчик может создать пользовательскую задачу отчетности или настроить встроенные задачи для отправки метрик NiFi во внешние системы мониторинга.
Задачи отчетности:
PrometheusReportingTask – отчеты о метриках в формате Prometheus путем создания endpoint /metrics, которую можно использовать для внешнего мониторинга приложения;
AmbariReportingTask – для настройки службы метрик Ambari для NiFi;
MetricsReportingTask – эта задача создания отчетов передает набор показателей, касающихся JVM и экземпляра NiFi, для отчета, предоставляемого сервисом MetricReporterService;
ScriptedReportingTask – предоставляет отчеты и информацию о состоянии для последующего процессинга в скрипте;
ControllerStatusReportingTask – записывает 5-минутную статистику, которая отображается на сводной странице NiFi для процессоров и подключений;
MonitorDiskUsage – предоставляет отчет и предупреждения об использовании дискового пространства;
MonitorMemory – для мониторинга объема Java heap, используемого в пуле памяти Java JVM;
DataDogReportingTask – публикует метрики из NiFi в платформа мониторинга и аналитики для крупномасштабных приложений Datadog;
StandardGangliaReporter – предоставляет метрики в Ganglia для внешнего мониторинга приложения.
Задачи отчетности выполняются в фоновом режиме для предоставления статистических отчетов о том, что происходит в экземпляре NiFi. DFM (DataFlow manager) добавляет и настраивает задачи создания отчетов аналогично процессу для служб контроллеров. Чтобы добавить задачу создания отчетов, выберите «Настройки контроллера» в глобальном меню:
Отобразится окно настроек NiFi. Выберите вкладку “Reporting Tasks” и нажмите кнопку + в правом верхнем углу, чтобы создать новую “Reporting Task”.
После добавления задачи создания отчетов DFM может настроить ее, нажав кнопку «Изменить» в крайнем правом столбце. Другие кнопки в этом столбце включают «Пуск», «Удалить», «Состояние» и «Политики доступа».
Вы можете получить информацию о задачах создания отчетов, нажав кнопки «Просмотр сведений», «Использование» и «Оповещения» в левом столбце.
Когда DFM нажимает кнопку «Редактировать», открывается окно «Настройка задачи создания отчетов». В окне есть три вкладки: «Настройки», «Свойства» и «Комментарии». Это окно аналогично окну «Настройка процессора». На вкладке «Настройки» DFM может присвоить задаче создания отчетов уникальное имя (при желании). Он также содержит информацию об UUID, типе и пакете для задачи и предоставляет настройки для стратегии планирования задачи и расписания выполнения (аналогично тем же настройкам в процессоре). DFM может навести указатель мыши на значок вопросительного знака, чтобы увидеть больше информации о каждом свойстве настройки.
На вкладке «Свойства» перечислены различные свойства, которые можно настроить для задачи.
Вкладка «Комментарии» — это просто открытое текстовое поле, в котором DFM может хранить комментарии к задаче. После настройки задачи создания отчетов нажмите «Применить» ("Apply"), чтобы сохранить конфигурацию и закрыть окно, или нажмите «Отмена» ("Cancel"), чтобы отменить изменения и закрыть окно.
Если вы хотите запустить задачу создания отчетов, нажмите кнопку «Пуск» ("Start" ).
PrometheusReportingTask
Отчеты о метриках в формате Prometheus путем создания конечной точки http/metrics, которую можно использовать для внешнего мониторинга приложения. Задача создания отчетов сообщает набор показателей, касающихся JVM (необязательно) и экземпляра NiFi.
Описание параметров
Название |
Значение по умолчанию |
Допустимые значения |
Описание |
Prometheus Metrics Endpoint Port |
9092 |
Порт, через который можно получить доступ к метрикам prometheus |
|
Instance ID |
${hostname(true)} |
Идентификатор экземпляра NiFi, который будет включен в метрики, отправляемые в Prometheus |
|
Metrics Reporting Strategy |
All Components |
* Root Process Group * All Process Groups * All Components |
Степень детализации отчетов о метриках. Параметры включают только корневую группу процессов, все группы процессов или все компоненты |
Send JVM metrics |
false |
* true * false |
Отправлять метрики JVM в дополнение к метрикам NiFi |
SSL Context Service |
Controller Service API: RestrictedSSLContextService |
Служба контекста SSL, используемая для защиты сервера. Если указано, сервер будет принимать только HTTPS-запросы.В противном случае сервер будет принимать только HTTP-запросы |
|
Client Authentication |
No Authentication |
* No Authentication * Want Authentication * Need Authentication |
Указывает, должна ли задача создания отчетов выполнять аутентификацию клиентов. Это значение игнорируется, если свойство <SSL Context Service> не указано или предоставленный контекст SSL использует только KeyStore, а не TrustStore |
Для настройки prometheus на наш NiFi необходимо добавить в конфигурационный файл prometheus.yml следующую секцию:
- job_name: "nifi"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["10.3.100.4:9092"]
В GUI Prometheus в меню “Status” необходимо выбрать “Targets” и убедиться, что наш адрес добавлен и активен.
Как пример средства для визуализации мониторинга можно использовать Grafana.
Первым шагом добавим Prometheus в качестве источника данных:
PrometheusReportingTask позволяет собирать следующие метрики:
№ |
Название метрики |
Описание |
1 |
nifi_total_bytes_written |
Текущее общее количество байтов, записанных компонентом |
2 |
nifi_total_bytes_read |
Текущее общее количество байтов, прочитанных компонентом |
3 |
nifi_total_bytes_sent |
Текущее общее количество байтов, отправленных компонентом |
4 |
nifi_total_bytes_received |
Текущее общее количество байтов, полученных компонентом |
5 |
nifi_amount_bytes_written |
Общее количество байтов, записанных компонентом |
6 |
nifi_amount_bytes_read |
Общее количество байтов, прочитанных компонентом |
7 |
nifi_amount_bytes_transferred |
Общее количество байтов, переданных компонентом |
8 |
nifi_amount_bytes_sent |
Общее количество байтов, отправленных компонентом |
9 |
nifi_amount_bytes_received |
Общее количество байтов, отправленных компонентом |
10 |
nifi_amount_threads_terminated |
Общее количество потоков, прерванных для компонента |
11 |
nifi_total_task_duration |
Продолжительность потоков в миллисекундах, которые компонент использовал для выполнения своих задач за последние 5 минут |
12 |
nifi_average_lineage_duration |
Средняя продолжительность очереди (в миллисекундах) для всех потоковых файлов, обработанных этим компонентом. |
13 |
nifi_amount_threads_active |
Общее количество потоков, активных для компонента |
14 |
nifi_amount_flowfiles_received |
Общее количество FlowFile, полученных компонентом |
15 |
nifi_amount_flowfiles_sent |
Общее количество FlowFile, отправленных компонентом |
16 |
nifi_amount_flowfiles_transferred |
Общее количество FlowFiles, переданных компонентом |
17 |
nifi_amount_flowfiles_removed |
Общее количество FlowFiles, удаленных компонентом |
18 |
nifi_amount_items_output |
Общее количество элементов, выводимых компонентом |
19 |
nifi_amount_items_queued |
Общее количество элементов, поставленных компонентом в очередь |
20 |
nifi_amount_items_input |
Общее количество элементов, введенных компонентом |
21 |
nifi_size_content_output_total |
Общий размер контента, выводимого компонентом |
22 |
nifi_size_content_input_total |
Общий размер контента, принимаемого компонентом |
23 |
nifi_size_content_queued_total |
Общий размер контента, поставленного в очередь в компонент |
24 |
nifi_transmitting |
Передает ли этот компонент данные. Значения 0 или 1 |
25 |
nifi_backpressure_object_threshold |
Количество потоковых файлов, которые можно поставить в очередь, прежде чем будет применено обратное давление |
26 |
nifi_backpressure_bytes_threshold |
Количество байтов, которое может быть поставлено в очередь до применения обратного давления |
27 |
nifi_backpressure_enabled |
Было ли применено обратное давление для этого компонента. Значения 0 или 1 |
28 |
nifi_percent_used_count |
Процент заполнения соединений на основе количества FlowFile. |
29 |
nifi_percent_used_bytes |
Процент заполнения соединений, на основе байтов содержимого |
30 |
nifi_active_remote_port_count |
Количество активных удаленных портов, связанных с этим компонентом |
31 |
nifi_inactive_remote_port_count |
Количество неактивных удаленных портов, связанных с этим компонентом |
Метрики JVM | ||
32 |
nifi_jvm_heap_used |
Размер используемой кучи NiFi JVM |
33 |
nifi_jvm_heap_usage |
% использования кучи NiFi JVM |
34 |
nifi_jvm_heap_non_usage |
Куча NiFi JVM не используется |
35 |
nifi_jvm_file_descriptor_usage |
Использование файловых дескрипторов NiFi JVM |
36 |
nifi_jvm_daemon_thread_count |
Количество запущенных потоков демона NiFi JVM |
37 |
nifi_jvm_thread_count |
Количество запущенных потоков NiFi JVM |
38 |
nifi_jvm_gc_runs |
NiFi JVM GC количество прогонов |
39 |
nifi_jvm_gc_time |
NiFi JVM GC время в миллисекундах |
40 |
nifi_jvm_uptime |
Время безотказной работы NiFi JVM |
Далее, базируясь на метриках, собираемых PrometheusReportingTask, построим дашборд для мониторинга:
AmbariReportingTask
Публикует метрики из NiFi в службу метрик Ambari (AMS). Из-за того, как работает служба метрик Ambari, эта задача создания отчетов должна запускаться каждые 60 секунд. На каждой итерации задача будет отправлять метрики из предыдущей итерации и вычислять текущие метрики, которые будут отправлены на следующей итерации. Планирование этой задачи создания отчетов с периодичностью, отличной от 60 секунд, может привести к неожиданным результатам.
Настройки задачи отчетности указаны ниже в таблице:
Свойство |
Значение по умолчанию |
Описание |
Metrics Collector URL |
http://localhost:6188/ws/v1/timeline/metrics |
URL-адрес службы сбора метрик Ambari |
Application ID |
nifi |
Идентификатор приложения, который будет включен в метрики, отправляемые в Ambari |
Hostname |
${hostname(true)} |
Имя хоста этого экземпляра NiFi, которое будет включено в метрики, отправляемые в Ambari |
Process Group ID |
|
Если указано, задача создания отчетов будет отправлять метрики только для этой группы процессов. Если нет, используется корневая группа процессов и отправляются глобальные метрики |
Задача отчетности отправляет в Ambari следующие показатели:
№ |
Название показателя |
Описание |
|
1 |
FlowFilesReceivedLast5Minutes |
Количество FlowFiles, полученных за последние 5 минут |
|
2 |
BytesReceivedLast5Minutes |
Количество байт, полученных за последние 5 минут |
|
3 |
FlowFilesSentLast5Minutes |
Количество файлов FlowFiles, отправленных за последние 5 минут |
|
4 |
BytesSentLast5Minutes |
Количество байт, отправленных за последние 5 минут |
|
5 |
FlowFilesQueued |
Количество FlowFiles в очереди |
|
6 |
BytesQueued |
Количество байт в очереди |
|
7 |
BytesReadLast5Minutes |
Количество байт, прочитанных за последние 5 минут |
|
8 |
BytesWrittenLast5Minutes |
Количество байт, записанных за последние 5 минут |
|
9 |
ActiveThreads |
Количество активных потоков |
|
10 |
TotalTaskDurationSeconds |
Общее количество потоков в секундах, которые компонент использовал для выполнения своих задач |
|
Метрики JVM | |||
1 |
jvm.uptime |
Отображает, как долго выполняется процесс Java. Вы можете использовать эту метрику для отслеживания продолжительности жизни процесса Java и любых неожиданных перезапусков |
|
2 |
jvm.heap_used |
Отображает объем памяти, используемый процессом JVM. Для NiFi конфигурация по умолчанию составляет 512 МБ |
|
3 |
jvm.heap_usage |
Процент используемой кучи JVM |
|
4 |
jvm.non_heap_usage |
Процент, используемый JVM (память вне кучи) |
|
5 |
jvm.thread_states.runnable |
Количество запущенных потоков в JVM |
|
6 |
jvm.thread_states.blocked |
Количество заблокированных потоков в JVM |
|
7 |
jvm.thread_states.timed_waiting |
Количество ожидающих по времени потоков в JVM |
|
8 |
jvm.thread_states.terminated |
Количество прекращенных потоков в JVM |
|
9 |
jvm.thread_count |
Количество потоков в JVM |
|
10 |
jvm.daemon_thread_count |
Отображает количество запущенных потоков демона. Поток демона — это поток, который не препятствует выходу JVM после завершения программы, даже если поток все еще выполняется |
|
11 |
jvm.file_descriptor_usage |
Показывает количество подключений к операционной системе. Вы можете отслеживать этот показатель, чтобы убедиться, что ваши файловые дескрипторы JVM или соединения открываются и закрываются по мере выполнения задач |
|
12 |
jvm.gc.runs |
количество запусков сборщика мусора (GC) garbage collector |
|
13 |
jvm.gc.time |
GC время в миллисекундах |
Чтобы использовать эти показатели в Ambari, необходимо создать и установить службу NIFI в Ambari. Пожалуйста, обратитесь к документации Ambari и NiFi для получения дополнительной информации. Рекомендую ознакомиться со статьей Пьера Вилларда [2].
MetricsReportingTask
Эта задача создания отчетов передает набор показателей, касающихся JVM и экземпляра NiFi, для отчета, предоставляемого сервисом MetricReporterService.
При необходимости его можно использовать для определенной группы процессов, если указано свойство с идентификатором группы.
Свойство |
Допустимые значения |
Описание |
Metric Reporter Service |
Controller Service API: Implementation: |
Сервис, предоставляющий отчет для собранных метрик |
Process Group ID |
|
Идентификатор группы процессов для отчета. Если не указано, выводятся метрики корневой группы процессов |
Для работы данной задачи отчётности необходимо настроить службу контроллера GraphiteMetricReporterService, которая передает метрические отчеты для Graphite.
Graphite — это корпоративный инструмент мониторинга, который одинаково хорошо работает как на дешевом оборудовании, так и на облачной инфраструктуре. Команды используют Graphite для отслеживания производительности своих веб-сайтов, приложений, бизнес-служб и сетевых серверов. Graphite относится к новому поколению инструментов мониторинга, упрощающих хранение, извлечение, совместное использование и визуализацию данных временных рядов.
Свойство |
Значение по умолчанию |
Описание |
Host |
|
Имя хоста прослушивателя carbon |
Port |
|
Имя порта прослушивателя carbon |
Charset |
UTF-8 |
Кодировка, используемая сервером graphite |
Metric Name Prefix |
nifi |
Префикс, который будет использоваться для всех имен метрик, отправляемых генераторами отчетов, предоставляемыми этой службой |
ScriptedReportingTask
Предоставляет отчеты и информацию о состоянии для дальнейшего процессинга в скрипте. Объекты ReportingContext, ComponentLog и VirtualMachineMetrics становятся доступными в виде переменных (context, log и vmMetrics – соответственно) в скрипте для дальнейшей обработки. Context делает доступной различную информацию, такую как события, происхождение, бюллетени, службы контроллера, группы процессов, метрики виртуальной машины Java и т. д.
Свойство |
Значение по умолчанию |
Допустимые значения |
Описание |
Script Engine |
Clojure |
* Clojure * ECMAScript * Groovy * lua * python * ruby |
Движок для выполнения скриптов |
Script File |
|
|
Путь к файлу скрипта для выполнения. Можно использовать только одно свойство или Script File или Script Body |
Script Body |
|
|
Содержимое скрипта для выполнения. Можно использовать только одно свойство или Script File или Script Body |
Module Directory |
|
|
Разделенный запятыми список путей к файлам и/или каталогам, которые содержат модули, требуемые для скрипта |
ControllerStatusReportingTask
Задача отчетности записывает пятиминутную статистику, которая отображается на сводной странице NiFi для процессоров и подключений, а также при необходимости регистрирует дельты между предыдущей и текущей итерацией.
Статистика процессоров регистрируется с помощью регистратора org.apache.nifi.controller.ControllerStatusReportingTask.Processors, а статистика соединений регистрируется с помощью регистратора org.apache.nifi.controller.ControllerStatusReportingTask.Connections. При желании их можно настроить в конфигурации ведения журнала NiFi для записи в разные файлы.
Свойство |
Значение по умолчанию |
Допустимые значения |
Описание |
Show Deltas |
true |
* true * false |
Указывает, показывать ли разницу в значениях между текущим статусом и предыдущим статусом |
Reporting Granularity |
Five Minutes |
* Five Minutes * One Second |
Интервал отчетности. По умолчанию пять минут |
Задача отчетности создает сообщение журнала для каждого процессора и каждого соединения в потоке. Для процессоров включена следующая информация (отсортированная по убыванию времени обработки):
Параметр |
Описание |
Processor Name |
Имя процессора |
Processor ID |
Идентификатор процессора |
Processor Type |
Тип процессора |
Run Status |
Статус выполнения |
Flow Files In (5 mins) |
Количество Flow Files на вход (за 5 мин.) |
FlowFiles Out (5 mins) |
Количество Flow Files на выход (за 5 мин.) |
Bytes Read from Disk (5 mins) |
Количество байт, прочитанные с диска (за 5 мин.) |
Bytes Written to Disk (5 mins) |
Количество байт, записанных на диск (за 5 мин.) |
Number of Tasks Completed (5 mins) |
Количество выполненных задач (5 мин.) |
Processing Time (5 mins) |
Время обработки (5 минут) |
Для соединений включена следующая информация (отсортированная по убыванию размера FlowFiles в очереди):
Параметр |
Описание |
Connection Name |
Название соединения |
Connection ID |
Идентификатор соединения |
Source Component Name |
Имя исходного компонента |
Destination Component Name |
Имя целевого компонента |
Flow Files In (5 mins) |
Количество Flow Files на вход (за 5 мин.) |
FlowFiles Out (5 mins) |
Количество Flow Files на выход (за 5 мин.) |
FlowFiles Queued |
Количество FlowFiles в очереди |
Может оказаться удобным перенаправить вывод журнала этой задачи отчетности в отдельный файл журнала, а не в обычный журнал приложения.
Этого можно добиться, изменив файл logback.xml в каталоге NiFi conf/ таким образом, чтобы регистратор с именем org.apache.nifi.controller.ControllerStatusReportingTask был настроен на запись в отдельный журнал.
Кроме того, можно отключить ведение журнала для процессоров или соединений, либо разделить их на отдельные файлы журналов. Для этой цели следует использовать регистраторы с именами org.apache.nifi.controller.ControllerStatusReportingTask.Processors и org.apache.nifi.controller.ControllerStatusReportingTask.Connections – соответственно.
MonitorDiskUsage
Проверяет объем дискового пространства, доступного для указанного каталога, и предупреждает (через запись сообщения в журнал и бюллетень системного уровня), если раздел, в котором он находится, превышает некоторый настраиваемый порог дискового пространства.
Свойство |
Значение по умолчанию |
Описание |
Threshold |
80% |
В случае превышения указанной величины будет создан бюллетень |
Directory Location |
|
Путь к каталогу контролируемого раздела |
Directory Display Name |
Un-Named |
Имя, отображаемое для каталога в предупреждениях. |
MonitorMemory
Проверяет объем кучи Java, доступный в JVM для определенного пула памяти JVM. Если объем используемого пространства превышает некоторый настраиваемый порог, выдается предупреждение (через запись сообщения в журнал и вывода бюллетеня системного уровня), что пул памяти превышает этот порог.
Свойство |
Значение по умолчанию |
Описание |
Memory Pool |
|
Имя пула памяти JVM для мониторинга |
Usage Threshold |
65% |
Указывает порог, при котором должны генерироваться предупреждения |
Reporting Interval |
|
Указывает, как часто эта задача создания отчетов должна отправлять бюллетени, когда использование памяти превышает настроенный порог |
DataDogReportingTask
Публикует метрики из NiFi в Datadog – службу наблюдения за облачными приложениями, обеспечивающая мониторинг серверов баз данных, инструментов и служб – с помощью платформы анализа данных на основе SaaS. Для точной и информативной отчетности компоненты должны иметь уникальные имена.
Получить подробную информацию про систему Datadog можно на официальном сайте https://www.datadoghq.com/
Свойство |
Значение по умолчанию |
Допустимые значения |
Описание |
Metrics prefix |
nifi |
|
Префикс, который нужно добавить перед каждой метрикой |
Environment |
dev |
|
Среда, в которой выполняется поток данных. Это свойство будет включено в качестве тега метрики. |
API key |
|
|
API-ключ Datadog. Если указано значение «агент», будет использоваться локальный агент Datadog. |
Datadog transport |
Datadog HTTP |
* Datadog Agent * Datadog HTTP |
Транспорт, через который метрики будут отправляться в Datadog |
StandardGangliaReporter
Сообщает метрики в Ganglia для внешнего мониторинга приложения. Ganglia – масштабируемая распределённая система мониторинга кластеров параллельных и распределённых вычислений и облачных систем с иерархической структурой (http://ganglia.sourceforge.net). Позволяет отслеживать статистику и историю (загруженность процессоров, сети) вычислений в реальном времени для каждого из наблюдаемых узлов.
Для работы задачи нужно настроить следующие свойства:
Свойство |
Значение по умолчанию |
Допустимые значения |
Описание |
Hostname |
localhost |
|
Полное имя хоста, на котором работает Ganglia |
Port |
8649 |
|
Порт, на котором Ganglia прослушивает входящие соединения |
Send JVM Metrics |
false |
* true |
Указывает, следует ли собирать и отправлять метрики JVM в дополнение к метрикам, специфичным для NiFi |
Задача отчетности сообщает следующий набор метрик на сервер Ganglia:
№ |
Метрика |
Описание |
1 |
FlowFiles In (5 мин) |
количество FlowFiles, полученных через Site-to-Site за последние пять минут |
2 |
Bytes In (5 mins) |
количество байтов, полученных через Site-to-Site за последние пять минут |
3 |
FlowFiles Out (5 mins) |
количество файлов FlowFiles, извлеченных из портов вывода через Site-to-Site за последние пять минут |
4 |
Bytes Out (5 mins) |
количество байтов, извлеченных из портов вывода через Site-to-Site за последние пять минут |
5 |
Прочитано байтов (5 mins) |
количество байтов, прочитанных с диска программой NiFi за последние пять минут |
6 |
Bytes Written (5 mins) |
количество байтов, записанных на диск NiFi за последние пять минут |
7 |
FlowFiles Queued |
общее количество FlowFiles, находящихся в настоящее время в очереди в системе на момент запуска задачи создания отчетов |
8 |
Active Threads |
количество потоков, активно работающих в момент времени, когда выполняется задача создания отчетов |
Заключение
В статье были продемонстрированы широкие возможности задач отчетности NiFi. Рассмотрены примеры сбора метрик и визуализации при помощи таких популярных систем, как Prometheus и Grafana.
Спроектировав хорошую систему мониторинга, можно значительно повысить уровень работы команд поддержки и сопровождения, скорость локализации и решения проблем.
Среди положительных сторон мониторинга средствами NiFi и визуализации с помощью Grafana следует выделить максимальную оперативность получения данных, наглядность и отсутствие необходимости писать программный код.
Список использованной литературы
https://nifi.apache.org/docs/nifi-docs/
https://pierrevillard.com/2017/05/16/monitoring-nifi-ambari-grafana/
https://pierrevillard.com/2017/05/17/monitoring-nifi-scripted-reporting-task