Two types of telemetry are used to monitor and analyze execution of Azure CLI commands. One called ARM telemetry is recorded basing on HTTP traffic by ARM, and another is client side telemetry sent by Azure CLI.
ARM telemetry tracks all HTTP requests and responses through ARM endpoint. As far as we know, below cases don't have ARM telemetry record.
- Command doesn't create request successfully, for instance, parameter cannot pass validation, request or payload cannot be constructed.
- Command calls data plane service API.
- Network is inaccessible.
- No request is needed during execution.
Client side telemetry is sent at the end of Azure CLI command execution. It covers all commands, no matter if it has http requests or just has local operations. Sanitized data is stored in Kusto cluster which is managed by DevDiv Data team.
All Azure CLI data is stored in a large json named Properties
in table RawEventsAzCli
. Some properties are flatten, some are not. Here are some useful fields:
The telemetry has different schema pre Azure CLI 2.0.28. All the fields explained below are for new schema, in other words, CLI version > 2.0.28.
EventName
:azurecli/command
orazurecli/fault
orazurecli/extension
azurecli/command
means this is common event record with generalProperties
field.azurecli/fault
means this is additional event record with extra exception info inProperties
field.azurecli/extension
means this is additional event record with customized info inProperties
field.- Additional event record can be joined with common event record using
CorrelationId
.
CorrelationId
: GUID to join additional event records with common event recordazurecli/extension
event records have the sameCorrelationId
with relatedazurecli/command
event record.azurecli/fault
event hasProperties['reserved.datamodel.correlation.1']
field. The field value is{correlationId},UserTask,
where{correlationId}
isCorrelationId
field of relatedazurecli/command
record.
EntityType
:UserTask
/Fault
- For
EventName == 'azurecli/command'
, theEntityType
isUserTask
. - For
EventName == 'azurecli/fault'
, theEntityType
isFault
.
- For
EventTimeStamp
: time when the telemetry record is sentProductVersion
: CLI core version in the format ofazurecli@{version}
CoreVersion
: CLI core versionExeVersion
:{cli_core_version}@{module_version}
. In the new schema (CLI version > 2.0.28), all module versions arenone
. Hence this field is{cli_core_version}@none
OsType
: OS system, eg. linux, windowsOsVersion
: OS platform version, eg. 10.0.14942PythonVersion
: platform python versionShellType
: cmd/bash/ksh/zsh/cloud-shell/... Note: may not be accurate.MacAddressHash
: SHA256 hashed MAC addressMachineId
: GUID coming from the first 128bit of MacAddressHashUserId
: CLI installation id. Each CLI client installed locally will have a GUID as installation id. It's stored in $homeFolder/.azure/azureProfile.jsonSessionId
: SHA256 hashed result of CLI installation id, parent process (terminal session) creation time and parent process (terminal session) id. Note: may not be accurate.RawCommand
: CLI command nameParams
: CLI command arguments (without argument value)AzureSubscriptionId
: current subscription idClientRequestId
: GUID which is set on HTTP headerStartTime
: time when the command begins executingEndTime
: time when the command exitsActionResult
:- For
EntityType == 'UserTask'
, it could beSuccess
/Failure
/UserFault
/None
. All others besidesSuccess
means failure. - For
EntityType == 'Fault'
, it's empty.
- For
ResultSummary
: details of result, may be suppressed to meet security & privacy requirements.ExceptionMessage
: details of exception, may be suppressed to meet security & privacy requirements.Properties
: large json with all constructed fields. Below is to explain some unflattened fields not introduced before.reserved.datamodel.entityname
: CLI command name with hyphensreserved.datamodel.correlation.1
: Additional field whenEventName == 'azurecli/fault'
. It's in the format of{correlationId},UserTask,
where{correlationId}
isCorrelationId
field of relatedEventName == 'azurecli/command'
record.reserved.datamodel.fault.typestring
: Additional field whenEventName == 'azurecli/fault'
. It logs the exception class.reserved.datamodel.fault.description
: Additional field whenEventName == 'azurecli/fault'
. It logs exception description or fault type.context.default.vs.core.os.platform
: OS platformcontext.default.azurecli.source
:az
/completer
. It'scompleter
if we found argument auto complete settings in os environment variable.context.default.azurecli.environmentvariables
: It logs customer's environment variables starting withAZURE_CLI
context.default.azurecli.extensionname
: It logs the extension name and version in the format of{extension_name}@{extension_version}
if the command is from CLI extension.context.default.azurecli.installer
: value of os environment variableAZ_INSTALLER
context.default.azurecli.error_type
: It logs the exception class name.context.default.azurecli.exception_name
: A supplementation forcontext.default.azurecli.error_type
-
Kusto Examples - Samples for kusto query
-
FAQ - Commonly asked questions