Телеметрия и устранение неполадок

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

Включение визуализаций

Чтобы включить визуализацию событий Аналитики ИИ в видеокадре, необходимо использовать версию .debugоперации пространственного анализа на настольном компьютере или виртуальной машине Azure. Визуализация невозможна на устройствах Azure Stack Edge. Доступны четыре операции отладки.

Если устройство является локальным компьютером на рабочем столе или виртуальной машиной GPU Azure (с включенным удаленным рабочим столом), вы можете переключиться на .debug версию любой операции и визуализировать выходные данные.

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

  2. В окне терминала выполните команду xhost +

  3. Обновите манифест развертывания в модуле spaceanalytics, указав значение переменной среды DISPLAY. Это значение можно найти, запустив echo $DISPLAY в терминале на главном компьютере.

    "env": {        
        "DISPLAY": {
            "value": ":11"
            }
    }
    
  4. Обновите граф в манифесте развертывания, который требуется запустить в режиме отладки. В приведенном ниже примере мы указываем в качестве operationId значение cognitiveservices.vision.spatialanalysis-personcrossingpolygon.debug. Для включения окна визуализатора требуется новый параметр VISUALIZER_NODE_CONFIG. Все операции доступны в варианте приложения для отладки. При использовании общих узлов используйте операцию cognitiveservices.vision.spatialanalysis.debug и добавьте VISUALIZER_NODE_CONFIG в параметры экземпляра.

    "zonecrossing": {
         "operationId" : "cognitiveservices.vision.spatialanalysis-personcrossingpolygon.debug",
         "version": 1,
         "enabled": true,
         "parameters": {
             "VIDEO_URL": "Replace http url here",
             "VIDEO_SOURCE_ID": "zonecrossingcamera",
             "VIDEO_IS_LIVE": false,
            "VIDEO_DECODE_GPU_INDEX": 0,
             "DETECTOR_NODE_CONFIG": "{ \"gpu_index\": 0 }",
            "CAMERACALIBRATOR_NODE_CONFIG": "{ \"gpu_index\": 0}",
            "VISUALIZER_NODE_CONFIG": "{ \"show_debug_video\": true }",
             "SPACEANALYTICS_CONFIG": "{\"zones\":[{\"name\":\"queue\",\"polygon\":[[0.3,0.3],[0.3,0.9],[0.6,0.9],[0.6,0.3],[0.3,0.3]], \"threshold\":35.0}]}"
         }
    }
    
  5. Повторное развертывание и вы увидите окно визуализатора на хост-компьютере

  6. После завершения развертывания может потребоваться скопировать файл .Xauthority из главного компьютера в контейнер и перезапустить его. В нижеприведенном примере peopleanalytics — имя контейнера на главном компьютере.

    sudo docker cp $XAUTHORITY peopleanalytics:/root/.Xauthority
    sudo docker stop peopleanalytics
    sudo docker start peopleanalytics
    xhost +
    

Сбор телеметрии о работоспособности системы

Telegraf — это образ с открытым исходным кодом, который работает с пространственным анализом и доступен в службе Microsoft Container Registry. Он принимает следующие входные данные и отправляет их в службу Azure Monitor. Модуль Telegraf можно создать с нужными пользовательскими входными и выходными данными. Конфигурация модуля Telegraf в пространственном анализе является частью манифеста развертывания (связанного выше). Этот модуль не является обязательным и может быть удален из манифеста, если он вам не нужен.

Входные данные:

  • Метрики пространственного анализа
  • Метрики диска
  • Метрики ЦП
  • Метрики Docker
  • Метрики ЦП

Выходные данные:

  • Azure Monitor

Предоставленный модуль телеграфа пространственного анализа публикует все данные телеметрии, создаваемые контейнером пространственного анализа в Azure Monitor. См. Azure Monitor для получения информации о добавлении Azure Monitor в вашу подписку.

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

Примечание.

Эта команда требует наличия у вас прав владельца в подписке.

# Find your Azure IoT Hub resource ID by running this command. The resource ID  should start with something like 
# "/subscriptions/b60d6458-1234-4be4-9885-c7e73af9ced8/resourceGroups/..."
az iot hub list

# Create a Service Principal with `Monitoring Metrics Publisher` role in the IoTHub resource:
# Save the output from this command. The values will be used in the deployment manifest. The password won't be shown again so make sure to write it down
az ad sp create-for-rbac --role="Monitoring Metrics Publisher" --name "<principal name>" --scopes="<resource ID of IoT Hub>"

В манифесте развертывания для устройства Azure Stack Edge, настольного компьютера или виртуальной машины Azure с GPU найдите модуль Telegraf и замените следующие значения сведениями субъекта-службы на предыдущем шаге и повторном развертывании.

"Telegraf": { 
  "settings": {
  "image":   "mcr.microsoft.com/azure-cognitive-services/vision/spatial-analysis/Telegraf:1.0",
  "createOptions":   "{\"HostConfig\":{\"Runtime\":\"nvidia\",\"NetworkMode\":\"azure-iot-edge\",\"Memory\":33554432,\"Binds\":[\"/var/run/docker.sock:/var/run/docker.sock\"]}}"
},
"type": "docker",
"env": {
    "AZURE_TENANT_ID": {
        "value": "<Tenant Id>"
    },
    "AZURE_CLIENT_ID": {
        "value": "Application Id"
    },
    "AZURE_CLIENT_SECRET": {
        "value": "<Password>"
    },
    "region": {
        "value": "<Region>"
    },
    "resource_id": {
        "value": "/subscriptions/{subscriptionId}/resourceGroups/{resoureGroupName}/providers/Microsoft.Devices/IotHubs/{IotHub}"
    },
...

После развертывания модуля Telegraf доступ к сообщаемым метрикам можно получить либо через службу Azure Monitor, либо выбрав "Мониторинг" в Центр Интернета вещей на портал Azure.

Azure Monitor telemetry report

События работоспособности системы

Имя события Description
archon_exit Отправляется, когда пользователь изменяет статус модуля пространственного анализа с работает на остановлен.
archon_error Отправляется в случае сбоя любого из процессов внутри контейнера. Это является критической ошибкой.
InputRate Скорость, с которой график обрабатывает входной видеосигнал. Сообщалось каждые пять минут.
OutputRate Скорость, с которой график выводит информацию об ИИ. Сообщалось каждые пять минут.
archon_allGraphsStarted Отправляется, когда все графики завершены.
archon_configchange Отправляется при изменении конфигурации графика.
archon_graphCreationFailed Отправляется, когда график с сообщенным graphId не запускается.
archon_graphCreationSuccess Отправляется, когда график с сообщенным graphId запускается успешно.
archon_graphCleanup Отправляется, когда диаграмма с сообщенным graphId очищается и закрывается.
archon_graphHeartbeat Периодические сигналы отправляются для каждого графика навыка ежеминутно.
archon_apiKeyAuthFail Отправляется, если ключ ресурса визуального зрения не проходит проверку подлинности контейнера в течение более 24 часов из-за следующих причин: "Не квота", "Недопустимый", "Автономный".
VideoIngesterHeartbeat Отправляется каждый час для указания того, что видео передается из источника видео, с указанием количества ошибок за этот час. Сообщается для каждого графика.
VideoIngesterState Отчеты Остановлено или Запущено для потоковой передачи видео. Сообщается для каждого графика.

Устранение неполадок на устройстве IoT Edge

Вы можете воспользоваться инструментом командной строки iotedge для проверки состояния и журналов запущенных модулей. Например:

  • iotedge list: отображает список запущенных модулей. Вы можете дополнительно проверить наличие ошибок с помощью iotedge logs edgeAgent. Если iotedge зависает, попробуйте перезапустить его с помощью iotedge restart edgeAgent
  • iotedge logs <module-name>
  • iotedge restart <module-name> для перезапуска определенного модуля

Сбор файлов журналов с помощью контейнера диагностики

Функция пространственного анализа генерирует журналы отладки Docker, которые можно использовать для диагностики проблем во время выполнения или включать в заявки в службу поддержки. Модуль диагностики пространственного анализа доступен для загрузки в Microsoft Container Registry. В файле манифеста развертывания для вашего устройства Azure Stack Edge, настольного компьютера или виртуальной машины Azure с графическим процессором найдите модуль диагностики.

В разделе env добавьте следующую конфигурацию:

"diagnostics": {  
  "settings": {
  "image":   "mcr.microsoft.com/azure-cognitive-services/vision/spatial-analysis/diagnostics:1.0",
  "createOptions":   "{\"HostConfig\":{\"Mounts\":[{\"Target\":\"/usr/bin/docker\",\"Source\":\"/home/data/docker\",\"Type\":\"bind\"},{\"Target\":\"/var/run\",\"Source\":\"/run\",\"Type\":\"bind\"}],\"LogConfig\":{\"Config\":{\"max-size\":\"500m\"}}}}"
  }

Чтобы оптимизировать журналы, загружаемые в удаленную конечную точку, например в Хранилище BLOB-объектов Azure, мы рекомендуем поддерживать небольшой размер файла. См. нижеприведенный пример для рекомендуемой конфигурации журналов Docker.

{
    "HostConfig": {
        "LogConfig": {
            "Config": {
                "max-size": "500m",
                "max-file": "1000"
            }
        }
    }
}

Настройка уровня журнала

Конфигурация уровня журнала позволяет контролировать степень детализации создаваемых журналов. Поддерживаемые уровни журнала: none, verbose, info, warning и error. Уровень детализации журнала по умолчанию для узлов и платформы — info.

Уровни журнала можно изменить глобально, установив для переменной среды ARCHON_LOG_LEVEL одно из допустимых значений. Его также можно настроить с помощью документа IoT Edge Module Twin либо глобально, для всех развернутых навыков, либо для каждого конкретного навыка, установив значения для platformLogLevel и nodesLogLevel, как показано ниже.

{
    "version": 1,
    "properties": {
        "desired": {
            "globalSettings": {
                "platformLogLevel": "verbose"
            },
            "graphs": {
                "samplegraph": {
                    "nodesLogLevel": "verbose",
                    "platformLogLevel": "verbose"
                }
            }
        }
    }
}

сбор журналов

Примечание.

Модуль diagnostics не оказывает влияния на содержимое журнала, а лишь помогает в сборе, фильтрации и загрузке существующих журналов. Для использования этого модуля у вас должен быть Docker API версии 1.40 или выше.

Образец файла манифеста развертывания для вашего устройства Azure Stack Edge, настольного компьютера или виртуальной машины Azure с графическим процессором включает модуль с именем diagnostics, который собирает и загружает журналы. Этот модуль отключен по умолчанию и должен быть включен в конфигурации модуля IoT Edge, когда вам нужен доступ к журналам.

Коллекция diagnostics выполняется по запросу и управляется прямым методом IoT Edge и может отправлять журналы в Хранилище BLOB-объектов Azure.

Настройка целей загрузки диагностических данных

На портале IoT Edge выберите свое устройство, после чего выберите модуль диагностики. В образце файла манифеста развертывания для вашего устройства Azure Stack Edge, настольных компьютеров или виртуальной машины Azure с графическим процессором найдите переменные среды раздел диагностики, названныйenv, и добавьте следующую информацию:

Настройка загрузки в Хранилище BLOB-объектов Azure

  1. Создайте собственную учетную запись Хранилища BLOB-объектов Azure, если вы еще этого не сделали.
  2. Получите строку подключения для своей учетной записи хранения на портале Microsoft Azure. Он находится в ключах доступа.
  3. Журналы пространственного анализа автоматически передаются в контейнер больших двоичных объектов служба хранилища с именем rtcvlogs со следующим форматом имени файла: {CONTAINER_NAME}/{START_TIME}-{END_TIME}-{QUERY_TIME}.log
"env":{
    "IOTEDGE_WORKLOADURI":"fd://iotedge.socket",
    "AZURE_STORAGE_CONNECTION_STRING":"XXXXXX",   //from the Azure Blob Storage account
    "ARCHON_LOG_LEVEL":"info"
}

Отправка журналов пространственного анализа

Журналы загружаются по запросу с помощью метода getRTCVLogs IoT Edge в модуле diagnostics.

  1. Перейдите на страницу портала Центра Интернета вещей Azure, выберите Пограничные устройства, после чего выберите свое устройство и модуль диагностики.
  2. Перейдите на страницу сведений модуля и выберите вкладку прямого метода .
  3. Введите getRTCVLogs в имени метода и строку формата json в полезных данных. Вы можете ввести {}, что представляет собой пустую полезную нагрузку.
  4. Задайте время ожидания подключения и метода и выберите метод Invoke.
  5. Выберите целевой контейнер и создайте строку json полезной нагрузки, используя параметры, описанные в разделе Синтаксис ведения журнала. Выберите метод Invoke для выполнения запроса.

Примечание.

Вызов метода getRTCVLogs с пустой полезной нагрузкой вернет список всех контейнеров, развернутых на устройстве. Имя метода учитывает регистр. Если будет указано неправильное имя метода, вы получите ошибку 501.

Invoking the getRTCVLogs method getRTCVLogs Direct method page

Синтаксис ведения журнала

В таблице ниже перечислены параметры, которые вы можете использовать при запросе журналов.

Ключевое слово Description Значение по умолчанию
Время начала Требуемое время начала ведения журналов в миллисекундах по всемирному координированному времени. -1, начало среды выполнения контейнера. Когда [-1.-1] используется в качестве диапазона времени, API возвращает журналы за последний час.
EndTime Желаемое время окончания журналов в миллисекундах по всемирному координированному времени. -1, текущее время. Если [-1.-1] используется диапазон времени, API возвращает журналы за последний час.
ContainerId Целевой контейнер для получения журналов. null, когда нет идентификатора контейнера. API возвращает всю доступную информацию о контейнерах с идентификаторами.
DoPost Выполнение операции загрузки. Если установлено значение false, он выполняет запрошенную операцию и возвращает размер загрузки без выполнения загрузки. Если задано значение true, он инициирует асинхронную отправку выбранных журналов. false, не загружать.
Регулирование Укажите, сколько строк журналов загружать на пакет 1000, используйте этот параметр для регулировки скорости публикации.
Фильтры Журналы фильтров для загрузки null, фильтры могут быть указаны как пары "ключ-значение" на основе структуры журналов пространственного анализа: [UTC, LocalTime, LOGLEVEL,PID, CLASS, DATA]. Например: {"TimeFilter":[-1,1573255761112]}, {"TimeFilter":[-1,1573255761112]}, {"CLASS":["myNode"]

В нижеприведенной таблице перечислены атрибуты в ответе на запрос.

Ключевое слово Description
DoPost Либо true, либо false. Указывает, были ли загружены журналы или нет. Если вы решили не отправлять журналы, API возвращает сведения синхронно. При выборе отправки журналов API возвращает значение 200, если запрос действителен, и начинает асинхронно отправлять журналы.
TimeFilter Фильтр времени, примененный к журналам.
ValueFilters Фильтры ключевых слов, примененные к журналам.
TimeStamp Время начала выполнения метода.
ContainerId Идентификатор целевого контейнера.
FetchCounter Общее количество строк журнала.
FetchSizeInByte Общий объем данных журнала в байтах.
MatchCounter Допустимое количество строк журнала.
MatchSizeInByte Допустимый объем данных журнала в байтах.
FilterCount Общее количество строк журнала после применения фильтра.
FilterSizeInByte Общий объем данных журнала в байтах после применения фильтра.
FetchLogsDurationInMiliSec Продолжительность операции выборки.
PaseLogsDurationInMiliSec Продолжительность работы фильтра.
PostLogsDurationInMiliSec Продолжительность постоперации.

Пример запроса

{
    "StartTime": -1,
    "EndTime": -1,
    "ContainerId": "5fa17e4d8056e8d16a5a998318716a77becc01b36fde25b3de9fde98a64bf29b",
    "DoPost": false,
    "Filters": null
}

Пример отклика

{
    "status": 200,
    "payload": {
        "DoPost": false,
        "TimeFilter": [-1, 1581310339411],
        "ValueFilters": {},
        "Metas": {
            "TimeStamp": "2020-02-10T04:52:19.4365389+00:00",
            "ContainerId": "5fa17e4d8056e8d16a5a998318716a77becc01b36fde25b3de9fde98a64bf29b",
            "FetchCounter": 61,
            "FetchSizeInByte": 20470,
            "MatchCounter": 61,
            "MatchSizeInByte": 20470,
            "FilterCount": 61,
            "FilterSizeInByte": 20470,
            "FetchLogsDurationInMiliSec": 0,
            "PaseLogsDurationInMiliSec": 0,
            "PostLogsDurationInMiliSec": 0
        }
    }
}

Проверьте строки, время и размеры журнала выборки. Если эти настройки подходят, замените DoPost на true, и журналы с такими же фильтрами будут отправлены в места назначения.

Вы можете экспортировать журналы из Хранилища BLOB-объектов Azure в процессе устранения неполадок.

Устранение неполадок устройства Azure Stack Edge

В нижеприведенном разделе содержится справка по отладке и проверке состояния вашего устройства Azure Stack Edge.

Получите доступ к конечной точке Kubernetes API. 

  1. В локальном интерфейсе вашего устройства перейдите на страницу Устройства.
  2. В разделе Конечные точки устройства скопируйте конечную точку службы Kubernetes API. Эта конечная точка представляет собой строку в следующем формате: https://compute..[device-IP-address].
  3. Сохраните строку конечной точки. Вы будете использовать это позже при настройке kubectl для доступа к кластеру Kubernetes.

Подключение к интерфейсу PowerShell

Удаленно подключитесь с помощью клиента Windows. После создания кластера Kubernetes вы можете управлять приложениями через этот кластер. Необходимо подключиться к интерфейсу PowerShell устройства. В зависимости от операционной системы клиента процедуры удаленного подключения к устройству могут отличаться. Следующие шаги предназначены для клиента Windows, работающего с PowerShell.

Совет

  • Прежде чем начать, убедитесь, что ваш клиент Windows работает под управлением Windows PowerShell 5.0 или более поздней версии.
  • PowerShell также доступен в Linux.
  1. Запустите сеанс Windows PowerShell от имени администратора.

    Убедитесь, что на вашем клиенте запущена служба удаленного управления Windows. В командной строке введите winrm quickconfig.

  2. Назначьте переменную для IP-адреса устройства. Например, $ip = "<device-ip-address>".

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

    Set-Item WSMan:\localhost\Client\TrustedHosts $ip -Concatenate -Force
    
  4. Запустите на устройстве сеанс Windows PowerShell.

    Enter-PSSession -ComputerName $ip -Credential $ip\EdgeUser -ConfigurationName Minishell
    
  5. В ответ на запрос укажите пароль. Используйте тот же пароль, который используется для входа в локальный веб-интерфейс. Пароль локального веб-интерфейса по умолчанию — Password1.

Доступ к кластеру Kubernetes

После создания кластера Kubernetes вы сможете использовать инструмент командной строки kubectl для доступа к кластеру.

  1. Создайте новое пространство имен.

    New-HcsKubernetesNamespace -Namespace
    
  2. Создайте пользователя и получите файл конфигурации. Эта команда выводит сведения о конфигурации кластера Kubernetes. Скопируйте эту информацию и сохраните ее в файле с именем config. Не сохраняйте файл с расширением файла.

    New-HcsKubernetesUser -UserName
    
  3. Добавьте файл config в папку .kube в вашем профиле пользователя на локальном компьютере.

  4. Настройте связь пространства имен с созданным пользователем.

    Grant-HcsKubernetesNamespaceAccess -Namespace -UserName
    
  5. Установите kubectl на свой клиент Windows, используя следующую команду:

    curl https://storage.googleapis.com/kubernetesrelease/release/v1.15.2/bin/windows/amd64/kubectl.exe -O kubectl.exe
    
  6. Добавьте запись DNS в файл hosts в системе.

    1. Запустите Блокнот от имени администратора и откройте файл hosts, расположенный по адресу C:\windows\system32\drivers\etc\hosts.
    2. Создайте запись в файле hosts с IP-адресом устройства и доменом DNS, полученным на странице Устройство в локальном пользовательском интерфейсе. Конечная точка, которую вы должны использовать, будет выглядеть примерно так: https://compute.asedevice.microsoftdatabox.com/10.100.10.10.
  7. Убедитесь, что вы можете подключиться к модулям Kubernetes.

    kubectl get pods -n "iotedge"
    

Чтобы получить журналы контейнера, выполните следующую команду:

kubectl logs <pod-name> -n <namespace> --all-containers

Полезные команды

Команда Description
Get-HcsKubernetesUserConfig -AseUser Создает файл конфигурации Kubernetes. При использовании команды скопируйте сведения в файл с именем config. Не сохраняйте файл с расширением файла.
Get-HcsApplianceInfo Возвращает информацию о вашем устройстве.
Enable-HcsSupportAccess Создает учетные данные для доступа для начала сеанса поддержки.

Как подать заявку в службу поддержки для пространственного анализа

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

Заполнение основных сведений

Создайте новый запрос в службу поддержки на странице Новый запрос в службу поддержки. Следуйте инструкциям по заполнению следующих параметров:

Support basics

  1. Установите для Тип проблемы значение Technical.
  2. Выберите подписку, используемую для развертывания контейнера пространственного анализа.
  3. Выберите My services и Azure AI services в качестве услуги.
  4. Выберите ресурс, используемый для развертывания контейнера пространственного анализа.
  5. Напишите краткое описание проблемы, с которой вы столкнулись.
  6. В качестве типа проблемы выберите Spatial Analysis.
  7. Выберите соответствующий подтип в раскрывающемся списке.
  8. Выберите Далее: Решения, чтобы перейти к следующей странице.

На следующем этапе будут предложены рекомендуемые решения для выбранного вами типа проблемы. Эти решения решают наиболее распространенные проблемы, но если они бесполезны для вашего решения, выберите Далее: Подробности, чтобы перейти к следующему шагу.

Сведения

На этой странице добавьте дополнительные сведения о проблеме, с которой вы столкнулись. Обязательно укажите как можно больше подробностей, так как это поможет нашим инженерам сузить круг возможных причин проблемы. Укажите предпочитаемый способ связи и серьезность проблемы, чтобы мы могли связаться с вами надлежащим образом, и выберите Далее: Просмотр + создание, чтобы перейти к следующему шагу.

Проверка и создание

Просмотрите подробности вашего запроса в службу поддержки, чтобы убедиться, что все верно и эффективно отражает проблему. Когда вы будете готовы, нажмите кнопку "Создать ", чтобы отправить билет в нашу команду! Вы получите подтверждение электронной почты после получения вашего билета, и наша команда будет работать, чтобы вернуться к вам как можно скорее. Состояние виртуальной машины отображается на портале Microsoft Azure.

Следующие шаги