遙測和疑難排解

空間分析包含一組功能,可監視系統的健康情況,並協助診斷問題。

啟用視覺效果

若要在影片畫面中啟用 AI Insight 事件的視覺效果,您必須在 .debug 桌上型電腦或 Azure VM 上使用空間分析作業 的版本 。 Azure Stack Edge 裝置上無法進行視覺效果。 有四個可用的偵錯作業。

如果您的裝置是本機桌上型電腦或 Azure GPU VM(已啟用遠端桌面),則可以切換至 .debug 任何作業的版本,並將輸出視覺化。

  1. 在本機或使用執行空間分析之主機電腦上的遠端桌面用戶端,開啟桌面。

  2. 在終端機執行中 xhost +

  3. 使用 環境變數的值 DISPLAY ,更新模組底下的 spaceanalytics 部署資訊清單 。 您可以在主機電腦上的終端機中執行 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 監視器。 telegraf 模組可以使用所需的自訂輸入和輸出來建置。 空間分析中的 telegraf 模組組態是部署資訊清單的一部分(上述連結)。 此模組是選擇性的,如果您不需要,則可以從資訊清單中移除。

輸入:

  1. 空間分析計量
  2. 磁片計量
  3. CPU 計量
  4. Docker 計量
  5. GPU 計量

輸出:

  1. Azure 監視器

提供的 Spatial Analysis telegraf 模組會將空間分析容器發出的所有遙測資料發佈至 Azure 監視器。 如需將 Azure 監視器新增至訂用帳戶的資訊,請參閱 Azure 監視器

設定 Azure 監視器之後,您必須建立認證,讓模組能夠傳送遙測。 您可以使用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>"

在具有 GPU 的 Azure Stack Edge 裝置 桌上型電腦 Azure VM 的部署資訊清單中,尋找 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 監視器服務存取回報的計量,或在Azure 入口網站的IoT 中樞中選取 [監視 ]。

Azure Monitor telemetry report

系統健康情況事件

事件名稱 描述
archon_exit 當使用者將空間分析模組狀態從 執行 變更為 已停止 時傳送。
archon_error 當容器內的任何進程當機時傳送。 這是嚴重錯誤。
InputRate 圖形處理視訊輸入的速率。 每 5 分鐘報告一次。
OutputRate 圖形輸出 AI 深入解析的速率。 每 5 分鐘報告一次。
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 中下載空間分析診斷模組。 在具有 GPU 的 Azure Stack Edge 裝置 桌上型電腦 Azure VM 的資訊清單部署檔案中,尋找 診斷 模組。

在 [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\"}}}}"
  }

若要將上傳至遠端端點的記錄優化,例如Azure Blob 儲存體,建議您維護較小的檔案大小。 如需建議的 Docker 記錄設定,請參閱下列範例。

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

設定記錄層級

記錄層級設定可讓您控制所產生記錄檔的詳細資訊。 支援的記錄層級包括: none 、、 verboseinfowarning 、 和 error 。 節點和平臺的預設記錄詳細資訊層級為 info

將環境變數設定 ARCHON_LOG_LEVEL 為其中一個允許的值,即可全域修改記錄層級。 您也可以透過 IoT Edge 模組對應項檔,全域設定所有已部署技能,或設定 和 nodesLogLevel 的值 platformLogLevel ,針對每個特定技能進行設定,如下所示。

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

收集記錄

注意

模組 diagnostics 不會影響記錄內容,只會協助收集、篩選及上傳現有的記錄。 您必須有 Docker API 1.40 版或更高版本才能使用此模組。

具有 GPU 的 Azure Stack Edge 裝置 桌上型電腦 或 Azure VM 的範例部署資訊清單檔案包含名為 diagnostics 的模組,可收集和上傳記錄。 此模組預設為停用,當您需要存取記錄時,應該透過 IoT Edge 模組組態來啟用。

集合 diagnostics 是隨選且透過 IoT Edge 直接方法控制的,而且可以將記錄傳送至Azure Blob 儲存體。

設定診斷上傳目標

從 IoT Edge 入口網站中,選取您的裝置,然後 選取診斷 模組。 在 Azure Stack Edge 裝置 桌上型電腦 具有 GPU 的 Azure VM 範例部署資訊清單檔 中,尋找 [環境變數 ] 區段以取得診斷,並 env 新增下列資訊:

設定上傳至Azure Blob 儲存體

  1. 如果您尚未建立自己的 Azure Blob 儲存體 帳戶。
  2. 從 Azure 入口網站 取得記憶體帳戶的 連線 字串。 它會位於存取金鑰
  3. 空間分析記錄會自動上傳至名為 rtcvlogs 的 Blob 儲存體 容器,其檔名格式如下:{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 模組中使用 diagnostics IoT Edge方法。

  1. 移至您的 IoT 中樞 入口網站頁面,選取 [Edge 裝置],然後選取您的裝置和診斷模組。
  2. 移至模組的詳細數據頁面,然後選取 直接方法索引 標籤。
  3. 在 [方法名稱] 上輸入 ,並在承載中輸入 getRTCVLogs json 格式字串。 您可以輸入 {},這是空承載。
  4. 設定連線和方法逾時,然後選取 [ 叫用方法]。
  5. 選取您的目標容器,並使用記錄語法一節中所述的參數來建置承載 JSON 字串。 選取 [ 叫用方法 ] 以執行要求。

注意

getRTCVLogs 用具有空承載的方法會傳回裝置上部署的所有容器清單。 方法名稱會區分大小寫。 如果指定了不正確的方法名稱,您會收到 501 錯誤。

Invoking the getRTCVLogs method getRTCVLogs Direct method page

記錄語法

下表列出查詢記錄時可以使用的參數。

關鍵字 描述 預設值
StartTime 所需的記錄開始時間,以毫秒為單位 UTC。 -1,容器運行時間的開頭。 當 做時間範圍使用時 [-1.-1] ,API 會傳回過去一小時的記錄。
EndTime 所需的記錄結束時間,以毫秒 UTC 為單位。 -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"]

下表列出查詢回應中的屬性。

關鍵字 描述
DoPost Truefalse。 指出是否已上傳記錄。 當您選擇不上傳記錄時,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 ,且會將具有相同篩選條件的記錄推送至目的地。

針對問題進行疑難解答時,您可以從 Azure Blob 儲存體 匯出記錄。

針對 Azure Stack Edge 裝置進行疑難解答

下一節提供協助偵錯和驗證 Azure Stack Edge 裝置的狀態。

存取 Kubernetes API 端點。 

  1. 在裝置的本機 UI 中,移至 [ 裝置] 頁面。
  2. 在 [裝置端點]下,複製 Kubernetes API 服務端點。 此端點是下列格式的字串: https://compute..[device-IP-address]
  3. 儲存端點字串。 稍後設定以存取 Kubernetes 叢集時 kubectl ,您將使用此專案。

連線 至 PowerShell 介面

從遠端連線到 Windows 用戶端。 建立 Kubernetes 叢集之後,您可以透過此叢集管理應用程式。 您必須連線到裝置的PowerShell介面。 視用戶端的操作系統而定,遠端連線到裝置的程式可能不同。 下列步驟適用於執行 PowerShell 的 Windows 用戶端。

提示

  • 開始之前,請確定您的 Windows 用戶端正在執行 Windows PowerShell 5.0 或更新版本。
  • Linux 上也提供PowerShell。
  1. 以 管理員 istrator 身分執行 Windows PowerShell 會話。

    1. 請確定 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. 出現提示時提供密碼。 使用用來登入本機 Web 介面的相同密碼。 預設的本機 Web 介面密碼為 Password1

存取 Kubernetes 叢集

建立 Kubernetes 叢集之後,您可以使用 kubectl 命令行工具來存取叢集。

  1. 建立新的命名空間。

    New-HcsKubernetesNamespace -Namespace
    
  2. 建立使用者並取得組態檔。 此命令會輸出 Kubernetes 叢集的組態資訊。 複製此資訊,並將其儲存在名為 config 的檔案中。請勿將檔案儲存為擴展名。

    New-HcsKubernetesUser -UserName
    
  3. 組態 檔新增至 本機計算機上使用者配置檔中的 .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 專案新增至系統上的主機檔案。

    1. 以系統管理員身分執行 記事本,並開啟位於C:\windows\system32\drivers\etc\hosts主機檔案。
    2. 使用您從 本機 UI 中的 [裝置 ] 頁面取得的裝置 IP 位址和 DNS 網域,在主機檔案中建立專案。 您應該使用的端點看起來會類似: https://compute.asedevice.microsoftdatabox.com/10.100.10.10
  7. 確認您可以連線到 Kubernetes Pod。

    kubectl get pods -n "iotedge"
    

若要取得容器記錄,請執行下列命令:

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

有用的命令

Command 描述
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. 選取 [下一步:要移至下一頁的解決方案 ]。

下一個階段會針對您選取的問題類型提供建議的解決方案。 這些解決方案將解決最常見的問題,但如果不適合您的解決方案,請選取 [下一步:詳細數據 ] 以移至下一個步驟。

詳細資料

在此頁面上,新增一些關於您所遇到問題的其他詳細數據。 請務必盡可能包含詳細數據,因為這有助於我們的工程師更縮小問題範圍。 包含您慣用的連絡方法和問題的嚴重性,以便我們適當地連絡您,然後選取 [下一步:檢閱 + 建立 ] 以移至下一個步驟。

檢閱及建立

檢閱支援要求的詳細數據,以確保一切正確無誤,並有效地代表問題。 準備好之後,請選取 [建立] 將票證傳送至我們的小組! 收到您的票證后,您會收到電子郵件確認,我們的小組將儘速返回您。 您可以在 Azure 入口網站 中檢視票證的狀態。

下一步