You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell采集Azure NetApp Volume指标存SQL实现长期留存

Azure NetApp Volume指标长期留存到SQL的PowerShell实现方案

可以直接通过PowerShell调用Azure官方模块拉取指标后写入SQL表,突破Azure Portal默认仅保留1个月指标的限制。

前置准备

  • 以管理员权限启动PowerShell,安装依赖模块:
Install-Module -Name Az.Accounts, Az.Monitor, Az.NetAppFiles -Force -AllowClobber
Install-Module -Name SqlServer -Force -AllowClobber
  • 提前配置账号权限:使用的账号需要拥有目标ANF卷的监控读取权限、目标SQL库的写入权限。
  • 提前在目标SQL库中创建指标存储表,参考表结构如下:
CREATE TABLE ANFVolumeMetrics (
    Id BIGINT IDENTITY(1,1) PRIMARY KEY,
    VolumeResourceId NVARCHAR(200) NOT NULL,
    VolumeName NVARCHAR(100) NOT NULL,
    MetricName NVARCHAR(100) NOT NULL,
    MetricTimestamp DATETIME NOT NULL,
    AverageValue FLOAT NULL,
    MaxValue FLOAT NULL,
    MinValue FLOAT NULL,
    TotalValue FLOAT NULL,
    CollectTime DATETIME DEFAULT GETDATE()
)

核心采集脚本

脚本可配合Windows任务计划、Azure Automation定时调度执行,建议按小时/天粒度拉取上一周期的指标,持续运行即可实现30天以上的指标永久留存,拉取的指标数值和Azure Portal指标仪表板展示内容完全一致。

# 登录Azure,若使用服务主体/托管身份登录,可替换对应登录参数
Connect-AzAccount
# 若需指定订阅,取消注释并填入订阅ID
# Select-AzSubscription -SubscriptionId "你的Azure订阅ID"

# 配置基础参数
$targetResourceGroup = "ANF卷所在资源组名称"
$anfAccountName = "Azure NetApp账号名称"
$capacityPoolName = "ANF容量池名称"
$targetVolumeName = "待采集的NetApp卷名称"
$sqlConnStr = "Server=你的SQL实例地址;Database=指标存储库名;Integrated Security=True;" # 按实际环境修改认证方式
$metricGrain = [TimeSpan]::FromHours(1) # 指标粒度,可选00:05:00(5分钟)、01:00:00(1小时)、1.00:00:00(1天),和Portal可选粒度对齐
# 首次执行补历史数据可设为(Get-Date).AddDays(-93)(Azure Monitor支持最长回溯93天数据),定时执行可设为上一采集周期的时间范围
$startRange = (Get-Date).AddHours(-1)
$endRange = Get-Date

# 获取目标ANF卷的资源ID
$targetVolume = Get-AzNetAppFilesVolume -ResourceGroupName $targetResourceGroup -AccountName $anfAccountName -PoolName $capacityPoolName -Name $targetVolumeName
$volumeResourceId = $targetVolume.Id

# 定义需要拉取的ANF指标,可按需增减,和Portal展示的指标名对应
$metricList = @(
    "VolumeLogicalSize",
    "VolumeConsumedSize",
    "VolumeReadOps",
    "VolumeWriteOps",
    "VolumeReadBytes",
    "VolumeWriteBytes",
    "VolumeThroughputRead",
    "VolumeThroughputWrite",
    "VolumeLatencyRead",
    "VolumeLatencyWrite"
)

# 拉取指标数据
$pulledMetrics = Get-AzMetric -ResourceId $volumeResourceId -MetricNames $metricList -TimeGrain $metricGrain -StartTime $startRange -EndTime $endRange -AggregationType Average,Maximum,Minimum,Total

# 写入SQL表
$sqlConn = New-Object System.Data.SqlClient.SqlConnection $sqlConnStr
$sqlConn.Open()
foreach ($metric in $pulledMetrics) {
    foreach ($dataPoint in $metric.Data) {
        $insertCmd = $sqlConn.CreateCommand()
        $insertCmd.CommandText = @"
INSERT INTO ANFVolumeMetrics (VolumeResourceId, VolumeName, MetricName, MetricTimestamp, AverageValue, MaxValue, MinValue, TotalValue)
VALUES (@VolId, @VolName, @MetricName, @MetricTime, @AvgVal, @MaxVal, @MinVal, @TotalVal)
"@
        $insertCmd.Parameters.AddWithValue("@VolId", $targetVolume.Id) | Out-Null
        $insertCmd.Parameters.AddWithValue("@VolName", $targetVolume.Name) | Out-Null
        $insertCmd.Parameters.AddWithValue("@MetricName", $metric.Name.Value) | Out-Null
        $insertCmd.Parameters.AddWithValue("@MetricTime", $dataPoint.TimeStamp) | Out-Null
        $insertCmd.Parameters.AddWithValue("@AvgVal", $(if($dataPoint.Average -ne $null){$dataPoint.Average}else{[DBNull]::Value})) | Out-Null
        $insertCmd.Parameters.AddWithValue("@MaxVal", $(if($dataPoint.Maximum -ne $null){$dataPoint.Maximum}else{[DBNull]::Value})) | Out-Null
        $insertCmd.Parameters.AddWithValue("@MinVal", $(if($dataPoint.Minimum -ne $null){$dataPoint.Minimum}else{[DBNull]::Value})) | Out-Null
        $insertCmd.Parameters.AddWithValue("@TotalVal", $(if($dataPoint.Total -ne $null){$dataPoint.Total}else{[DBNull]::Value})) | Out-Null
        $insertCmd.ExecuteNonQuery() | Out-Null
    }
}
$sqlConn.Close()

注意事项

  • 首次执行时如果需要补全当前Portal可查的1个月历史数据,将$startRange参数设置为(Get-Date).AddDays(-30)即可一次性拉取全量历史数据入库。
  • 采集频率不建议高于5分钟粒度,避免触发Azure Monitor接口限流。
  • 若需要批量采集订阅下所有ANF卷的指标,可遍历所有ANF账号、容量池下的卷,循环执行采集逻辑即可。

内容的提问来源于stack exchange,提问作者DD266

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:39:30