![](https://habrastorage.org/getpro/habr/upload_files/006/1bd/236/0061bd2367c8a2891b651594b7ccb145.png)
Apache NiFi динамично развивается и на сегодняшний день обладает достаточно большим набором возможностей, позволяющим отслеживать состояние потоков данных, ошибки и предупреждения, возникающие в процессорах и на кластере, а также состояние кластера.
Первая статья посвящена мониторингу потоков данных с помощью инструмента GUI NiFi. В последующих материалах мы рассмотрим задачи отчетности, опишем примеры сбора метрик и визуализации при помощи таких популярных систем, как Prometheus и Grafana.
Мониторинг средствами GUI NiFi
Итак, при использовании NiFi в качестве ETL /ELT-системы важной задачей является мониторинг состояния системы, потоков данных и ошибок. Проблемы, возникающие при функционировании системы можно разделить на две большие категории:
Внешние: эти проблемы находятся вне нашего контроля, поскольку они не возникают внутри NiFi. К таким ошибкам можно отнести проблемы на системах-источниках и системах-приёмниках. То есть как данные, не полученные NiFi, так и данные, не достигшие места назначения, например, из-за временного сбоя подключения к Интернету;
Внутренние: эти проблемы возникают в нашем процессинге NiFi и, следовательно, могут быть предсказаны и контролируемы.
Рассматривая аспект данных, мы можем выделить несколько потенциальных источников проблем:
Вариация приема данных: например, внезапное увеличение количества записей, полученных из системы-источника, которые процессинг NiFi неправильно обрабатывает, может привести к тому, что объемы памяти или дискового пространства окажутся недостаточными;
Качество данных: данные, полученные или сгенерированные внутри в плохом состоянии или с ошибками. Например:
потоковые файлы (JSON, XML, CSV) с поврежденной структурой;
потоковые файлы c отсутствующими обязательными данными;
потоковые файлы c ошибками кодирования (например, BASE64);
потоковые файлы с ошибками архивирования/упаковки (битые архивы gzip/tar).
Некорректно настроенные процессоры NiFi могут повредить структуру данных.
Мониторинг возникающих проблем и состояния системы важен как для команд разработки, так и для команд поддержки и сопровождения систем. Своевременная локализация и устранение проблем – высоко приоритетная задача.
Рассмотрим варианты мониторинга, доступные в NiFi на данный момент.
NiFi предоставляет большой объем информации о потоках данных и потоковых файлах, чтобы отслеживать работоспособность и состояние системы.
Разберем подробнее – какие возможности для отслеживания состояния потоков данных и ошибок предоставляет графический интерфейс NiFi:
Строка состояния предоставляет информацию об общем состоянии: показывает количество запущенных/остановленных/отключенных процессоров, а также состояние кластера и количество потоков:
![Рис. 1. Строка состояния GUI NiFi Рис. 1. Строка состояния GUI NiFi](https://habrastorage.org/getpro/habr/upload_files/f90/d2b/24a/f90d2b24a57cd55edc9db0d02ad18136.png)
Процессоры, группы процессов и удаленные группы процессов RPG (перенести данные из одного экземпляра NiFi в другой) предоставляют подробные сведения о своих операциях. Соединения и группы процессов предоставляют информацию о количестве данных в своих очередях:
![Рис. 2. Процессоры и соединения NiFi Рис. 2. Процессоры и соединения NiFi](https://habrastorage.org/getpro/habr/upload_files/22c/451/356/22c4513563d5f86cdc9344e217807886.png)
Информация о процессоре
NiFi предоставляет значительный объем информации о каждом процессоре на рабочей области. На следующем рисунке показано устройство процессора:
![Рис. 3. Пример процессора PutSQL Рис. 3. Пример процессора PutSQL](https://habrastorage.org/getpro/habr/upload_files/989/89a/cb5/98989acb5ab7ba4b576447d3bfea34eb.png)
![Рис. 4. Пример процессора RouteOnContent Рис. 4. Пример процессора RouteOnContent](https://habrastorage.org/getpro/habr/upload_files/eee/b9a/9ab/eeeb9a9ab40771d374271e596d22c940.png)
Тип процессора: NiFi предоставляет множество различных типов процессоров, позволяющих выполнять широкий спектр задач. Каждый их них предназначен для выполнения одной конкретной задачи. В данном примере PutSQL классифицирует задачу, которую выполняет этот процессор. В нашем случае процессор выполняет команду SQL UPDATE или INSERT;
Индикатор ошибки: когда процессор регистрирует какое-либо событие, он создает бюллетень, чтобы уведомить тех, кто следит за NiFi через пользовательский интерфейс. Можно настроить – какие бюллетени должны отображаться в пользовательском интерфейсе, обновив поле «Уровень бюллетеня» на вкладке «Настройки» диалогового окна конфигурации процессора. Значение по умолчанию – WARN, что означает, что в пользовательском интерфейсе будут отображаться только предупреждения и ошибки. Этот значок отсутствует, если для этого процессора не существует бюллетеня. Если же он есть, то при наведении мыши на значок появится всплывающая подсказка, объясняющая сообщение, предоставленное процессором, а также уровень бюллетеня. Если NiFi кластеризован, то он также покажет узел, выпустивший бюллетень. Бюллетени автоматически истекают через пять минут;
Индикатор состояния: показывает текущее состояние процессора.
Возможны следующие варианты:
○
Running (работает): процессор в данный момент работает;
○
Stopped (остановлен): процессор валиден и включен, но не работает;
○
Invalid (невалидный): процессор включен, но в настоящее время невалидный и не может быть запущен. При наведении курсора на этот значок появится всплывающая подсказка, указывающая, почему процессор невалидный;
○
Disabled (отключен): процессор не работает и не может быть запущен, пока он не будет включен. Этот статус не указывает, валидный ли процессор.
Имя процессора: определяется его пользователем. По умолчанию оно совпадает с типом процессора. В примере – имя процессора “PutSQL.SaveLogToDB”;
Активные задачи: это количество задач, которые в данный момент выполняет этот процессор. Количество ограничено настройкой “Concurrent Tasks” («Параллельные задачи») на вкладке “SCHEDULING” («Планирование») диалогового окна конфигурации процессора. В нашем примере процессор «RouteOnContent» в настоящее время выполняет две задачи (см. Рис. 4). Если экземпляр NiFi кластеризован, это значение представляет количество задач, которые в настоящее время выполняются на всех узлах в кластере;
Пятиминутная статистика: процессор показывает несколько различных статистических данных в табличной форме. Каждая из этих статистических данных представляет собой объем работы, выполненной за последние пять минут. Если экземпляр NiFi кластеризован, эти значения показывают – сколько работы было выполнено всеми узлами за последние пять минут. Эти показатели:
○ In (входящие): объем данных, которые процессор извлек из очередей своих входящих подключений. Это значение представлено как <count> (<size>), где <count> — это количество FlowFile, которые были извлечены из очередей, а <size> — это общий размер содержимого этих FlowFiles. В нашем примере процессор “RouteOnContent” извлек 14 FlowFiles из входных очередей, что в сумме составляет 4,2 килобайт (КБ);
○ Read/Write (чтение/запись): общий размер содержимого FlowFile, прочитанного процессором с диска и записанного на диск. Этот показатель предоставляет ценную информацию об операциях ввода-вывода, которые выполняет данный процессор. Одни процессоры могут только читать данные, ничего не записывая, в то время как другие не будут читать, а только записывать данные. Третьи не будут ни читать, ни записывать данные, четвертые процессоры будут и читать, и записывать данные. В нашем примере мы видим, что за последние пять минут процессор “RouteOnContent” прочитал 4,2 KБ содержимого FlowFile и ничего не записал. Этого и следовало ожидать, поскольку процессор перенаправляет потоковый файл на последующую обработку в зависимости от содержимого FlowFile;
○ Out (исходящие): объем данных, которые процессор передал своим исходящим соединениям. Сюда не входят файлы FlowFiles, которые он удаляет сам, или файлы FlowFiles, которые перенаправляются на автоматически завершаемые соединения. Как и в приведенной выше метрике «In», это значение представлено как <count> (<size>), где <count> — это количество FlowFile, которые были переданы в исходящие подключения, а <size> — это общий размер содержимого этих FlowFiles. В этом примере “RouteOnContent” передал 14 FlowFiles в исходящие очереди, что в сумме составляет 4,2 килобайт (КБ);
○ Task/Time (задачи/время): количество раз, когда этот процессор запускался для запуска за последние пять минут и количество времени, затраченное на выполнение этих задач. Формат времени: <часы>:<минуты>:<секунды>. Обратите внимание, что количество затраченного времени может превышать пять минут, поскольку многие задачи могут выполняться параллельно. Например, если для процессора запланировано выполнение 60 одновременных задач и выполнение каждой из них занимает одну секунду, возможно, что все 60 задач будут выполнены за одну секунду. Однако в этом случае мы увидим метрику Time, показывающую, что это заняло 60 секунд вместо одной секунды. Это время можно рассматривать как «системное время» или, другими словами, значение равно 60 секундам, потому что это то количество времени, которое потребовалось бы для выполнения действия, если бы использовалась только одна из параллельных задач.
Информация о группе процессов
![Рис. 5. Группа процессов Рис. 5. Группа процессов](https://habrastorage.org/getpro/habr/upload_files/f43/f32/e91/f43f32e911abd3558649660e029110d5.png)
Группа процессов состоит из следующих элементов:
Имя группы: это определяемое пользователем имя группы процессов, которое задается при добавлении группы процессов на рабочую область. В этом примере имя группы процессов — «Блок сбора статистики»;
Индикатор ошибки (Bulletin Board): когда дочерний компонент группы процессов выдает бюллетень, этот бюллетень также распространяется на родительскую группу процессов компонента. Если какой-либо компонент имеет активный бюллетень, появится этот индикатор, позволяющий пользователю навести указатель мыши на значок, чтобы увидеть бюллетень;
Количество активных задач: количество задач, которые в настоящее время выполняются компонентами в этой группе процессов. Здесь мы видим, что группа процессов в настоящее время выполняет две задачи. Если экземпляр NiFi кластеризован, это значение представляет количество задач, которые в настоящее время выполняются на всех узлах в кластере;
Статистика: группы процессов предоставляют статистику об объеме данных, которые были обработаны группой процессов за последние пять минут, а также объем данных, находящихся в данный момент в очереди. Следующие элементы составляют часть «Статистика» группы процессов:
○ Queued (в очереди): количество файлов FlowFiles, находящихся в настоящее время в очереди в группе процессов. Это поле представлено как <count> (<size>), где <count> — это количество FlowFile, которые в настоящее время поставлены в очередь в группе процессов, а <size> — это общий размер содержимого этих FlowFiles. В этом примере группа процессов в настоящее время содержит в очереди 11 578 файлов FlowFiles с общим размером 3,39 мегабайт (МБ);
○ In (входящие): количество файлов FlowFiles, которые были переданы в группу процессов через все входные порты за последние пять минут. Это поле представлено как <count> / <size> → <ports>, где <count> — это количество FlowFiles, которые вошли в группу процессов за последние пять минут, <size> — это общий размер содержимого этих FlowFiles и <ports> — количество входных портов. В этом примере 1 FlowFiles передан из группы;
○ Read/Write (чтение/запись): общий размер содержимого FlowFile, которое компоненты в группе процессов считывали с диска и записывали на диск. Это предоставляет ценную информацию о производительности ввода-вывода, необходимой для этой группы процессов;
○ Out (исходящие): количество файлов FlowFiles, которые были переданы из группы процессов через ее порты вывода за последние пять минут. Это поле представлено как <ports> → <count> (<size>), где <ports> — количество выходных портов, <count> — количество FlowFiles, которые переданы из группы процессов за последние пять минут, а <size > — это общий размер содержимого этих FlowFiles.
Component Counts (счетчики компонентов): элемент предоставляет информацию о том, сколько компонентов каждого типа существует в группе процессов. Ниже представлена информация о каждом из этих значков и их значениях:
○
Transmitting Ports: количество портов группы удаленных процессов RemoteProcess Group (под словом «удаленные» здесь и далее надо понимать те объекты, которые расположены на других инстансах NiFi), которые в настоящее время настроены для передачи данных в удаленные экземпляры NiFi или извлечения данных из удаленных экземпляров NiFi;
○
Non-Transmitting Ports: количество портов удаленной группы процессов, подключенные к компонентам в этой группе процессов, для которых передача данных сейчас отключена;
○
Running Components (запущенные компоненты): количество процессоров, входных и выходных портов, которые в настоящее время работают в этой группе процессов;
○
Stopped Components (остановленные компоненты): количество процессоров, входных и выходных портов, которые в настоящее время не работают, но валидны. Эти компоненты готовы к запуску;
○
Invalid Components (запущенные компоненты): количество процессоров, входных и выходных портов, которые включены, но в настоящее время находятся в недопустимом состоянии. Это может быть связано с неправильно настроенными свойствами или отсутствующими отношениями;
○
Disabled Components (отключенные компоненты): количество процессоров, входных и выходных портов, которые в данный момент отключены. Эти компоненты могут быть или не быть действительными. Если группа процессов запущена, компоненты не вызовут ошибок, но не будут запущены.
Version State Counts (счетчики контроля версий): предоставляет информацию о том, сколько групп процессов с версиями входит в группу процессов;
Comments (комментарии): когда группа процессов добавляется на холст, пользователю предоставляется возможность указать комментарии, чтобы предоставить информацию о группе процессов. Позднее комментарии можно изменить, щелкнув правой кнопкой мыши на группу процессов и выбрав пункт в меню «Настроить».
Историческая статистика по компонентам (Status History)
Хотя сводная таблица и рабочая область показывают числовую статистику, относящуюся к производительности компонента за последние пять минут, часто бывает полезно также просмотреть и историческую статистику. Эта информация доступна, если щелкнуть на компонент правой кнопкой мыши и выбрать пункт меню «Status History» или щелкнуть «Status History» на странице «Сводка» («Summary»).
Объем сохраняемой исторической информации настраивается в свойствах NiFi, но по умолчанию он равен 24 часам. Когда диалоговое окно «История состояния» открыто, оно предоставляет график исторической статистики:
Хотя сводная таблица и рабочая область показывают числовую статистику, относящуюся к производительности компонента за последние пять минут, часто бывает полезно также просмотреть и историческую статистику. Эта информация доступна, если щелкнуть на компонент правой кнопкой мыши и выбрать пункт меню «Status History» или щелкнуть «Status History» на странице «Сводка» («Summary»).
Объем сохраняемой исторической информации настраивается в свойствах NiFi, но по умолчанию он равен 24 часам. Когда диалоговое окно «История состояния» открыто, оно предоставляет график исторической статистики:
![Рис. 6. Status History Рис. 6. Status History](https://habrastorage.org/getpro/habr/upload_files/ccf/b1a/714/ccfb1a71497e51019419994326b1169f.png)
В левой части диалогового окна представлена информация о компоненте, для которого предназначена статистика, а также текстовое представление отображаемой статистики:
Id: идентификатор компонента, для которого отображается статистика
Group Id: идентификатор группы процессов, в которой находится компонент
Name: имя компонента, для которого отображается статистика.
Специфичные записи для компонента: информация отображается для каждого отдельного типа компонента. Например, для процессора отображается тип процессора, для соединения отображаются имена и идентификаторы источника и назначения.
Start: самое раннее время, показанное на графике
End: последнее время, показанное на графике
Min/Max/Mean: отображаются минимальное, максимальное и среднее значения.
Они основаны только на выбранном диапазоне времени, если он выбран. Если этот экземпляр NiFi кластеризован, эти значения отображаются как для кластера в целом, так и для каждого отдельного узла. В кластерной среде каждый узел отображается своим цветом. Это также служит легендой графика, показывающей цвет каждого узла, показанного на графике. При наведении указателя мыши на кластер или один из узлов в легенде соответствующий узел также будет выделен жирным шрифтом на графике.
В правой части диалогового окна находится раскрывающийся список различных типов метрик, отображаемых на графиках ниже. Верхний график увеличен, чтобы обеспечить более легкое чтение информации. В правом нижнем углу этого графика находится небольшой маркер (), который можно перетаскивать, чтобы изменить размер графика. Пустые области диалогового окна также можно перетаскивать, чтобы переместить все диалоговое окно.
Нижний график намного короче и предоставляет возможность выбора временного диапазона, что приведет к тому, что на верхнем графике будет отображаться только выбранный временной диапазон, но более подробно. Кроме того, будут пересчитаны минимальные/максимальные/средние значения в левой части. После создания выделения путем перетаскивания прямоугольника по графику двойной щелчок по выделенной части приведет к тому, что выделение полностью расширится в вертикальном направлении (то есть будут выбраны все значения в этом временном диапазоне). Если щелкнуть нижний график без перетаскивания, выделение будет снято.
Доска объявлений (Bulletin Board)
На доске объявлений отображаются последние ошибки и предупреждения, генерируемые процессорами NiFi в режиме реального времени. Чтобы получить к ней доступ, пользователю нужно перейти в раскрывающееся меню справа и выбрать опцию «Доска объявлений (Bulletin Board)».
![Рис. 7. Меню NiFi (Bulletin Board) Рис. 7. Меню NiFi (Bulletin Board)](https://habrastorage.org/getpro/habr/upload_files/7c3/218/a42/7c3218a426d078ae1fe27d8fa6c08817.png)
Доска обновляется автоматически, и пользователь также может отключить обновление (Auto-refresh), перейти к определенному процессору, дважды щелкнув ошибку. Можно фильтровать бюллетени, работая со следующими фильтрами:
■ По сообщению (by message)
■ По имени (by name)
■ По идентификатору процессора (by id)
■ По идентификатору группы процессоров (by group id)
![Рис. 8. Bulletin Board Рис. 8. Bulletin Board](https://habrastorage.org/getpro/habr/upload_files/05f/b13/ae0/05fb13ae02ac6d7952021f2fdadb0b15.png)
Пользовательский интерфейс происхождения данных (Data Provenance)
При мониторинге потока данных пользователям часто требуется понять – что произошло с конкретным объектом данных (FlowFile). Страница происхождения данных NiFi предоставляет эту информацию. Поскольку NiFi записывает и индексирует сведения о происхождении данных по мере того, как объекты проходят через систему, пользователи могут выполнять поиск, устранять неполадки и оценивать соответствие потока данных поставленным требованиям и оптимизацию в режиме реального времени. По умолчанию NiFi обновляет эту информацию каждые пять минут, но это можно настроить.
Чтобы получить доступ к странице «Происхождение данных», выберите её в глобальном меню. Откроется диалоговое окно, в котором пользователь может просмотреть самую последнюю доступную информацию о происхождении данных, выполнить поиск информации по конкретным элементам и отфильтровать результаты поиска. Также можно открыть дополнительные диалоговые окна, чтобы просмотреть сведения о событии, воспроизвести данные в любой точке потока данных и увидеть их графическое представление происхождения или пути в потоке.
![Рис. 9. Меню NiFi (Data provenance) Рис. 9. Меню NiFi (Data provenance)](https://habrastorage.org/getpro/habr/upload_files/8c1/2d0/926/8c12d09262d743d1d1bcbf826874d958.png)
Пользователь может фильтровать события в репозитории происхождения данных, работая со следующими полями:
по имени компонента
по типу компонента
по типу
События происхождения данных
Каждая точка в потоке данных, где каким-либо образом обрабатывается FlowFile, считается «событием происхождения». В зависимости от структуры потока данных возникают различные типы событий происхождения. Например, когда данные вносятся в поток, происходит событие RECEIVE, а когда данные отправляются из потока, происходит событие SEND. Могут возникать другие типы событий обработки, например, клонирование данных (событие CLONE), маршрутизация (событие ROUTE), изменение (событие CONTENT_MODIFIED или ATTRIBUTES_MODIFIED), разделение (событие FORK), объединение с другими объектами данных (событие JOIN), и в конечном итоге удалены из потока (событие DROP).
Событие происхождения данных | Описание |
ADDINFO | Указывает событие происхождения, когда добавляется дополнительная информация. Например, новая ссылка на новый URI или UUID |
ATTRIBUTES_MODIFIED | Указывает, что атрибуты FlowFile были каким-то образом изменены |
CLONE | Указывает, что FlowFile является точной копией своего родительского FlowFile |
CONTENT_MODIFIED | Указывает, что содержимое FlowFile каким-либо образом было изменено |
CREATE | Указывает, что FlowFile был сгенерирован из данных, которые не были получены от удаленной системы или внешнего процесса |
DOWNLOAD | Указывает, что содержимое FlowFile было загружено пользователем или внешним объектом |
DROP | Указывает на событие завершения жизни объекта по какой-либо причине, отличной от истечения срока действия объекта |
EXPIRE | Указывает на событие завершения жизни объекта из-за того, что объект не обрабатывается своевременно |
FETCH | Указывает, что содержимое FlowFile было перезаписано с использованием содержимого какого-либо внешнего ресурса |
FORK | Указывает, что один или несколько файлов FlowFile были получены из родительского файла FlowFile |
JOIN | Указывает, что один файл FlowFile получен путем объединения нескольких родительских файлов FlowFile-ов |
RECEIVE | Указывает исходное событие для получения данных от внешнего процесса |
REMOTE_INVOCATION | Указывает, что был запрошен удаленный вызов внешней конечной точки (например, удаление удаленного ресурса) |
REPLAY | Указывает исходное событие для воспроизведения FlowFile |
ROUTE | Указывает, что FlowFile был направлен по определенному соединению, и предоставляет информацию о том, почему FlowFile был направлен в это соединение |
SEND | Указывает исходное событие для отправки данных во внешний процесс |
UNKNOWN | Указывает, что тип события происхождения неизвестен, поскольку пользователь, пытающийся получить доступ к событию, не уполномочен знать тип |
Поиск событий
Одной из наиболее распространенных задач, выполняемых на странице «Происхождение данных», является поиск заданного FlowFile для определения того, что с ним произошло. Для этого нажмите кнопку «Поиск» в правом верхнем углу страницы «Происхождение данных». Откроется диалоговое окно с параметрами, которые пользователь может определить для поиска. Параметры включают в себя интересующее событие обработки, отличительные характеристики FlowFile или компонента, вызвавшего событие, временные рамки поиска и размер FlowFile.
Детали события
В крайнем левом столбце страницы «Происхождение данных» для каждого события есть значок «Просмотр сведений» . При нажатии на эту кнопку открывается диалоговое окно с тремя вкладками: «Детали», «Атрибуты» и «Содержимое».
![Рис. 12. NiFi Provenance Event – подробности события Рис. 12. NiFi Provenance Event – подробности события](https://habrastorage.org/getpro/habr/upload_files/8c7/bff/13f/8c7bff13f061026da044895a346ef7eb.png)
Во вкладке “Details” отображаются различные сведения о событии, например, когда оно произошло: тип события и компонент, вызвавший событие, а также информация об обработанном файле FlowFile. В дополнение к UUID FlowFile, который отображается в левой части вкладки "Details", UUID любого родительского или дочернего FlowFile, которые связаны с этим FlowFile – в правой части вкладки “Details”.
![Рис. 13. NiFi Provenance Event – атрибуты Рис. 13. NiFi Provenance Event – атрибуты](https://habrastorage.org/getpro/habr/upload_files/6ac/b4b/c1d/6acb4bc1d9c9770467edcf062242f506.png)
На вкладке “Attributes” отображаются атрибуты, существующие в файле FlowFile на данный момент в потоке. Чтобы видеть только те атрибуты, которые были изменены в результате события обработки, пользователь может установить флажок «Показывать только измененные» в правом верхнем углу вкладки.
Воспроизведение FlowFile
DFM (DataFlow Manager) может потребоваться проверить содержимое FlowFile в какой-то момент потока данных, чтобы убедиться, что он обрабатывается должным образом. И, если этого не происходит, DFM может потребоваться внести коррективы в поток данных и снова воспроизвести FlowFile. Вкладка «Содержимое» диалогового окна «Просмотр сведений» — это место, где DFM может выполнять эти действия. На вкладке «Содержимое» отображается информация о FlowFile, например, о его расположении в репозитории содержимого и его размере. Кроме того, именно здесь пользователь может нажать кнопку «Загрузить», чтобы загрузить копию содержимого FlowFile в том виде, в каком оно существовало на данном этапе потока. Пользователь также может нажать кнопку «Отправить», чтобы воспроизвести файл FlowFile на данном этапе потока. После нажатия «Отправить» FlowFile отправляется в соединение, передающее компонент, создавший это событие обработки.
![Рис. 14. NiFi Provenance Event – содержимое Рис. 14. NiFi Provenance Event – содержимое](https://habrastorage.org/getpro/habr/upload_files/646/9e8/7ed/6469e87edc3fbcb7782c49ab7a9e8424.png)
Просмотр происхождения FlowFile
Часто полезно увидеть графическое представление происхождения или путь, по которому FlowFile прошел в потоке данных. Для этого нужно щелкнуть значок «Показать происхождение» (Show Lineage) в крайнем правом столбце таблицы «Происхождение данных». Откроется график, отображающий FlowFile
(FlowFile) и различные произошедшие события обработки. Выбранное событие будет выделено красным цветом. Можно щелкнуть правой кнопкой мыши или дважды щелкнуть на любое событие, чтобы просмотреть подробности этого события (см. «Детали события»). Чтобы увидеть – как развивалась история FlowFile с течением времени, щелкните ползунок в левом нижнем углу окна, переместите его влево и увидите состояние FlowFile на более ранних этапах потока данных.
Интерфейс итоговой сводки NiFi (Summary)
Доступ к сводке Apache NiFi также можно получить из того же меню, что и доска объявлений.
![Рис. 16. Меню NiFi (Summary) Рис. 16. Меню NiFi (Summary)](https://habrastorage.org/getpro/habr/upload_files/aed/37a/1d0/aed37a1d0f453e67686d28050ed19902.png)
Этот пользовательский интерфейс содержит информацию обо всех компонентах этого конкретного экземпляра или кластера NiFi. Их можно фильтровать по имени, типу или URI. Существуют разные вкладки для разных типов компонентов.
Ниже приведены компоненты, которые можно отслеживать в пользовательском интерфейсе сводки NiFi:
Процессоры
Входные порты
Выходные порты
Удаленные группы процессов
Соединения
Группы процессов
![Рис. 17. NiFi Summary Рис. 17. NiFi Summary](https://habrastorage.org/getpro/habr/upload_files/2c9/084/de2/2c9084de2f0764dc2b5d15a7b739ce8e.png)
Страница «NiFi Summary» также включает следующие элементы:
○ Индикатор ошибки (бюллетеня): как и в других местах пользовательского интерфейса, когда этот значок присутствует, при наведении курсора на значок будет предоставлена информация о созданном бюллетене, включая сообщение, уровень серьезности, время создания бюллетеня и (в кластерной среде) узел, создавший бюллетень. Как и все столбцы сводной таблицы, этот столбец, в котором отображаются сводки, можно отсортировать, щелкнув на заголовок, чтобы все существующие на данный момент сводки отображались вверху списка;
○Детальная информация о процессоре: щелчок по значку
(View processor Detais) отображает пользователю подробную информацию о компоненте.
![Рис. 18. NiFi Summary - детали процессора Рис. 18. NiFi Summary - детали процессора](https://habrastorage.org/getpro/habr/upload_files/aff/611/066/aff611066a629d335dd952d71b0fa02b.png)
Это диалоговое окно совпадает с диалоговым окном, которое появляется, когда пользователь щелкает компонент правой кнопкой мыши и выбирает пункт меню “Configure” («Просмотр конфигурации»);
○ Перейти к процессору (Go To Processor …): нажатие этой кнопки закроет страницу «Сводка» и перенесет пользователя непосредственно к компоненту на рабочей области NiFi;
○ Показать историю состояния (View Status History): щелчок по значку View Status History открывает новое диалоговое окно, в котором отображается историческое представление статистики для этого компонента;
![Рис. 19. View Status History Рис. 19. View Status History](https://habrastorage.org/getpro/habr/upload_files/796/d27/29d/796d2729de10bfcdca2cfabd93f74f81.png)
○ Показать детали кластера (ClusterProcessorSummary): щелчок по значку ViewStatusHistory открывает новое диалоговое окно, в котором отображается историческое представление статистики, для этого компонента;
![Рис. 20. Cluster Processor Summary Рис. 20. Cluster Processor Summary](https://habrastorage.org/getpro/habr/upload_files/151/5a0/6fc/1515a06fc86c4f512f7e9da1b1934a5f.png)
○Обновить (Refresh): кнопка «Обновить» позволяет пользователю обновить отображаемую информацию, не закрывая диалоговое окно и не открывая его снова. Время последнего обновления информации отображается справа от кнопки. Информация на странице не обновляется автоматически;
○ Фильтр (Filter): этот элемент позволяет пользователям фильтровать содержимое сводной таблицы, вводя все или часть некоторых критериев, таких как тип процессора или имя процессора.
![Рис. 21. Filter by name Рис. 21. Filter by name](https://habrastorage.org/getpro/habr/upload_files/df8/ec7/543/df8ec7543efc5de2ad0f35dd8657f132.png)
Доступные типы фильтров различаются в зависимости от выбранной вкладки. Например, при просмотре вкладки «Процессор» пользователь может фильтровать по имени или по типу. При просмотре вкладки «Подключения» — по источнику, имени процессора или имени получателя. Фильтр применяется автоматически при изменении содержимого текстового поля. Под текстовым полем находится индикатор того, сколько записей в таблице соответствует фильтру и сколько записей присутствует в таблице;
○ Всплывающее окно: при мониторинге потока полезно иметь возможность открывать сводную таблицу в отдельной вкладке или окне браузера. Кнопка «Всплыть», расположенная рядом с кнопкой «Закрыть», приведет к открытию всего диалогового окна «Сводка» в новой вкладке или окне браузера (в зависимости от конфигурации браузера). Как только страница «выскакивает», диалоговое окно закрывается в исходной вкладке/окне браузера. В новой вкладке/окне кнопки «Всплывающие окна» и «Перейти к» больше не будут доступны;
○ Диагностика системы: окно диагностики системы предоставляет информацию о том, как система работает в отношении использования системных ресурсов. В этом диалоговом окне отображается такая информация, как загрузка ЦП, насколько заполнены диски и специфичные для Java показатели, такие как размер и использование памяти, а также информация о сборке мусора.
В правом нижнем углу окна есть ссылка System Diagnostics для проверки статистики JVM, информации о системных хранилищах и версии ПО.
![Рис. 22. System Diagnostics Рис. 22. System Diagnostics](https://habrastorage.org/getpro/habr/upload_files/be9/733/301/be973330181c6f256f49bf16e23b33ca.png)
Обратное давление (Back pressure)
Параметры обратного давления
NiFi предоставляет два элемента (см. ниже) конфигурации для обратного давления. Эти пороговые значения указывают, какой объем данных должен находиться в очереди, прежде чем компонент, являющийся источником подключения, больше не будет выполняться по расписанию. Данная функциональность повышает устойчивость системы к проблеме переполнения данными.
1) «Back pressure object threshold» – это количество файлов FlowFile, которые могут находиться в очереди до того, как будет применено обратное давление;
2) «Back pressure data size threshold» – указывает максимальный объем данных, которые должны быть поставлены в очередь перед применением обратного давления. Это значение настраивается путем ввода числа, за которым следует размер данных (B – для байтов, KB – для килобайтов, MB – для мегабайтов, GB – для гигабайтов или TB – для терабайтов).
![Рис. 23. Статистика обратного давления по объему данных Рис. 23. Статистика обратного давления по объему данных](https://habrastorage.org/getpro/habr/upload_files/5e9/254/895/5e9254895c189fe2aebcff09cc7fd960.png)
По умолчанию каждое новое добавленное подключение будет иметь пороговое значение объекта обратного давления по умолчанию, равное 10 000 объектов, и пороговое значение размера данных обратного давления, равное 1 ГБ.
![Рис. 24. Статистика обратного давления по количеству файлов Рис. 24. Статистика обратного давления по количеству файлов](https://habrastorage.org/getpro/habr/upload_files/3a4/7f9/0a7/3a47f90a7ed18cbf9ba1eeddfd787035.png)
Когда обратное давление включено, на метке соединения появляются небольшие индикаторы выполнения, которые можно сразу увидеть при просмотре потока на рабочей области. Индикаторы выполнения меняют цвет в зависимости от процента очереди: зеленый (0-60%), желтый (61-85%) и красный (86-100%).
При наведении указателя мыши на полосу отображается точный процент. Когда очередь полностью заполнена, соединение выделяется красным цветом.
![Рис. 25. Переполнение очереди по количеству файлов Рис. 25. Переполнение очереди по количеству файлов](https://habrastorage.org/getpro/habr/upload_files/dde/0ec/345/dde0ec3455331d16a46a79d7ce46d995.png)
Back Pressure Prediction
С версии NiFi 1.10 появилась очень полезная функциональность – предсказание обратного давления (Back Pressure Prediction).
Предсказание обратного давления в NiFi используется для правильного использования ресурсов и определения того, достигает ли очередь порогового значения обратного давления. Эти знания будут полезны для упреждающего решения проблем.
![Рис. 26. Информация по предсказанию обратного давления Рис. 26. Информация по предсказанию обратного давления](https://habrastorage.org/getpro/habr/upload_files/4fc/375/bdb/4fc375bdbb396cc7778c58472c526b3c.png)
NiFi использует инфраструктуру аналитики, чтобы запрашивать в репозитории состояния компонентов метрики для каждого соединения, обучать внутреннюю аналитическую модель и использовать эту модель для создания прогнозов. По умолчанию используется простая модель линейной регрессии, однако предоставляется возможность гибкости для поддержки более сложных моделей по мере необходимости. В nifi.properties есть несколько настроек, позволяющих включать и контролировать создание прогнозов для подключений:
Свойство | Описание |
nifi.analytics.predict.enabled | Включить функцию аналитики (по умолчанию false) |
nifi.analytics.predict.interval | Временной интервал для прогноза (по умолчанию три минуты) |
nifi.analytics.query.interval | Интервал времени для запроса прошлых наблюдений (по умолчанию пять минут, поэтому будет использовать пять минут прошлых наблюдений для обучения модели) |
nifi.analytics.connection.model.implementation | Реализация модели, используемая для прогнозов (по умолчанию — org.apache.nifi.controller.status.analytics.models.OrdinaryLeastSquares) |
nifi.analytics.connection.model.score.name | Имя типа оценки, которое следует использовать для оценки модели. Значение по умолчанию — rSquared (типы оценок могут различаться в зависимости от модели) |
| Порог для значения оценки (где оценка модели должна быть выше заданного порога). Значение по умолчанию: 0,9 |
Заключение
В статье были продемонстрированы широкие возможности инструмента GUI NiFi для мониторинга потоков данных и состояния системы. Спроектировав хорошую систему мониторинга, можно значительно повысить уровень работы команд поддержки и сопровождения, скорость локализации и решения проблем. Среди положительных сторон мониторинга средствами GUI NiFi: максимальная оперативность получения данных, наглядность и отсутствие необходимости писать программный код. Недостаток состоит в том, что сообщения об ошибках и предупреждения в Bulletin Board хранятся пять минут и можно упустить серьезные ошибки и сбои, если не сидеть постоянно над экраном с GUI NiFi.