Skip to content

az monitor log-analytics query fails with CloudEndpointNotSetException on custom clouds #10124

Description

@kamil-mrzyglod

Describe the bug

Running az monitor log-analytics query against a custom cloud (i.e. any cloud other than AzureCloud) raises CloudEndpointNotSetException, making the command completely unusable on sovereign or local clouds.

I have logAnalyticsResourceId set in my cloud config:

{
  "endpoints": {
    "acrLoginServerEndpoint": "https://topaz.local.dev:8899",
    "activeDirectory": "https://topaz.local.dev:8899",
    "activeDirectoryDataLakeResourceId": null,
    "activeDirectoryGraphResourceId": "https://topaz.local.dev:8899",
    "activeDirectoryResourceId": "https://topaz.local.dev:8899",
    "appInsightsResourceId": null,
    "appInsightsTelemetryChannelResourceId": null,
    "appServiceResourceId": null,
    "attestationResourceId": null,
    "azmirrorStorageAccountResourceId": null,
    "batchResourceId": null,
    "gallery": null,
    "logAnalyticsResourceId": "https://api.loganalytics.topaz.local.dev:8899",
    "management": "https://management.core.windows.net/",
    "mediaResourceId": null,
    "microsoftGraphResourceId": "https://topaz.local.dev:8899",
    "ossrdbmsResourceId": null,
    "portal": null,
    "resourceManager": "https://topaz.local.dev:8899",
    "sqlManagement": null,
    "synapseAnalyticsResourceId": null,
    "vmImageAliasDoc": null
  },
  "isActive": true,
  "name": "Topaz",
  "profile": "latest",
  "suffixes": {
    "acrLoginServerEndpoint": ".cr.topaz.local.dev",
    "attestationEndpoint": null,
    "azureDatalakeAnalyticsCatalogAndJobEndpoint": null,
    "azureDatalakeStoreFileSystemEndpoint": null,
    "keyvaultDns": ".vault.topaz.local.dev",
    "mariadbServerEndpoint": null,
    "mhsmDns": null,
    "mysqlServerEndpoint": null,
    "postgresqlServerEndpoint": null,
    "sqlServerHostname": null,
    "storageEndpoint": "storage.topaz.local.dev",
    "storageSyncEndpoint": null,
    "synapseAnalyticsEndpoint": null
  }
}

Related command

az monitor log-analytics query -w {customerId} --analytics-query "CliTakeTable_CL | take 2"

Errors

The command fails with error code 1. The run with --debug:

 az monitor log-analytics query -w a38f2261-96b7-4528-86aa-a320de182494 --analytics-query "CliTakeTable_CL | take 2" --debug
cli.knack.cli: Command arguments: ['monitor', 'log-analytics', 'query', '-w', 'a38f2261-96b7-4528-86aa-a320de182494', '--analytics-query', 'CliTakeTable_CL | take 2', '--debug']
cli.knack.cli: __init__ debug log:
Enable color in terminal.
cli.knack.cli: Event: Cli.PreExecute []
cli.knack.cli: Event: CommandParser.OnGlobalArgumentsCreate [<function CLILogging.on_global_arguments at 0x107fbdd00>, <function OutputProducer.on_global_arguments at 0x1081c8180>, <function CLIQuery.on_global_arguments at 0x1081ee520>]
cli.knack.cli: Event: CommandInvoker.OnPreCommandTableCreate []
cli.azure.cli.core: Modules found from index for 'monitor': ['azure.cli.command_modules.monitor', 'azext_loganalytics']
cli.azure.cli.core: Loading command modules...
cli.azure.cli.core: Loaded command modules in parallel:
cli.azure.cli.core: Name                  Load Time    Groups  Commands
cli.azure.cli.core: monitor                   0.343        24        71
cli.azure.cli.core: Total (1)                 0.343        24        71
cli.azure.cli.core: These extensions are not installed and will be skipped: ['azext_ai_examples', 'azext_next']
cli.azure.cli.core: Loading extensions:
cli.azure.cli.core: Name                  Load Time    Groups  Commands  Directory
cli.azure.cli.core: log-analytics             0.003         2         1  /Users/kamil/.azure/cliextensions/log-analytics
cli.azure.cli.core: Total (1)                 0.003         2         1  
cli.azure.cli.core: Loaded 24 groups, 72 commands.
cli.azure.cli.core: Found a match in the command table.
cli.azure.cli.core: Raw command  : monitor log-analytics query
cli.azure.cli.core: Command table: monitor log-analytics query
cli.knack.cli: Event: CommandInvoker.OnPreCommandTableTruncate [<function AzCliLogging.init_command_file_logging at 0x10916ee80>]
cli.azure.cli.core.azlogging: metadata file logging enabled - writing logs to '/Users/kamil/.azure/commands/2026-07-20.09-33-26.monitor_log-analytics_query.55399.log'.
az_command_data_logger: command args: monitor log-analytics query -w {} --analytics-query {} --debug
cli.knack.cli: Event: CommandInvoker.OnPreArgumentLoad [<function register_global_subscription_argument.<locals>.add_subscription_parameter at 0x1091b4fe0>]
cli.knack.cli: Event: CommandInvoker.OnPostArgumentLoad []
cli.knack.cli: Event: CommandInvoker.OnPostCommandTableCreate [<function register_ids_argument.<locals>.add_ids_arguments at 0x1091b72e0>, <function register_cache_arguments.<locals>.add_cache_arguments at 0x1091b74c0>, <function register_upcoming_breaking_change_info.<locals>.update_breaking_change_info at 0x1091b7560>]
cli.knack.cli: Event: CommandInvoker.OnCommandTableLoaded []
cli.knack.cli: Event: CommandInvoker.OnPreParseArgs []
cli.knack.cli: Event: CommandInvoker.OnPostParseArgs [<function OutputProducer.handle_output_argument at 0x1081c8220>, <function CLIQuery.handle_query_parameter at 0x1081ee5c0>, <function register_ids_argument.<locals>.parse_ids_arguments at 0x1091b7380>]
az_command_data_logger: extension name: log-analytics
az_command_data_logger: extension version: 1.0.0b1
cli.azure.cli.core.auth.persistence: build_persistence: location='/Users/kamil/.azure/msal_token_cache.json', encrypt=False
cli.azure.cli.core.auth.binary_cache: load: /Users/kamil/.azure/msal_http_cache.bin
urllib3.util.retry: Converted retries value: 1 -> Retry(total=1, connect=None, read=None, redirect=None, status=None)
msal.authority: Initializing with Entra authority: https://topaz.local.dev:8899/50717675-3E5E-4A1E-8CB5-C62D8BE8CA48
msal.authority: openid_config("https://topaz.local.dev:8899/50717675-3E5E-4A1E-8CB5-C62D8BE8CA48/v2.0/.well-known/openid-configuration") = {'authorization_endpoint': 'https://topaz.local.dev:8899/organizations/oauth2/v2.0/authorize', 'token_endpoint': 'https://topaz.local.dev:8899/organizations/oauth2/v2.0/token', 'jwks_uri': 'https://topaz.local.dev:8899/common/discovery/v2.0/keys', 'userinfo_endpoint': 'https://topaz.local.dev:8899/oidc/userinfo', 'end_session_endpoint': 'https://topaz.local.dev:8899/common/oauth2/v2.0/logout', 'device_authorization_endpoint': 'https://topaz.local.dev:8899/organizations/oauth2/v2.0/devicecode', 'response_types_supported': ['code', 'code id_token', 'id_token', 'token id_token', 'token'], 'response_modes_supported': ['query', 'fragment', 'form_post'], 'grant_types_supported': ['authorization_code', 'implicit', 'refresh_token', 'client_credentials', 'password'], 'subject_types_supported': ['pairwise'], 'id_token_signing_alg_values_supported': ['RS256'], 'token_endpoint_auth_methods_supported': ['client_secret_post', 'client_secret_basic', 'private_key_jwt'], 'scopes_supported': ['openid', 'profile', 'email', 'offline_access', 'User.Read'], 'claims_supported': ['aud', 'iss', 'iat', 'nbf', 'exp', 'aio', 'appid', 'appidacr', 'email', 'family_name', 'given_name', 'ipaddr', 'name', 'oid', 'scp', 'sub', 'tid', 'unique_name', 'upn', 'ver']}
msal.application: Broker enabled? None
cli.azure.cli.core.azclierror: Traceback (most recent call last):
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/knack/cli.py", line 233, in invoke
    cmd_result = self.invocation.execute(args)
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 682, in execute
    raise ex
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 812, in _run_jobs_serially
    results.append(self._run_job(expanded_arg, cmd_copy))
                   ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/core/commands/__init__.py", line 781, in _run_job
    result = cmd_copy(params)
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/core/aaz/_command.py", line 155, in __call__
    return self._handler(*args, **kwargs)
           ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/Users/kamil/.azure/cliextensions/log-analytics/azext_loganalytics/aaz/latest/monitor/log_analytics/_query.py", line 36, in _handler
    self._execute_operations()
    ~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/kamil/.azure/cliextensions/log-analytics/azext_loganalytics/aaz/latest/monitor/log_analytics/_query.py", line 75, in _execute_operations
    self.QueryExecute(ctx=self.ctx)()
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/core/aaz/_operation.py", line 37, in __init__
    self.client = ctx.get_http_client(self.CLIENT_TYPE)
                  ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/core/aaz/_command_ctx.py", line 76, in get_http_client
    self._clients[client_type] = client_cls(self, credential=credential, **client_kwargs)
                                 ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/core/aaz/_client.py", line 75, in __init__
    raise CloudEndpointNotSetException()
azure.cli.core.cloud.CloudEndpointNotSetException

cli.azure.cli.core.azclierror: 
az_command_data_logger: 
cli.knack.cli: Event: Cli.PostExecute [<function AzCliLogging.deinit_cmd_metadata_logging at 0x10916f100>]
az_command_data_logger: exit code: 1
cli.__main__: Command ran in 0.447 seconds (init: 0.060, invoke: 0.387)
telemetry.main: Begin splitting cli events and extra events, total events: 1
telemetry.client: Accumulated 0 events. Flush the clients.
telemetry.main: Finish splitting cli events and extra events, cli events: 1
telemetry.save: Save telemetry record of length 4102 in cache file under /Users/kamil/.azure/telemetry/20260720093326310
telemetry.main: Begin creating telemetry upload process.
telemetry.process: Creating upload process: "/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/bin/python /opt/homebrew/Cellar/azure-cli/2.84.0/libexec/lib/python3.13/site-packages/azure/cli/telemetry/__init__.py /Users/kamil/.azure /Users/kamil/.azure/telemetry/20260720093326310"
telemetry.process: Return from creating process 55407
telemetry.main: Finish creating telemetry upload process.

Issue script & Debug output

See above.

Expected behavior

The command uses the logAnalyticsResourceId endpoint from the cloud configuration as the base URL.

Environment Summary

azure-cli 2.84.0 *

core 2.84.0 *
telemetry 1.1.0

Extensions:
log-analytics 1.0.0b1

Dependencies:
msal 1.35.0b1
azure-mgmt-resource 24.0.0

Python location '/opt/homebrew/Cellar/azure-cli/2.84.0/libexec/bin/python'
Config directory '/Users/kamil/.azure'
Extensions directory '/Users/kamil/.azure/cliextensions'

Python (Darwin) 3.13.12 (main, Feb 3 2026, 17:53:27) [Clang 17.0.0 (clang-1700.6.3.2)]

Additional context

In src/log-analytics/azext_loganalytics/aaz/latest/_clients.py, the metadata index key is set to:

_CLOUD_HOST_METADATA_INDEX = "logAnalyticslogAnalyticsResourceId"

The prefix logAnalytics is duplicated — it should be:

_CLOUD_HOST_METADATA_INDEX = "logAnalyticsResourceId"

Because the key never matches anything in the cloud metadata, get_cloud_endpoint returns None. The fallback _CLOUD_HOST_TEMPLATES only contains AzureCloud, so all custom clouds receive None as the base URL, which raises CloudEndpointNotSetException.

Metadata

Metadata

Assignees

Labels

Auto-AssignAuto assign by botAzure CLI TeamThe command of the issue is owned by Azure CLI teamMonitoract-observability-squadbugThis issue requires a change to an existing behavior in the product in order to be resolved.customer-reportedIssues that are reported by GitHub users external to the Azure organization.extension/log-analytics

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions