mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
AzureMonitor: Improve handling of unsupported template variable cases in URIs (#52054)
* Set error message for certain template variable combinations - Make use of setError method from query editor - Update Azure Monitor error type - Add test for case 2 from https://github.com/grafana/grafana/pull/51331 * Update template variable docs * Fix lint issues * Update docs/sources/datasources/azuremonitor/template-variables.md Co-authored-by: Garrett Guillotte <100453168+gguillotte-grafana@users.noreply.github.com> * PR comment updates Co-authored-by: Garrett Guillotte <100453168+gguillotte-grafana@users.noreply.github.com>
This commit is contained in:
@@ -62,3 +62,67 @@ Perf
|
||||
| summarize avg(CounterValue) by bin(TimeGenerated, $__interval), Computer
|
||||
| order by TimeGenerated asc
|
||||
```
|
||||
|
||||
## Limitations
|
||||
|
||||
As of Grafana 9.0, a resource URI is constructed to identify resources using the resource picker. On dashboards created prior to Grafana 9.0, Grafana automatically migrates any queries using the prior resource-picking mechanism to use this method.
|
||||
|
||||
Some resource types use nested namespaces and resource names, such as `Microsoft.Storage/storageAccounts/tableServices` and `storageAccount/default`, or `Microsoft.Sql/servers/databases` and `serverName/databaseName`. Such template variables cannot be used because the result could be a malformed resource URI.
|
||||
|
||||
### Supported cases
|
||||
|
||||
#### Standard namespaces and resource names
|
||||
|
||||
```kusto
|
||||
metricDefinition = $ns
|
||||
$ns = Microsoft.Compute/virtualMachines
|
||||
resourceName = $rs
|
||||
$rs = testvirtualmachine
|
||||
```
|
||||
|
||||
#### Namespaces with a non-templated sub-namespace
|
||||
|
||||
```kusto
|
||||
metricDefinition = $ns/tableServices
|
||||
$ns = Microsoft.Storage/storageAccounts
|
||||
resourceName = $rs/default
|
||||
$rs = storageaccount
|
||||
```
|
||||
|
||||
#### Storage namespaces missing the `default` keyword
|
||||
|
||||
```kusto
|
||||
metricDefinition = $ns/tableServices
|
||||
$ns = Microsoft.Storage/storageAccounts
|
||||
resourceName = $rs
|
||||
$rs = storageaccount
|
||||
```
|
||||
|
||||
#### Namespaces with a templated sub-namespace
|
||||
|
||||
```kusto
|
||||
metricDefinition = $ns/$sns
|
||||
$ns = Microsoft.Storage/storageAccounts
|
||||
$sns = tableServices
|
||||
resourceName = $rs
|
||||
$rs = storageaccount
|
||||
```
|
||||
|
||||
### Unsupported case
|
||||
|
||||
If a dashboard uses this unsupported case, migrate it to one of the [supported cases](#supported-cases).
|
||||
|
||||
If a namespace or resource name template variable contains multiple segments, Grafana will construct the resource URI incorrectly because the template variable cannot be appropriately split.
|
||||
|
||||
For example:
|
||||
|
||||
```kusto
|
||||
metricDefinition = $ns
|
||||
resourceName = $rs
|
||||
$ns = 'Microsoft.Storage/storageAccounts/tableServices'
|
||||
$rs = 'storageaccount/default'
|
||||
```
|
||||
|
||||
This would result in an incorrect resource URI containing `Microsoft.Storage/storageAccounts/tableServices/storageaccount/default`. However, the correct URI would have the format `Microsoft.Storage/storageAccounts/storageaccount/tableServices/default`.
|
||||
|
||||
An appropriate fix would be to update the template variable that does not match a supported case. If the namespace variable `$ns` is of the form `Microsoft.Storage/storageAccounts/tableServices` this could be split into two variables: `$ns1 = Microsoft.Storage/storageAccounts` and `$ns2 = tableServices`. The metric definition would then take the form `$ns1/$ns2` which leads to a correctly formatted URI.
|
||||
|
||||
Reference in New Issue
Block a user