Поделиться через


Использование отладчика потока событий StreamInsight

Операционные системы в таких сферах, как производство и управление процессами, коммунальная отрасль, биржевые операции, интернет-бизнес и наблюдение за ИТ-средой, создают потоки событий со сложными взаимосвязями и малой задержкой. Учитывая временные характеристики обработки таких потоков событий, главной проблемой в таких системах является определение допустимости результатов в различных, динамически меняющихся условиях для потоков, а также устранение неполадок в запросах.

Такие условия порождают потребность в средствах анализа запроса, выполняющих следующие требования.

  • Обработка больших объемов данных и сокращение области для поиска проблем.

  • Выполнение строгих требований к согласованности.

  • Удобство работы пользователя, что позволяет быстро дать заключение о состоянии и подобрать решение.

В Microsoft StreamInsight предусмотрен изолированный отладчик потока событий с графическим пользовательским интерфейсом. Отладчик потока событий StreamInsight позволяет разработчикам и администраторам приложения по обработке сложных событий проверять поток событий через запрос StreamInsight, отлаживать поток и строить заключения на основании полученных данных. В этом разделе описаны функции отладчика потока событий и приведены процедуры, необходимые для того, чтобы начать работу с данным средством отладки и анализа.

Основные сведения об отладке потока событий

Перед тем как приступить к описанию отладчика потока событий, важно отметить основные принципы различия между отладчиком потока управления (например, отладчик C# или C++) и отладчиком потока событий.

При отладке потока управления разработчик выполняет «построение» в режиме отладки для программы, написанной на том или ином языке, задает точки останова в определенных инструкциях или соединениях в потоке управления программой, затем «запускает» программу, пока не будут достигнуты точки останова, анализирует код и состояние системы, выполняет шаги с заходом и обходом для функций и процедур, отслеживает переменные и выполняет другие операции до завершения выполнения. Временной анализ переменных таких «данных» (иными словами, анализ преобразования переменных с течением времени) ограничен или вообще не выполняется.

Отладка потока событий, напротив, подразумевает анализ события с течением времени, пока событие переходит с каждого этапа запроса обработки сложных событий к следующему этапу, а в рамках отдельного этапа запроса — от каждого оператора к следующему оператору. В данном случае для отладки необходимо представлять, как событие влияет на поток, когда оно поступает от заданного оператора, и как создаются новые события в результате вычислений с событиями, поступающими в оператор. В отладке потока событий основное внимание уделяется воздействию семантики оператора (Filter, Project, Join, Aggregate, Multicast и т. п.) на событие, а не выполнению самих операторов (в потоке управления). В результате отладчик помогает оценить воздействие, оказываемое заданным событием на другие события, а также воздействие других событий на анализируемое событие.

Режимы отладки и наблюдения

Отладчик потока событий является изолированным средством отладки на основе трассировки. Отладчик выполняет две функции.

  • Отладка трассировки потока событий. Сеанс отладки может основываться на следующих объектах.

    • Трассировка, созданная в процессе записи определенного активного запроса, когда отладчик подключается к активному серверу.

    • Файл трассировки, созданный вне отладчика с помощью программы командной строки и затем загруженный в отладчик.

  • Наблюдение за сервером. В этом режиме отладчик предоставляет обозреватель объектов, в котором перечислены системные объекты и объекты приложений. Для каждой из этих сущностей можно получить диагностические данные о выполнении. Обозреватель объектов также служит интерфейсом, по которому можно включать и отключать трассировку для запросов, а также запускать и останавливать выполнение запросов.

Чтобы иметь возможность использовать отладчик потока событий, пользователь должен быть членом группы пользователей журнала производительности Windows. Это позволит пользователю собирать трассировки вне отладчика при помощи trace.cmd или записывать события из запроса при выполнении операций в отладчике. Сведения о том, как это сделать, см. в разделе «Операции и управление Windows».

В случае успешной установки StreamInsight рекомендуется запустить отладчик и просмотреть страницу Начало, чтобы познакомиться с основными возможностями этого средства. Чтобы запустить отладчик, нажмите кнопку Пуск, выберите пункт Все программы, Microsoft StreamInsight 1.1, затем выберите пункт Отладчик потока событий StreamInsight.

Отладка запроса StreamInsight

Отладчик можно подключить к серверу StreamInsight в качестве локального или удаленного клиентского приложения, чтобы записывать и воспроизводить трассировку потока событий для одного или нескольких запросов. Кроме того, отладчик можно использовать в качестве изолированного клиентского приложения, отсоединенного от сервера, и анализировать запросы по трассировкам событий, собранным в режиме «вне сети». Это обеспечивает гибкость, позволяя отлаживать запрос во время работы или тестировать запрос по архивным трассировкам его выполнения.

Запись событий активного запроса

Для записи событий из выполняющегося запроса необходимо подключить отладчик потока событий к активному серверу StreamInsight. В следующей процедуре показано, как выполнить подключение к активному серверу, открыть выполняющийся запрос и включить для него трассировку.

  1. Перед началом работы нужно включить веб-службу для сервера (это может сделать администратор сервера). Дополнительные сведения о включении веб-службы см. в разделе Публикация и соединение с сервером служб StreamInsight.

  2. Подтвердите, что пользователь-клиент обладает разрешениями на подключение к серверу, являясь членом соответствующей группы пользователей StreamInsight. Дополнительные сведения см. в подразделе «Группа пользователей StreamInsight» раздела Установка (StreamInsight).

  3. В окне отладчика откройте меню Файл и выберите команду Соединение с сервером. Введите адрес конечной точки сервера. По умолчанию для установленного сервера StreamInsight используется конечная точка https://localhost/StreamInsight/<instance_name>.

    Если сервер настроен правильно для поддержки соединений, то отладчик отображает обозреватель объектов на панели слева.

  4. Раскрывайте иерархию объектов в обозревателе объектов, пока не появится запрос для отладки. Дважды щелкните объект запроса. Откроется граф запроса, показанный на следующем рисунке. На рисунке показано, что в данный момент выполняется образец запроса TrafficSensorQuery.

    Граф запроса в отладчике потока событий

    Рис. 1. Просмотр запроса на графе запроса.

  5. Чтобы включить трассировку для запроса, щелкните запрос правой кнопкой мыши и выберите команду Включить трассировку. Трассировку также можно включить программным образом с помощью API. Дополнительные сведения см. в разделе Наблюдение за сервером служб StreamInsight и запросами.

  6. Чтобы записать события, которые обрабатываются в запросе, нажмите кнопку Начать запись. Будет запущен процесс записи, как показано на следующем рисунке. Через несколько минут записи событий нажмите кнопку Остановить.

    Запись событий, проходящих через запрос.

    Рис. 2. Запись событий в выполняющемся запросе.

Отладчик перейдет в состояние, показанное на рис. 1. На этом этапе можно использовать средство анализа запросов, входящее в отладчик. Функции анализа описаны в следующем разделе.

Загрузка файла трассировки потока событий (EFT) или средства отслеживания событий для Windows (ETL)

StreamInsight поддерживает изолированное и внедренное развертывание сервера. Если приложение использует внедренный сервер и не включает веб-службу, то клиентское приложение, такое как отладчик, не может подключаться к серверу. В этом случае требуется механизм для отладки и диагностики проблем в запросах.

Для сбора журналов трассировки событий для работающего сервера StreamInsight можно использовать программу trace.cmd, устанавливаемую вместе с StreamInsight. В следующей процедуре описывается, как создать файл трассировки и загрузить его в отладчик потока событий.

  1. Если запущен сервер и нужные запросы, введите следующую инструкцию в командной строке Windows. Важно указать расширение «ETL» при присвоении имени файлу трассировки.

trace.cmd start <filename>.etl

  1. После того как запрос проработает достаточное время, остановите трассировку следующей командой:

trace.cmd stop <filename>.etl

  1. Чтобы загрузить результирующий файл в отладчик, откройте меню Файл и выберите команду Открыть. В диалоговом окне Открыть перейдите к расположению файла <filename>.etl и нажмите кнопку Открыть. Откроется граф запроса, показанный на следующем рисунке.

    Загрузка файла трассировки запроса в отладчик.

    Рис. 3. Просмотр запроса, загруженного из файла трассировки.

По сравнению с объектами, показанными на рис. 1, на данном рисунке в обозревателе объектов находится меньше сущностей. Это объясняется тем, что отладчик не подключен к серверу. В частности, объекты диагностики уровня сервера, такие как планировщики, не могут отображаться, если отладчик не подключен к серверу.

Обратите внимание, что в строке состояния на рисунке показан индикатор выполнения загрузки ETL-файла. В ходе загрузки отладчик преобразует ETL-файл в закрытый сжатый формат EFT.

Важно отметить, что программа trace.cmd является скриптом на основе команды Windows Logman. Logman, в свою очередь, использует для трассировки событий инфраструктуру ETW. В процессе загрузки журнала трассировки отладчик может предупреждать о потере нескольких событий. Это связано с неправильными параметрами буфера и сеанса ETW. Для устранения этой проблемы измените команду Logman в файле trace.cmd и увеличьте размер буфера, указанный в параметре -bs (например, -bs 3000), либо увеличьте количество буферов, заданное параметром -nb. Дополнительные сведения и примеры см. в Документации по Logman.

Анализ запросов в отладчике потока событий

Отладчик потока событий предоставляет следующие основные функции для анализа запросов.

  • Возможность просматривать план для заданного запроса, операторы запроса и потоки событий. Это помогает представить запрос LINQ в терминах базового потока событий и узлов обработки в потоке событий.

  • Возможность проверять все события на входе и выходе потока сложных событий вместе с промежуточными результатами на каждом этапе вычисления. Сюда входят метаданные событий относительно начальной и конечной отметки времени, а также поля полезных данных.

  • Возможность просматривать потоки сложных событий, секционированные для горизонтального масштабирования. В отладчике можно показать, как события секционируются операцией группирования или оператором группирования и применения, а также как события преобразуются в операторе применения.

  • Возможность выполнять набор глобальных операций анализа, сокращающих область поиска проблем или проводящих корреляцию событий между несколькими этапами потока событий.

  • Возможность пошагового выполнения трассировки запроса с течением времени и анализа распространения событий по потоковому запросу.

  • Возможность анализа событий и представление о переходе событий в заданное состояние, то есть анализ воздействия других событий и операторов на временные характеристики и полезные данные события.

  • Возможность анализировать воздействие заданного события на события, которые расположены за текущим оператором. Фактически это возможность анализировать последующую обработку событий до момента, когда событие оказывает влияние на выходные данные.

Для реализации этих возможностей отладчик предоставляет три функции для анализа.

  • Воспроизведение. Эта функция позволяет перемещаться по потоку событий с шагом в одно событие и просматривать его выполнение от оператора к оператору. Также можно задавать точки останова в определенных операторах на графе запроса и «запускать» отладчик (то есть активировать поток событий) до момента, когда выполняется данный оператор или определенное условие в этом операторе.

  • Анализ основных причин. Эта функция позволяет выявлять «основную причину» — последовательность операций или изменений, в результате которых событие перешло в текущее состояние.

  • Анализ распространения событий. Эта функция позволяет анализировать эффекты, оказываемые событием на дальнейшие элементы потока, с точки зрения изменений самого события или воздействия события на другие события или создание новых событий. Эта функция является обратной по отношению к анализу основных причин.

Использование воспроизведения

После загрузки событий в отладчик посредством записи активного запроса или из файла журнала трассировки следующим шагом является обнаружение этих событий. Для этого запустите воспроизведение событий, щелкнув значок Часы. Откроется проигрыватель событий. Для перехода по событиям используйте значок Шаг вперед. Также можно установить точку останова в любом операторе, щелкнув переключатель в левой части оператора и щелкнув значок Шаг к следующей точке останова в проигрывателе событий.

На следующем рисунке точка останова установлена в агрегатном операторе в ветви применения и активирован поток событий. Строка, выделенная зеленым цветом в агрегатном операторе, показывает течение потока событий до этой точки.

События, отображаемые с помощью функции воспроизведения

Рис. 4. Задание точки останова в агрегатном операторе.

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

Использование анализа основных причин

Анализ основных причин позволяет понять, как событие перешло в текущее состояние. Из сетки событий любого оператора можно запустить анализ основных причин, щелкнув правой кнопкой мыши нужное событие и выбрав команду Анализ основных причин.

После выбора команды Анализ основных причин в отладчике выводится развернутое представление всех операторов, содержащих события, которые могли способствовать переходу анализируемого события в текущее состояние. Например, на следующем рисунке показано, каким образом получено значение 18 для avgCount с заданными начальной и конечной отметками времени. Для этого щелкните правой кнопкой мыши выделенное событие в контекстном меню и выберите Анализ основных причин. В отладчике анализ основных причин появляется над воспроизведением. Для этого в заголовке полотна запроса с вкладками размещается вторая стрелка. Это показано на следующем рисунке. На состояние этого события на данном этапе обработки запроса повлияла операция вставки в операторе SensorInput со значением 24 для VehicularCount.

Анализ основных причин

Рис. 5. Анализ основных причин.

Использование анализа распространения событий

Анализ основных причин изучает воздействие других событий и этапов обработки на рассматриваемое событие, а анализ распространения событий изучает воздействие текущего события на дальнейшие события в потоке. Из сетки событий любого оператора можно запустить Анализ распространения событий, щелкнув правой кнопкой мыши нужное событие и выбрав команду Анализ распространения событий.

Размещение анализа

Операции анализа можно размещать друг над другом. Можно начать отладку с использованием воспроизведения. На определенном этапе этого анализа можно запустить анализ основных причин для определенного события. Из этого представления можно выбрать другое событие для анализа распространения. Таким образом можно располагать операции анализа друг над другом.

Также можно открыть один запрос на нескольких вкладках и запустить на этих вкладках различные операции анализа и представления. Это обеспечивает гибкость сравнения одного сегмента (или различных сегментов) запроса в различных операциях анализа.

Операторы

Каждый прямоугольник на графе запроса представляет оператор — узел вычисления в запросе StreamInsight. Алгебра запросов поддерживает несколько операторов, таких как Select (Filter), Project, Import, Export, Group-and-Apply, Join, Multicast, Union, Top-K, AlterLifetime, Advancetime и Cleanse. В метке каждого оператора указывается имя, заданное в метаданных сервера, и тип оператора.

Важно заметить, что соответствие между операторами, отображаемыми на графе запроса, и операциями, составляющими запрос LINQ, не обязательно будет однозначным. Например, оператор Import представляет экземпляр входного адаптера, а оператор Export представляет экземпляр выходного адаптера. Cleanse является внутренним оператором, который используется оптимизатором запросов для обработки неупорядоченных данных, и отсутствует в запросе LINQ. Аналогичным образом, операторы AdvanceTime и AlterLifetime представляют основные операции со временем в алгебре запросов, которые выполняются в результате указания расширений LINQ AlterEventDuration или AlterEventLifeTime, либо оконных операций в запросе. Однако сопоставление запроса LINQ с результирующим графом запроса не должно составить труда.

Каждая сетка события содержит следующие разделы.

Метка оператора

Заголовком сетки является имя оператора, предоставляемое запросом, и тип оператора.

Фильтр

В этом текстовом поле можно указать условное выражение C# для фильтрации нужных событий. Например, можно просмотреть только события, для которых выполняется или превышается заданное значение времени.

Поля события

В остальной части окна сетки события показаны поля события. К полям относится тип события, указанный пользователем (событие вставки или CTI), а также внутренние события (Retract и Expand). По умолчанию выводятся столбцы полей EventKind, StartTime, EndTime и поля полезных данных события. Можно добавлять и удалять поля из сетки события. Для этого щелкните строку заголовка правой кнопкой мыши, чтобы открыть контекстное меню, или в меню Вид выберите пункт Столбцы, затем установите или снимите флажки рядом с именами полей. Учтите, что значения всех полей отметок времени выводятся в формате UTC. Контекстное меню содержит средства для изменения часового пояса.

Доступные поля выводятся в порядке, указанном в следующей таблице. События можно экспортировать из любого оператора в файл. Для этого щелкните строку заголовка оператора правой кнопкой мыши и выберите пункт Записать события в файл. Обычно это выполняется для экспорта событий с целью дополнительной обработки в другой программе.

Имя поля

Описание

EventKind

Insert, Cti, Retract или Expand.

StartTime

Время начала события.

EndTime

Время окончания события.

NewEndTime

Измененное время окончания события для некоторых специальных типов системных событий. Значения в этом столбце не нужно обрабатывать.

Latency

Системная задержка события с заданный момент времени. Это промежуток времени между моментом, когда в систему поступило входящее событие, которое вызвало создание данного события, и моментом, когда событие было создано системой.

EnqueueTime

Системное время, когда событие было создано оператором.

Одно или несколько полей полезных данных

Определяемые пользователем поля данных, доступные в событии.

Оператор группирования и применения

Оператор группирования и применения — это специальный оператор, состоящий из оператора группирования в качестве точки входа, набора операторов ветви применения и оператора Group Union в качестве оператора привязки на выходе. После развертывания узла группирования выводятся все ветви применения, прикрепленные к соответствующим значениям ключа группирования. Можно развернуть (или свернуть) оператор группирования и применения, просто перетащив нужную ветвь из узла группирования на полотно. Затем можно развернуть каждый оператор в этой ветви для дальнейшего анализа. Щелкните знак X в каждой ветви, чтобы свернуть ее обратно на главный подграф потока группирования и применения. На следующем рисунке показан узел группирования и применения в отладчике потока событий.

Расширение оператора группирования и анализа

Рис. 6. Просмотр узла группирования и применения.

Дополнительные функции, повышающие удобство работы

В отладчике предусмотрены следующие функции, повышающие удобство работы.

  • Можно плавно увеличивать и уменьшать масштаб полотна с графом запроса от операторов к полному графу.

  • Все функции, доступные посредством значков, также доступны путем выбора параметров в контекстных меню.

  • Если отладчик подключен к серверу, то для всех ошибок, возвращаемых сервером, будет использоваться локали языка en-US (независимо от установленного кода локали). В случае если установлена локаль языка, отличная от английского, такие сообщения об ошибке можно использовать для дополнительной поддержки и диагностики.

  • Функции Развернуть все и Свернуть все позволяют развернуть или свернуть сразу все операторы.

  • Параметры, доступные в меню Сервис, позволяют задавать значения по умолчанию для различных параметров отладчика. Файл трассировки потока событий можно считывать сегментами определенного размера. Это обеспечит прогнозируемую реакцию отладчика и отсутствие перебоев в работе. Можно указать формат DateTime и TimeZone для всех операторов графа запроса. Кроме того, можно указать минимальную и максимальную продолжительность записи потока событий в случае, когда отладчик подключен к серверу.

Панель мониторинга

Отладчик потока событий служит не только средством отладки, но и средством наблюдения за сервером StreamInsight. Выше описаны действия, которые позволяют подключить отладчик к активному серверу. В отладчике выводится обозреватель объектов со всеми сущностями на сервере. На верхнем уровне выводится сводная статистика для диспетчера событий, диспетчера запросов и планировщиков. Чтобы показать диагностические данные времени выполнения для одного из этих объектов, щелкните правой кнопкой мыши значок для нужного объекта и выберите команду Диагностика.

Также можно пройти по иерархии объектов и выбрать нужный запрос, зарегистрированный на сервере. Можно включать и отключать трассировку для запроса, а также запускать и останавливать запрос. Кроме того, если запрос выполняется, для него можно получить диагностические данные времени выполнения. Через этот интерфейс можно отслеживать данные по создаваемым и обрабатываемым событиям, характеристики задержки и пропускной способности, а также требования запроса к памяти.

Эти метрики также можно получить программным образом с помощью API-интерфейсов представлений диагностики. Описание диагностических данных, доступных для каждой сущности, см. в разделе Наблюдение за сервером служб StreamInsight и запросами.

Журнал изменений

Обновленное содержимое

В раздел «Загрузка файла трассировки потока событий (EFT) или средства отслеживания событий для Windows (ETL)» добавлены сведения о причинах и устранении неполадок, связанных с предупреждением «потерянные события».

Добавлен шаг 2 в раздел «Запись событий активного запроса».