Azure中非Rm类Cmdlet如何生成EventHub日志?
解决经典存储Cmdlet操作日志发送到EventHub的问题
首先得理清楚核心差异:New-AzureRmStorageContainer属于Azure Resource Manager(ARM)模块的Cmdlet,它的操作会被**Azure活动日志(Activity Log)**捕获,你之前配置的应该是把活动日志导出到了EventHub。而New-AzureStorageContainer是经典存储模块的Cmdlet,对应的操作属于经典存储账户的服务日志,需要单独配置才能发送到EventHub。
下面是具体的配置方案:
方法一:通过Azure门户可视化配置
- 登录Azure门户,找到你的经典存储账户(注意区分ARM部署模型的存储账户)。
- 在左侧菜单栏进入「监控」->「诊断设置」(部分老版本经典账户可能显示为「诊断日志」)。
- 点击「添加诊断设置」,给这个配置起个好记的名字,比如
ClassicStorage-ContainerLogs-To-EventHub。 - 在「日志」区域,勾选你需要捕获的操作类型:针对容器创建操作,选择
StorageWrite即可(这个类别包含所有写入类操作,比如创建、修改容器)。 - 在「目标详细信息」里选择「发送到事件中心」:
- 选择已有的EventHub命名空间和EventHub名称(没有的话可以当场新建)。
- 选择具备权限的服务主体(或直接使用默认的共享访问规则权限)。
- 点击「保存」,等待3-5分钟生效后,再执行
New-AzureStorageContainer命令,操作日志就会自动发送到指定EventHub了。
方法二:通过PowerShell脚本自动化配置
如果你需要批量或自动化配置,可以用Az模块的Cmdlet完成:
# 登录Azure账号(未登录时执行) Connect-AzAccount # 配置变量,替换成你自己的资源信息 $resourceGroupName = "你的资源组名称" $classicStorageAccountName = "你的经典存储账户名称" $eventHubNamespace = "你的EventHub命名空间名称" $eventHubName = "你的EventHub名称" $diagnosticSettingName = "ClassicStorage-ContainerLogs-To-EventHub" # 获取经典存储账户的资源ID $storageAccount = Get-AzResource -ResourceGroupName $resourceGroupName -Name $classicStorageAccountName -ResourceType "Microsoft.ClassicStorage/storageAccounts" # 创建诊断设置,绑定EventHub New-AzDiagnosticSetting ` -Name $diagnosticSettingName ` -ResourceId $storageAccount.ResourceId ` -EventHubName $eventHubName ` -EventHubAuthorizationRuleId (Get-AzEventHubAuthorizationRule -Namespace $eventHubNamespace -Name RootManageSharedAccessKey).Id ` -Enabled $true ` -Category StorageWrite
额外注意事项
- 先确认经典存储账户的服务日志是否开启:
# 查看Blob服务的日志状态 Get-AzureStorageServiceLoggingProperty -ServiceType Blob
如果未开启,用下面的命令开启写入类操作日志:
Set-AzureStorageServiceLoggingProperty -ServiceType Blob -LoggingOperations Write -RetentionDays 7 -Version 2.0
- 经典存储的日志类型分为
StorageRead、StorageWrite、StorageDelete三类,可根据实际需求选择需要捕获的类别。
内容的提问来源于stack exchange,提问作者Srikanth Suresh




