Наблюдение за выполнением роботов с помощью OpenTelemetry
Функциональность доступна в Primo RPA Studio .NET Core начиная с версии 2.26.9.
OpenTelemetry позволяет передавать данные о выполнении RPA-процессов во внешние системы наблюдаемости по протоколу OTLP. С помощью трассировок можно изучать последовательность выполнения элементов, находить проблемные шаги и анализировать затраты времени на поиск элементов интерфейса и взаимодействие с ними.
OpenTelemetry работает параллельно стандартному журналированию Orchestrator и не заменяет его.
Важно. В статье рассматривается передача трассировок (Traces). Передача сигналов OpenTelemetry Metrics и Logs реализуется отдельно. Метрики, отображаемые на других панелях системы наблюдаемости, не обязательно получены из OpenTelemetry робота.
Возможности трассировки
С помощью трассировок можно:
- просматривать последовательность и длительность выполнения элементов;
- определять шаг, на котором возникла ошибка;
- анализировать структуру вложенных процессов;
- измерять время поиска элементов интерфейса и выполнения действий над ними;
- отслеживать количество повторных попыток поиска элемента.
Структура трассировки
Каждый запуск процесса формирует отдельную трассировку (trace). Выполнение процесса представлено корневым интервалом (span) execution, а выполненные элементы — вложенными spans.
В системе наблюдаемости робот отображается под именем сервиса primo-robot. Источник OpenTelemetry имеет имя Primo.Robot.
Какие данные передаются
Корневой span execution содержит идентификаторы проекта, робота, выполнения и версии сценария.
| Атрибут | Описание |
|---|---|
rpa.project.id | Идентификатор проекта |
rpa.robot.id | Идентификатор робота |
rpa.execution.id | Идентификатор выполнения |
rpa.scenario.version | Версия сценария |
Для span передаётся статус выполнения. Если при выполнении возникла ошибка, в трассировку могут включаться сведения об исключении:
| Атрибут | Описание |
|---|---|
error.type | Тип ошибки |
error.message | Текст ошибки |
exception.stacktrace | Стек вызовов |
Данные о выполнении элементов
Для выполненного шага создаётся дочерний span со следующими атрибутами:
| Атрибут | Описание |
|---|---|
rpa.step.name | Имя элемента |
rpa.step.type | Тип элемента |
rpa.step.order | Порядок выполнения элемента |
Span элемента также содержит статус. В случае ошибки могут передаваться тип исключения, сообщение об ошибке и стек вызовов.
Данные о взаимодействии с интерфейсом
Для элементов, работающих с пользовательским интерфейсом, доступны дополнительные атрибуты:
| Атрибут | Описание |
|---|---|
rpa.ui.resolution_time_ms | Время поиска элемента интерфейса, мс |
rpa.ui.response_time_ms | Время выполнения действия после обнаружения элемента, мс |
rpa.ui.retry_count | Количество повторных попыток поиска |
rpa.ui.selector_type | Тип селектора |
rpa.ui.selector_desktop_type | Тип рабочего стола для соответствующего селектора |
rpa.ui.resolution_time_ms учитывает время от начала поиска до обнаружения элемента, включая повторные попытки. Время самого действия над найденным элементом в этот показатель не входит.
rpa.ui.response_time_ms измеряет время действия после обнаружения элемента, например нажатия или ввода текста. Таким образом, время поиска и время взаимодействия с элементом можно анализировать независимо.
Для элементов, которые только считывают или проверяют состояние интерфейса, без отдельного действия над ним, атрибут rpa.ui.response_time_ms не передаётся. Например:
ElementExists;GetInnerText;ReadDataGrid;SelectGetItems;ElementVanish.
Дополнительные данные
В атрибуты соответствующего span могут дублироваться пользовательские сообщения, созданные элементом записи в журнал, и дополнительные поля журнала.
| Атрибут | Описание |
|---|---|
rpa.softkill.requested | Получен запрос на мягкую остановку робота |
rpa.softkill.confirmed | Робот подтвердил мягкую остановку |
rpa.error.screenshot_path | Путь к скриншоту, созданному при ошибке |
rpa.orch_log.keepalive_failures | Количество ошибок отправки KeepAlive |
rpa.orch_log.dropped_count | Количество отброшенных сообщений журнала |
rpa.error.screenshot_path передаётся, если при ошибке был создан скриншот. Атрибуты rpa.orch_log.keepalive_failures и rpa.orch_log.dropped_count передаются только при значении больше 0.
Обратите внимание. Сообщения об ошибках, стеки вызовов и пользовательские записи журнала могут содержать данные проекта. При подключении внешней системы наблюдаемости учитывайте требования вашей организации к хранению и доступу к таким сведениям.
Настройка OpenTelemetry
Для передачи трассировок необходим OTLP-получатель, доступный с компьютера, на котором выполняется робот. Адрес и протокол задаются в настройках Studio, Runner или параметрах запуска.
Настройка OpenTelemetry в Studio
Для передачи трассировок необходимо настроить подключение к OTLP-получателю.
- Откройте Файл → Настройки → Сетевые ресурсы → Общие → Наблюдение.
- Включите параметр Включено.
- В поле Адрес получателя укажите адрес OTLP-получателя.
- В поле Протокол выберите способ передачи данных:
Grpc— передача по протоколу gRPC;HttpProtobuf— передача по HTTP с использованием формата Protobuf.
- При необходимости настройте Таймаут флаша — время ожидания отправки накопленных данных телеметрии. По умолчанию установлено
3000мс. - Нажмите Применить.
- Запустите процесс или отладку.

Настройки применяются как при обычном запуске процесса из Studio, так и при отладке.
Настройка в Runner
Чтобы включить передачу телеметрии в Runner:
- Откройте Настройки → Наблюдение.
- Включите параметр Включено.
- Укажите Адрес получателя.
- Выберите протокол
GrpcилиHttpProtobuf. - Примените настройки и запустите задание.
После запуска задания робот начнёт передавать трассировку в указанный OTLP-получатель.

Настройка через командную строку
Передачу телеметрии можно включить с помощью параметров запуска робота.
| Параметр | Описание |
|---|---|
otelEnabled | Включает передачу телеметрии OpenTelemetry при наличии аргумента |
otelEndpoint | Задаёт адрес OTLP-получателя |
otelProtocol | Задаёт протокол передачи: Grpc или HttpProtobuf |
При использовании параметров командной строки otelEnabled включает передачу трассировок по факту присутствия среди аргументов запуска.
Адрес OTLP-получателя
Для локально запущенного получателя обычно используются следующие адреса:
| Протокол | Пример адреса |
|---|---|
Grpc | http://localhost:4317 |
HttpProtobuf | http://localhost:4318 |
Для OTLP/HTTP стандартный путь приёма трассировок — /v1/traces. Конкретный формат адреса в настройках зависит от того, ожидает ли используемый экспортёр базовый адрес получателя или полный URL трассировок.
localhost означает компьютер, на котором работает робот. Если получатель расположен на другом сервере, укажите доступное сетевое имя или адрес этого сервера.
Просмотр трассировок в Grafana
Трассировки можно просматривать в системе наблюдаемости, подключённой к OTLP-получателю. Ниже показан пример настройки на базе Grafana. Названия и состав дашбордов зависят от конфигурации конкретной системы.
Открытие дашбордов RPA
Откройте Dashboards → RPA. В представленном примере в папке находятся панели обзора запусков, логов, метрик и трассировок. Для просмотра данных OpenTelemetry выберите RPA / Трассы.

Пример: список дашбордов RPA в Grafana.
Поиск нужного запуска
На дашборде RPA / Трассы выберите временной интервал и при необходимости задайте фильтры Сервис, Версия сценария и Статус. В таблице Поиск трасс отображаются идентификаторы трассировок (Trace ID), время начала, сервис, название операции и длительность.
На показанном примере записи относятся к сервису primo-robot, а название операции — execution. Эти данные помогают найти нужный запуск и сравнить время его выполнения с другими запусками. Отдельная таблица Запуски с повторами действий позволяет выделить запуски, в которых были повторные попытки выполнения действий.

Пример: поиск трассировок выполнения робота в Grafana.
Для более подробного анализа откройте трассировку по её Trace ID в подключённом средстве просмотра. В детальном представлении можно изучить корневой span execution, вложенные spans шагов, их продолжительность, статусы и атрибуты. Доступность перехода по Trace ID зависит от настройки ссылок и источника трассировок в Grafana.
Примечание. На скриншотах показан поиск трассировок, а не дерево вложенных spans. Для иллюстрации детального анализа дополнительно потребуется скриншот открытой трассировки.
Локальная проверка с помощью Jaeger (необязательно)
Для быстрой проверки передачи OTLP-трассировок можно использовать Jaeger . Это пример внешнего получателя, а не обязательный компонент Primo RPA.
Если установлен Docker, запустите Jaeger:
docker run -d --name jaeger \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
jaegertracing/jaeger:latestУкажите в настройках робота адрес http://localhost:4317 для Grpc или http://localhost:4318 для HttpProtobuf, затем запустите процесс.
Откройте http://localhost:16686, выберите сервис primo-robot и выполните поиск трассировок (Find Traces). Сервис появится в списке после поступления первых данных. Открыв трассировку, можно просмотреть корневой span execution и spans выполненных элементов.
В этом примере данные Jaeger хранятся временно; для постоянного хранения и промышленного использования необходима отдельная настройка системы наблюдаемости.