尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Azure Monitor Go SDK(armmonitor)CHANGELOG 深度解读:版本演进、破坏性变更与 OpenShift 实践

Azure Monitor Go SDK(armmonitor)CHANGELOG 深度解读:版本演进、破坏性变更与 OpenShift 实践 测试云原生质量保障【免费下载链接】originConformance test suite for OpenShift项目地址https://gitcode.com/gh_mirrors/or/origin点击查看免费下载本文以当前仓库中armmonitor模块的 CHANGELOG.md 为骨架系统梳理 Azure Monitor 管理平面 Go SDK 从 0.7.0 到 0.10.2 的完整演进脉络逐一拆解每次发版引入的破坏性变更、新增枚举与数据结构并结合该模块在 OpenShift 一致性测试套件origin中采集 Azure 云指标的源码用法帮助读者在升级依赖时快速定位 API 差异、规避迁移陷阱。一、模块背景armmonitor 是什么armmonitor是 Azure SDK for Go 中面向 Azure Monitor 资源管理平面ARMAzure Resource Manager的官方模块包路径为github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor随当前仓库以 vendor 方式托管于 vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor 目录下与指标查询、诊断设置、活动日志、告警规则、数据收集规则DCR、Azure Monitor 工作区、私有链接等 Azure Monitor 能力一一对应。模块的 README.md 给出了入门三要素前置条件一个有效的 Azure 订阅Go 1.18 及以上版本模块源码通过//go:build go1.18构建标签约束。安装以 Go modules 方式引入go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor授权创建客户端时需传入azcore.TokenCredential通常由azidentity.NewDefaultAzureCredential(nil)提供支持客户端密钥、证书、托管身份等多种认证方式。在 OpenShift 一致性测试项目中该模块被真实用于 Azure 平台的云指标采集详见下文“在 origin 中的落地实践”一节这也是本文结合仓库源码展开的背景。二、版本演进总览0.7.0 → 0.10.2从 CHANGELOG 可以看到模块自 0.7.0 起切换为 Azure SDK 的下一代设计原则next generation design principles此后经历 0.8.0、0.9.0 两轮较大的 API 重塑再经 0.9.1、0.10.0、0.10.1、0.10.2 的稳定收敛。整体节奏呈现“两个大版本做破坏性重构 后续小版本修 bug、加能力”的特征版本日期定位0.10.22023-10-09跟随azcore最新 beta 更新0.10.12023-07-19修复 fake 分页与长时运行操作的潜在 panic0.10.02023-06-13新增测试 fake 与 OpenTelemetry trace span 支持0.9.12023-04-14修复any类型空值序列化 bug0.9.02023-03-24大版本引入ClientFactory、大量新枚举与新客户端0.8.02022-10-18大版本Scheduled Query Rules 重构、移除 Log Search Rule 类型族0.7.02022-05-17切换下一代设计原则含破坏性变更三、0.9.0引入 ClientFactory 与大规模能力扩展0.9.02023-03-24是 CHANGELOG 中信息量最大的一次发版同时包含破坏性变更与大量新增内容。3.1 破坏性变更构造函数签名改变——NewMetricDefinitionsClient与NewMetricsClient的入参由(azcore.TokenCredential, *arm.ClientOptions)变为(string, azcore.TokenCredential, *arm.ClientOptions)即在最前面新增订阅 ID 参数。对照 metrics_client.go 中的实际实现可以看到MetricsClient结构体内部持有subscriptionID字段构造函数通过arm.NewClient(moduleName.MetricsClient, moduleVersion, credential, options)初始化内部管道后将其保存——这是后续所有需要订阅上下文的客户端统一采用的模式。类型变化ErrorContract.Error类型由*ErrorResponseDetails改为*ErrorResponseMetric.Unit类型由*MetricUnit改为*Unit。API 移除ActionGroupsClient上的一批测试通知相关方法被整体移除包括BeginCreateNotificationsAtResourceGroupLevel、GetTestNotifications、GetTestNotificationsAtResourceGroupLevel、BeginPostTestNotifications。3.2 新增ClientFactory新增的ClientFactory是一个“一站式”客户端工厂用于创建本模块内的任意客户端。在 client_factory.go 中可以看到其设计// ClientFactory is a client factory used to create any client in this module. // Dont use this type directly, use NewClientFactory instead. type ClientFactory struct { subscriptionID string credential azcore.TokenCredential options *arm.ClientOptions } func NewClientFactory(subscriptionID string, credential azcore.TokenCredential, options *arm.ClientOptions) (*ClientFactory, error) { _, err : arm.NewClient(moduleName.ClientFactory, moduleVersion, credential, options) if err ! nil { return nil, err } return ClientFactory{ subscriptionID: subscriptionID, credential: credential, options: options.Clone(), }, nil }构造时传入的subscriptionID、credential、options会被传播到所有由工厂派生的客户端避免重复传参。工厂当前覆盖 30 余类客户端包括NewActionGroupsClient、NewActivityLogsClient、NewAlertRulesClient、NewAutoscaleSettingsClient、NewDataCollectionEndpointsClient、NewDataCollectionRulesClient、NewDiagnosticSettingsClient、NewLogProfilesClient、NewMetricAlertsClient、NewMetricsClient、NewPredictiveMetricClient、NewPrivateLinkScopesClient、NewScheduledQueryRulesClient、NewVMInsightsClient等见 client_factory.go。README 中给出的工厂用法示例clientFactory, err : armmonitor.NewClientFactory(subscription ID, cred, nil) // ... client : clientFactory.NewAlertRuleIncidentsClient()同时可通过arm.ClientOptions指定云端端点以连接公有云、主权云如cloud.AzureChina以及 Azure Stack。3.3 新增客户端与枚举新增客户端AzureMonitorWorkspacesClient对应新的 Azure Monitor 工作区资源类型提供Create、Delete、Get、NewListByResourceGroupPager、NewListBySubscriptionPager、Update等方法OperationsForMonitorClient提供NewListPagerTenantActionGroupsClient租户级动作组提供CreateOrUpdate、Delete、Get、NewListByManagementGroupIDPager、Update。新增枚举类型含全部取值ActionTypeActionTypeInternalIdentityTypeIdentityTypeNone、IdentityTypeSystemAssigned、IdentityTypeUserAssignedKnownLocationSpecProvisioningStatusCanceled、Creating、Deleting、Failed、Succeeded、UpdatingKnownPrometheusForwarderDataSourceStreamsMicrosoftPrometheusMetricsManagedServiceIdentityTypeNone、SystemAssigned、SystemAssignedUserAssigned、UserAssignedMetricAggregationTypeAverage、Count、Maximum、Minimum、None、TotalMetricResultTypeData、MetadataOriginSystem、User、UserSystemProvisioningStateCanceled、Creating、Deleting、Failed、SucceededPublicNetworkAccessDisabled、Enabled、SecuredByPerimeterUnitBitsPerSecond、ByteSeconds、Bytes、BytesPerSecond、Cores、Count、CountPerSecond、MilliCores、MilliSeconds、NanoCores、Percent、Seconds、Unspecified。其中Unit取代了原先的MetricUnit成为指标单位的标准类型与 3.1 中的破坏性变更对应。新枚举值追加KnownDataCollectionEndpointProvisioningStateCanceled、KnownDataCollectionRuleAssociationProvisioningStateCanceled、KnownDataCollectionRuleProvisioningStateCanceled、KnownPublicNetworkAccessOptionsSecuredByPerimeter分别追加到既有枚举中。新增结构体本轮一次性新增约 60 个结构体覆盖三大主题Azure Monitor 工作区AzureMonitorWorkspace、AzureMonitorWorkspaceResource、AzureMonitorWorkspaceResourceProperties、AzureMonitorWorkspaceDefaultIngestionSettings、AzureMonitorWorkspaceMetrics、AzureMonitorWorkspaceResourceListResult、AzureMonitorWorkspaceResourceForUpdate等数据收集规则DCR扩展DataCollectionEndpointFailoverConfiguration、DataCollectionEndpointMetadata、DataCollectionEndpointMetricsIngestion、EventHubDataSource、EventHubDestination、StorageBlobDestination、StorageTableDestination、PlatformTelemetryDataSource、PrometheusForwarderDataSource、WindowsFirewallLogsDataSource、DataImportSourcesEventHub、RuleResolveConfiguration等身份与标签体系ManagedServiceIdentity、UserAssignedIdentity、UserIdentityProperties、Identity、ResourceForUpdateIdentity等。新增字段集中在DataCollectionEndpoint、DataCollectionRuleDataSources、DataCollectionRuleDestinations、DataSourcesSpec、DestinationsSpec等结构体上例如DataCollectionEndpoint新增FailoverConfiguration、Metadata、MetricsIngestion、PrivateLinkScopedResources字段DataCollectionRuleDestinations新增EventHubs、EventHubsDirect、MonitoringAccounts、StorageAccounts、StorageBlobsDirect、StorageTablesDirect字段MetricsClientListOptions新增AutoAdjustTimegrain、ValidateDimensions查询参数ScheduledQueryRuleProperties新增PublicNetworkAccess、RuleResolveConfiguration字段。新增方法MetricDefinitionsClient.NewListAtSubscriptionScopePager、MetricsClient.ListAtSubscriptionScope、MetricsClient.ListAtSubscriptionScopePost将指标查询能力扩展到订阅级范围意味着无需再逐个资源构造 resourceURI可直接在订阅维度聚合指标。四、0.8.0Scheduled Query Rules 重构与 Log Search Rule 退役0.8.02022-10-18同样是一次大规模破坏性发版核心主题是告警规则 API 的现代化。4.1 破坏性变更类型语义变化AlertSeverity由string改为int64严重级别从字符串语义改为数值语义OperationStatus.Error由*ErrorResponseCommon改为*ErrorDetail私有端点相关类型全面替换PrivateEndpointConnectionProperties.PrivateLinkServiceConnectionState由*PrivateLinkServiceConnectionStateProperty改为*PrivateLinkServiceConnectionStatePrivateEndpoint由*PrivateEndpointProperty改为*PrivateEndpointProvisioningState由*string改为*PrivateEndpointConnectionProvisioningStateDimension.Operator由*Operator改为*DimensionOperatorErrorContract.Error由*ErrorResponse改为*ErrorResponseDetails与 0.9.0 恰好相反注意两次发版方向不同。类型别名与常量移除ConditionalOperator、Enabled、QueryType、MetricTriggerType、ProvisioningState等类型别名连同其PossibleXxxValues函数一并移除OperatorInclude常量被移除。分页 API 风格统一DiagnosticSettingsClient.List改为NewListPager风格DiagnosticSettingsCategoryClient.List同样改为NewListPager反之PrivateEndpointConnectionsClient.NewListByPrivateLinkScopePager与PrivateLinkResourcesClient.NewListByPrivateLinkScopePager改回普通返回响应的ListByPrivateLinkScope风格——由此可见当时 SDK 生成器正处于分页风格迁移的过渡期。结构体大清洗与旧版日志搜索告警相关的Action、AlertingAction、LogToMetricAction、AzNsActionGroup、Criteria、LogMetricTrigger、LogSearchRule、LogSearchRuleResource、LogSearchRuleResourceCollection、LogSearchRuleResourcePatch、Schedule、Source、TriggerCondition、PrivateEndpointProperty、PrivateLinkServiceConnectionStateProperty、PrivateLinkScopesResource等结构体全部移除对应响应字段如ScheduledQueryRulesClientUpdateResponse.LogSearchRuleResource同步消失。ActionGroupResource与AzureResource的Identity、Kind字段也被移除。4.2 新增内容新客户端PredictiveMetricClient提供Get方法获取预测指标PredictiveResponse、PredictiveValue结构体服务于预测性自动缩放场景配套PredictiveAutoscalePolicy结构体与PredictiveAutoscalePolicyScaleMode枚举Enabled、ForecastOnly、Disabled被加入AutoscaleSetting。新枚举PrivateEndpointServiceConnectionStatusPending、Approved、Rejected、DimensionOperatorInclude、Exclude、AccessModePrivateOnly、Open、KindLogAlert、LogToMetric、TimeAggregationTotal、Average、Minimum、Count、Maximum、PrivateEndpointConnectionProvisioningStateFailed、Creating、Deleting、Succeeded。新结构体Condition、ConditionFailingPeriods、Actions、ScheduledQueryRuleCriteria、ScheduledQueryRuleProperties、ScheduledQueryRuleResource、ScheduledQueryRuleResourceCollection、ScheduledQueryRuleResourcePatch组成新一代计划查询规则Scheduled Query Rule模型AccessModeSettings、AccessModeSettingsExclusion、PredictiveAutoscalePolicy等辅助结构体随之引入。Scheduled Query Rules 由此从旧版 Log Search Rule 模型整体切换到新版模型这正是本版本最大的迁移成本所在。新字段DiagnosticSettingsCategoryResource、Resource、AzureMonitorPrivateLinkScope、ScopedResource、DiagnosticSettingsResource、AutoscaleSettingResource等结构体统一补上SystemData字段DiagnosticSettingsCategory新增CategoryGroupsDiagnosticSettings新增MarketplacePartnerIDLogSettings新增CategoryGroupPrivateLinkResourceProperties新增RequiredZoneNames。五、0.7.0 与后续小版本下一代 SDK 的起点与收尾5.1 0.7.02022-05-17设计范式切换0.7.0 是模块切换到 Azure SDK 下一代设计原则的里程碑版本官方明确指出其中包含破坏性变更并提供了专门的迁移指南供既有应用升级参考。从该版本起模块的生成代码结构、客户端构造方式、分页与 LRO长时运行操作处理风格都与旧版基于azure-sdk-for-go/services/...的 legacy 风格截然不同。5.2 0.9.12023-04-14空值序列化修复修复了any类型空值的序列化 bug——在旧逻辑下类型为any的字段值为空时可能被错误编码影响请求体构造与响应解析的正确性。5.3 0.10.02023-06-13测试 fake 与可观测性新增test fakes 支持模块为每个客户端提供对应的 fake server 实现fake包用于在单元测试中模拟 Azure Monitor 服务端行为。README 中的用法示例表明可以通过实现 fake server 的方法签名并借助azcore/fake的NewTokenCredential()与自定义 transport将 fake server 注入真实客户端进行测试。新增OpenTelemetry trace spans客户端请求会在azcore管道中自动产生分布式追踪 span便于将 Azure Monitor 管理平面调用纳入可观测性体系。5.4 0.10.12023-07-19panic 修复修复了 fake 分页paged操作与长时运行LRO操作中潜在的 panic属于测试基建层面的稳定性修补。5.5 0.10.22023-10-09azcore 跟随更新更新到最新的azcorebeta 版本保持与核心库的同步属于常规依赖跟进。六、源码印证MetricsClient.List 的参数演化与实现CHANGELOG 中提到MetricsClientListOptions在 0.9.0 中新增AutoAdjustTimegrain、ValidateDimensions两个字段。对照 metrics_client.go 的listCreateRequest实现可以看到这些选项最终都会被编码为 URL 查询参数选项字段HTTP 查询参数说明Timespantimespan查询时间范围如PT1HIntervalinterval采样间隔如PT1MMetricnamesmetricnames逗号分隔的指标名列表Aggregationaggregation聚合方式Toptop返回的时序条数上限Orderbyorderby排序表达式Filter$filter维度过滤表达式ResultTyperesultType结果类型Data/MetadataMetricnamespacemetricnamespace指标命名空间AutoAdjustTimegrainAutoAdjustTimegrain是否自动调整时间粒度ValidateDimensionsValidateDimensions是否校验维度请求固定使用api-version2021-05-01版本端点路径为/{resourceUri}/providers/Microsoft.Insights/metrics。这一实现细节印证了 0.9.0 中“订阅级查询”与“自动调整时间粒度”等新能力已真正落到协议层。七、在 originOpenShift 一致性测试中的落地实践当前仓库中 armmonitor 的实际调用位于 pkg/monitortests/cloud/azure/metrics/monitortest.go它是 OpenShift 一致性测试套件openshift-tests中用于 Azure 平台云指标采集的 monitor test 实现恰好完整使用了本模块 0.9.0 引入的工厂模式鉴权与工厂创建对应 monitortest.gocred, err : azidentity.NewDefaultAzureCredential(nil) // ... clientFactory, err : armmonitor.NewClientFactory(subscriptionID, cred, nil) if err ! nil { /* ... */ } client : clientFactory.NewMetricsClient()订阅 ID 来源测试从openshift-config命名空间的cloud-provider-configConfigMap 中解析出provider.Config取出SubscriptionID再结合集群基础设施状态拿到资源组名——这与 0.9.0 中构造函数新增subscriptionID入参的变更完全对齐。指标查询对应 monitortest.go对集群内每台 VM 构造 ARM 资源 ID通过MetricsClient.List查询诸如OS Disk Queue Depth、OS Disk Latency、Available Memory Percentage等指标设置Timespan如PT1H、IntervalPT1M、Metricnames选项再与预置阈值比较超过阈值即生成 monitor interval 记录。例如avgOSDiskQueueDepthThreshold 3.0磁盘延迟阈值 50ms可用内存百分比下限 20。负载均衡器可用性对应 monitortest.go查询VipAvailability、DipAvailability两个指标以 99% 为可用性下限用于发现 Azure 负载均衡层面的可用性异常。诊断设置对应 monitortest.go通过armmonitor.NewDiagnosticSettingsClient(credential, nil)创建诊断设置将负载均衡器的LoadBalancerHealthEvent日志类别定向写入 Log Analytics 工作区随后用azlogs客户端查询健康事件。这一实践表明CHANGELOG 中 0.9.0 的破坏性变更构造函数新增订阅 ID、引入 ClientFactory与新增能力订阅级指标查询在真实生产级测试代码中已被完整消化是理解 API 演进价值的直接样本。八、升级与迁移建议综合 CHANGELOG 各版本信息从旧版本升级到 0.10.x 需要重点检查以下事项构造函数签名所有需要订阅上下文的客户端构造函数都要求第一个参数为subscriptionID string优先改用NewClientFactory(subscriptionID, credential, options)统一管理。指标单位类型Metric.Unit已从*MetricUnit变为*Unit枚举取值从MetricUnitBytes这类命名变为UnitBytes风格涉及单位比较的代码需同步调整。告警规则模型若仍使用LogSearchRule*系列类型需迁移到ScheduledQueryRuleResource新模型0.8.0 起旧类型全部移除AlertSeverity从string变为int64。错误类型ErrorContract.Error在 0.8.0 与 0.9.0 之间两次翻转ErrorResponse→ErrorResponseDetails→ErrorResponse依赖该字段类型的代码务必核对目标版本。分页风格部分List方法已改为NewXxxPager风格返回*runtime.Pager[T]注意迭代方式的差异。移除的方法0.9.0 中ActionGroupsClient的测试通知相关方法已删除如需继续使用该能力应改用新的通知 API 形态。整体来看armmonitor 的 CHANGELOG 完整记录了 Azure SDK for Go 管理平面库从旧式代码生成到下一代设计范式的迁移全过程。对正在使用该模块尤其是像 origin 这样以测试框架形式深度集成的开发者而言逐版本对照破坏性变更清单是升级路径上最可靠的导航图而对即将引入 Azure Monitor 能力的 Go 项目0.10.x 版本所代表的工厂化客户端、订阅级指标查询、fake 测试支持与 OpenTelemetry 追踪则是当前推荐采用的稳定基线。赞分享测试云原生质量保障【免费下载链接】originConformance test suite for OpenShift项目地址https://gitcode.com/gh_mirrors/or/origin点击查看免费下载相关推荐基于 CHANGELOG 深度解读 webmozart/assert 断言库版本演进、破坏性变更与在 Rector 中的实践基于 CHANGELOG 深度解读 webmozart/assert 断言库版本演进、破坏性变更与在 Rector 中的实践 本文以 vendor/webmo开发工具代码质量opentelemetry-go 变更日志深度解读从 v1.44.0 回看 OpenTelemetry Go 的版本演进、破坏性变更与可观测性实践opentelemetry go 变更日志深度解读从 v1.44.0 回看 OpenTelemetry Go 的版本演进、破坏性变更与可观测性实践 导读 Op网络安全JupyterHub Changelog 深度解读从 0.1 到 6.0 的版本演进、破坏性变更与升级路径JupyterHub Changelog 深度解读从 0.1 到 6.0 的版本演进、破坏性变更与升级路径 本篇技术指南以 JupyterHub 官方 cha后端微服务上一篇Nintendo Switch文件解析终极指南NSTool工具完全解析下一篇在 Pyro 中实现深度核学习Deep Kernel Learning用 CNN 扭曲 RBF 核在 MNIST 上做分类的完整实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表