Analyze an app key vault secret trace telemetry
APPLIES TO: Business Central 2020 release wave 2 and later
App key vault telemetry gathers information about the acquisition of secrets in Azure Key Vaults by extensions at runtime. For an overview of app key vaults and secrets, see Using App Key Vaults with Business Central Extensions.
The app key vault secret process has two operations: initialization and retrieval. The telemetry data provides information about the success or failure for each of these operations. There are various conditions that cause a failure. The failure messages provide insight into the cause of the failure, helping you identify, troubleshoot, and resolve issues.
Initialization
Initialization is the first stage. It verifies the configuration of the app key vault provider in the extension and on the service. This stage is initiated by the TryInitializeFromCurrentApp
method call in the extension code. Some conditions that cause failures in this stage include:
- The extension doesn't specify a key vault in it's app.json file.
- The Azure Key Vault Client Identity settings are incorrect. For example, it could be that the application (client) ID that you specified for the key vault reader application in Azure is wrong.
- The Business Central Server lacks permission to the private key of the Azure Key Vault client certificate.
Retrieval
Retrieval is the second stage, and occurs after a successful initialization. In this stage, the service tries to get a secret from a specified key vault. This stage is initiated by the GetSecret
method call in the extension code. Some conditions that cause failures include:
- The secret name requested by the extension is doesn't exist or isn't valid.
- The key vault doesn't exist.
- The application ID doesn't have permission to read from the key vault.
For more information about using key vault secrets with extensions, see App Key Vaults with Business Central Extensions.
App Key Vault secret initialization succeeded
Occurs when an extension secret was successfully initialized.
General dimensions
Dimension | Description or value |
---|---|
message | App Key Vault initialization succeeded: '{keyVaultUri}'. |
severityLevel | 1 |
Custom dimensions
Dimension | Description or value |
---|---|
alObjectId | Specifies the ID of the AL object that was run by request. |
alObjectName | Specifies the name of the AL object that was run by request. |
alObjectType | Specifies the type of AL object that was run by request. |
alStackTrace | The stack trace in AL. |
clientType | Specifies the type of client that executed the request, such as Background or Web. For a list of the client types, see ClientType Option Type. |
component | Dynamics 365 Business Central Server. |
componentVersion | Specifies the version number of the component that emits telemetry (see the component dimension.) |
deprecatedKeys | A comma-separated list of all the keys that have been deprecated. The keys in this list are still supported but will eventually be removed in the next major release. We recommend that update any queries that use these keys to use the new key name. |
eventId | RT0014 |
extensionId | Specifies the AppID of the extension that requested the secret. |
extensionName | Specifies the name of the extension that requested the secret. |
extensionPublisher | Specifies the publisher of the extension that requested the secret. |
extensionVersion | Specifies the version of the extension that requested the secret. |
keyVaultUrls | Specifies the DNS name of the Azure key vault that was used in the request. The keyVaultUris are specified in the app.json file of the extension. |
telemetrySchemaVersion | Specifies the version of the Business Central telemetry schema. |
Sample KQL code (successful Azure Keyvault initializations)
This KQL code can help you get started analyzing Azure Keyvault initializations.
traces
| where timestamp > ago(60d) // adjust as needed
| where customDimensions.eventId == 'RT0014'
| project timestamp
, alObjectId = customDimensions.alObjectId
, alObjectName = customDimensions.alObjectName
, alObjectType = customDimensions.alObjectType
, alStackTrace = customDimensions.alStackTrace
, clientType = customDimensions.clientType
, extensionName = customDimensions.extensionName
, extensionId = customDimensions.extensionId
, extensionPublisher = customDimensions.extensionPublisher
, extensionVersion = customDimensions.extensionVersion
, keyVaultUrls = customDimensions.keyVaultUrls
App Key Vault initialization failed
Occurs when a key vault failed to be initialized.
General dimensions
Dimension | Description or value |
---|---|
message | App Key Vault initialization failed. |
severityLevel | 3 |
Custom dimensions
Dimension | Description or value |
---|---|
alObjectId | Specifies the ID of the AL object that was run by request. |
alObjectName | Specifies the name of the AL object that was run by request. |
alObjectType | Specifies the type of AL object that was run by request. |
alStackTrace | The stack trace in AL. |
clientType | Specifies the type of client that executed request, such as Background or Web. For a list of the client types, see ClientType Option Type. |
component | Dynamics 365 Business Central Server. |
componentVersion | Specifies the version number of the component that emits telemetry (see the component dimension.) |
deprecatedKeys | A comma-separated list of all the keys that have been deprecated. The keys in this list are still supported but will eventually be removed in the next major release. We recommend that update any queries that use these keys to use the new key name. |
eventId | RT0015 |
extensionId | Specifies the AppID of the extension that requested the secret. |
extensionName | Specifies the name of the extension that requested the secret. |
extensionPublisher | Specifies the publisher of the extension that requested the secret. |
extensionVersion | Specifies the version of the extension that requested the secret. |
failureReason | Specifies the error that occurred. |
telemetrySchemaVersion | Specifies the version of the Business Central telemetry schema. |
Sample KQL code (Azure Keyvault initialization errors)
This KQL code can help you get started troubleshooting and alerting on Azure Keyvault retrieval errors.
traces
| where timestamp > ago(60d) // adjust as needed
| where customDimensions.eventId == 'RT0015'
| project timestamp
, alObjectId = customDimensions.alObjectId
, alObjectName = customDimensions.alObjectName
, alObjectType = customDimensions.alObjectType
, alStackTrace = customDimensions.alStackTrace
, clientType = customDimensions.clientType
, extensionName = customDimensions.extensionName
, extensionId = customDimensions.extensionId
, extensionPublisher = customDimensions.extensionPublisher
, extensionVersion = customDimensions.extensionVersion
, failureReason = customDimensions.failureReason
To learn more about how to setup alerting on Business Central telemetry, see Alert on Telemetry.
App Key Vault secret retrieval succeeded
Occurs when a secret used by an extension is successfully retrieved from an Azure Key Vault.
General dimensions
Dimension | Description or value |
---|---|
message | App Key Vault secret retrieval succeeded from key vault '{keyVaultUri}'. |
severityLevel | 1 |
Custom dimensions
Dimension | Description or value |
---|---|
alObjectId | Specifies the ID of the AL object that was run by request. |
alObjectName | Specifies the name of the AL object that was run by request. |
alObjectType | Specifies the type of AL object that was run by request. |
alStackTrace | The stack trace in AL. |
clientType | Specifies the type of client that executed the SQL Statement, such as Background or Web. For a list of the client types, see ClientType Option Type. |
component | Dynamics 365 Business Central Server. |
componentVersion | Specifies the version number of the component that emits telemetry (see the component dimension.) |
deprecatedKeys | A comma-separated list of all the keys that have been deprecated. The keys in this list are still supported but will eventually be removed in the next major release. We recommend that update any queries that use these keys to use the new key name. |
eventId | RT0016 |
extensionId | Specifies the AppID of the extension that requested the secret. |
extensionName | Specifies the name of the extension that requested the secret. |
extensionPublisher | Specifies the publisher of the extension that requested the secret. |
extensionVersion | Specifies the version of the extension that requested the secret. |
keyVaultUrl | Specifies the DNS name of the Azure key vault that was used in the request. The keyVaultUris are specified in the app.json file of the extension. |
telemetrySchemaVersion | Specifies the version of the Business Central telemetry schema. |
Sample KQL code (successful Azure Keyvault retrievals)
This KQL code can help you get started analyzing Azure Keyvault retrievals.
traces
| where timestamp > ago(60d) // adjust as needed
| where customDimensions.eventId == 'RT0016'
| project timestamp
, alObjectId = customDimensions.alObjectId
, alObjectName = customDimensions.alObjectName
, alObjectType = customDimensions.alObjectType
, alStackTrace = customDimensions.alStackTrace
, clientType = customDimensions.clientType
, extensionName = customDimensions.extensionName
, extensionId = customDimensions.extensionId
, extensionPublisher = customDimensions.extensionPublisher
, extensionVersion = customDimensions.extensionVersion
, keyVaultUrl = customDimensions.keyVaultUrl
App Key Vault secret retrieval failed
Occurs when an extension failed to retrieve a secret from a specified Azure key vault.
General dimensions
Dimension | Description or value |
---|---|
message | App Key Vault secret retrieval failed from key vault '{keyVaultUri}'. |
severityLevel | 3 |
Custom dimensions
Dimension | Description or value |
---|---|
alObjectId | Specifies the ID of the AL object that was run by request. |
alObjectName | Specifies the name of the AL object that was run by request. |
alObjectType | Specifies the type of AL object that was run by request. |
alStackTrace | The stack trace in AL. |
clientType | Specifies the type of client that executed the SQL Statement, such as Background or Web. For a list of the client types, see ClientType Option Type. |
component | Dynamics 365 Business Central Server. |
componentVersion | Specifies the version number of the component that emits telemetry (see the component dimension.) |
deprecatedKeys | A comma-separated list of all the keys that have been deprecated. The keys in this list are still supported but will eventually be removed in the next major release. We recommend that update any queries that use these keys to use the new key name. |
eventId | RT0017 |
extensionId | Specifies the AppID of the extension that requested the secret. |
extensionName | Specifies the name of the extension that requested the secret. |
extensionPublisher | Specifies the publisher of the extension that requested the secret. |
extensionVersion | Specifies the version of the extension that requested the secret. |
keyVaultUrl | Specifies the DNS name of the Azure key vault that was used in the request. The keyVaultUris are specified in the app.json file of the extension. |
telemetrySchemaVersion | Specifies the version of the Business Central telemetry schema. |
Sample KQL code (Azure Keyvault retrieval errors)
This KQL code can help you get started troubleshooting and alerting on Azure Keyvault retrieval errors.
traces
| where timestamp > ago(60d) // adjust as needed
| where customDimensions.eventId == 'RT0017'
| project timestamp
, alObjectId = customDimensions.alObjectId
, alObjectName = customDimensions.alObjectName
, alObjectType = customDimensions.alObjectType
, alStackTrace = customDimensions.alStackTrace
, clientType = customDimensions.clientType
, extensionName = customDimensions.extensionName
, extensionId = customDimensions.extensionId
, extensionPublisher = customDimensions.extensionPublisher
, extensionVersion = customDimensions.extensionVersion
, failureReason = customDimensions.failureReason
, keyVaultUrl = customDimensions.keyVaultUrl
To learn more about how to setup alerting on Business Central telemetry, see Alert on Telemetry.
See also
App Key Vaults with Business Central Extensions
Monitoring and Analyzing Telemetry
Enable Sending Telemetry to Application Insights
Alert on Telemetry