云平台运维工具 ——Azure 原生工具
一、简介
Azure 作为微软推出的云服务平台,拥有一套功能强大的原生运维工具体系。这些工具与 Azure 的各项服务深度融合,能够满足用户在资源部署、监控告警、权限管理、自动化运维等全流程的需求。无论是小型应用开发还是大型企业级架构搭建,Azure 原生工具都能提供高效、稳定的运维支持。
Azure 原生工具生态的核心组件包括:
- Azure CLI:命令行工具,用于通过命令行操作 Azure 资源
- Azure Resource Manager (ARM) 模板:基础设施即代码模板,实现资源的自动化部署
- Azure Monitor:全方位监控 Azure 资源和应用的服务
- Azure Automation:自动化执行运维任务的服务
- Azure Active Directory (AAD):身份与访问管理服务
图解 1:Azure 原生工具生态架构
二、Azure CLI 安装与配置
2.1 安装 Azure CLI
Azure CLI 支持 Windows、macOS 和 Linux 等操作系统,以下是各系统的安装方法:
2.1.1 Linux 系统安装
# Ubuntu/Debian
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash# CentOS/RHEL
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'
sudo yum install azure-cli
2.1.2 Windows 系统安装
- 访问Azure CLI 官方下载页下载安装程序
- 运行安装程序,按照向导完成安装
- 打开命令提示符或 PowerShell,执行az --version验证安装
2.1.3 macOS 系统安装
# 使用Homebrew安装
brew update && brew install azure-cli
2.2 配置 Azure CLI
安装完成后,需要登录 Azure 账户才能操作资源:
# 登录Azure
az login# 若有多个订阅,设置默认订阅
az account set --subscription <subscription-id># 查看当前配置
az account show
登录成功后,会显示当前登录的账户信息和订阅信息。Azure CLI 会保存登录状态,除非手动注销,否则无需重复登录。
图解 2:Azure CLI 配置流程
三、核心工具使用详解
3.1 Azure Resource Manager (ARM) 模板
ARM 模板是一种声明式的 JSON 文件,用于定义 Azure 资源的配置。通过 ARM 模板,可以实现资源的自动化部署、更新和删除,确保环境的一致性和可重复性。
3.1.1 基本概念
- 模板(Template):JSON 格式的文件,定义资源的配置信息
- 资源组(Resource Group):资源的逻辑容器,ARM 模板部署的目标
- 参数(Parameters):模板中可自定义的输入值,增加模板灵活性
- 变量(Variables):模板中可重用的值,简化模板编写
3.1.2 模板结构
一个完整的 ARM 模板包含以下主要部分:
{"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#","contentVersion": "1.0.0.0","parameters": {"vmName": {"type": "string","defaultValue": "myVM","metadata": {"description": "Name of the virtual machine"}},"adminUsername": {"type": "string","metadata": {"description": "Admin username for the VM"}},"adminPassword": {"type": "securestring","metadata": {"description": "Admin password for the VM"}}},"variables": {"vmSize": "Standard_B1s","imagePublisher": "Canonical","imageOffer": "UbuntuServer","imageSku": "18.04-LTS"},"resources": [{"type": "Microsoft.Compute/virtualMachines","apiVersion": "2021-07-01","name": "[parameters('vmName')]","location": "[resourceGroup().location]","properties": {"hardwareProfile": {"vmSize": "[variables('vmSize')]"},"osProfile": {"computerName": "[parameters('vmName')]","adminUsername": "[parameters('adminUsername')]","adminPassword": "[parameters('adminPassword')]"},"storageProfile": {"imageReference": {"publisher": "[variables('imagePublisher')]","offer": "[variables('imageOffer')]","sku": "[variables('imageSku')]","version": "latest"},"osDisk": {"name": "[concat(parameters('vmName'), '_OSDisk')]","caching": "ReadWrite","createOption": "FromImage"}}}}],"outputs": {"vmId": {"type": "string","value": "[resourceId('Microsoft.Compute/virtualMachines', parameters('vmName'))]"}}
}
3.1.3 常用命令
# 创建资源组
az group create --name myResourceGroup --location eastus# 部署ARM模板
az deployment group create \--resource-group myResourceGroup \--template-file template.json \--parameters adminUsername=azureuser adminPassword=MySecurePassword123!# 查看部署状态
az deployment group show --resource-group myResourceGroup --name templateDeployment# 删除资源组(包含所有资源)
az group delete --name myResourceGroup --yes
图解 3:ARM 模板工作流程
3.2 Azure Monitor
Azure Monitor 用于收集、分析和处理 Azure 资源以及应用程序的监控数据,帮助用户了解资源性能、诊断问题并主动响应各种情况。
3.2.1 核心功能
- 指标(Metrics):数值型数据,反映资源在特定时间的状态,如 CPU 使用率、磁盘吞吐量等
- 日志(Logs):结构化或非结构化数据,记录资源的详细操作和事件,如应用程序日志、安全日志等
- 告警(Alerts):基于指标或日志设置阈值,当满足条件时触发通知或自动操作
3.2.2 常用命令
# 查看虚拟机的CPU使用率指标
az monitor metrics list \--resource /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM \--metric "Percentage CPU" \--time-grain PT1M \--start-time $(date -u +"%Y-%m-%dT%H:%M:%SZ" -d "1 hour ago") \--end-time $(date -u +"%Y-%m-%dT%H:%M:%SZ")# 创建CPU使用率告警
az monitor metrics alert create \--name highCPUAlert \--resource-group myResourceGroup \--scopes /subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM \--condition "avg Percentage CPU > 80 for 5m" \--description "Alert when VM CPU exceeds 80%" \--severity 3 \--action-groups <action-group-id># 查看告警规则
az monitor metrics alert show --name highCPUAlert --resource-group myResourceGroup
3.2.3 日志查询
# 查看资源日志
az monitor log-analytics query \--workspace <workspace-id> \--analytics-query "AzureActivity | where OperationNameValue contains 'Microsoft.Compute/virtualMachines/start/action' | take 10" \--timespan PT1H
图解 4:Azure Monitor 工作流程
3.3 Azure Automation
Azure Automation 提供了一个自动化和配置管理平台,通过 Runbook 实现运维任务的自动化,支持 PowerShell、Python 等脚本语言,可用于部署、配置和管理 Azure 资源。
3.3.1 核心功能
- Runbook:自动化任务的脚本,支持 PowerShell、Python、图形化等类型
- Hybrid Runbook Worker:在本地或其他云环境中运行 Runbook,实现混合云自动化
- 变量和凭证:安全存储自动化过程中需要的变量和凭证信息
- 调度器:按计划自动执行 Runbook
3.3.2 常用命令
# 创建自动化账户
az automation account create \--name myAutomationAccount \--resource-group myResourceGroup \--location eastus# 导入PowerShell Runbook
az automation runbook create \--name StopVMs \--type PowerShell \--resource-group myResourceGroup \--automation-account-name myAutomationAccount \--description "Stop VMs at night"# 发布Runbook
az automation runbook publish \--name StopVMs \--resource-group myResourceGroup \--automation-account-name myAutomationAccount# 执行Runbook
az automation runbook start \--name StopVMs \--resource-group myResourceGroup \--automation-account-name myAutomationAccount \--parameters "ResourceGroupName=myResourceGroup"
3.4 Azure Active Directory (AAD)
Azure Active Directory (AAD) 是微软提供的云身份和访问管理服务,用于管理用户、组、应用程序的身份验证和授权,确保对 Azure 资源和服务的安全访问。
3.4.1 核心概念
- 用户(User):代表个人或服务的身份,可用于登录和访问资源
- 组(Group):用户的集合,便于批量分配权限
- 应用程序(Application):需要访问 Azure 资源的应用,通过 AAD 进行身份验证
- 角色(Role):定义了一组权限,可分配给用户、组或应用程序
3.4.2 常用命令
# 创建AAD用户
az ad user create \--display-name "John Doe" \--password-profile password=MySecurePassword123! forceChangePasswordNextLogin=false \--user-principal-name john.doe@contoso.com \--mail-nickname johndoe# 创建安全组
az ad group create \--display-name "VM Administrators" \--mail-nickname vmadmin# 将用户添加到组
az ad group member add \--group "VM Administrators" \--member-id <user-id># 为资源组分配角色给用户
az role assignment create \--assignee <user-id> \--role "Virtual Machine Contributor" \--resource-group myResourceGroup
图解 5:AAD 权限模型
四、实际应用案例
4.1 自动化部署 Web 应用架构
使用 Azure 原生工具部署包含虚拟机、SQL 数据库和存储账户的 Web 应用架构:
1. 创建 ARM 模板(webapp-template.json):定义虚拟网络、虚拟机、SQL 数据库、存储账户等资源
2. 部署模板:
az group create --name webapp-rg --location eastusaz deployment group create \--resource-group webapp-rg \--template-file webapp-template.json \--parameters adminUsername=azureuser adminPassword=MySecurePassword123! sqlAdminPassword=SqlSecurePassword123!
3. 配置 Azure Monitor 告警:
# 为Web服务器配置CPU和内存告警
az monitor metrics alert create \--name WebServerHighCPU \--resource-group webapp-rg \--scopes $(az vm show --name web-server --resource-group webapp-rg --query id --output tsv) \--condition "avg Percentage CPU > 80 for 5m" \--severity 3 \--action-groups $(az monitor action-group show --name webapp-ag --resource-group webapp-rg --query id --output tsv)
4. 创建自动化 Runbook 部署应用代码:
# 创建PowerShell Runbook部署应用
az automation runbook create \--name DeployWebApp \--type PowerShell \--resource-group webapp-rg \--automation-account-name webapp-automation \--content "$(cat deploy-webapp.ps1)"# 发布并执行Runbook
az automation runbook publish --name DeployWebApp --resource-group webapp-rg --automation-account-name webapp-automationaz automation runbook start \--name DeployWebApp \--resource-group webapp-rg \--automation-account-name webapp-automation \--parameters "VMName=web-server ResourceGroupName=webapp-rg"
图解 6:Web 应用部署架构
4.2 自动化备份虚拟机
使用 Azure Automation 和 Azure Backup 创建虚拟机自动备份计划:
1. 创建备份策略:
az backup policy create \--name DailyBackupPolicy \--resource-group backup-rg \--vault-name myBackupVault \--backup-time 02:00 \--backup-frequency Daily \--retention-daily 7
2. 注册虚拟机到备份服务:
az backup protect enable-for-vm \--vm $(az vm show --name myVM --resource-group myResourceGroup --query id --output tsv) \--policy-name DailyBackupPolicy \--resource-group backup-rg \--vault-name myBackupVault
3. 创建自动化 Runbook 监控备份状态:
# 备份状态监控Runbook内容(CheckBackupStatus.ps1)
$connection = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $connection.TenantID -ApplicationId $connection.ApplicationID -CertificateThumbprint $connection.CertificateThumbprint$vault = Get-AzRecoveryServicesVault -Name "myBackupVault"
Set-AzRecoveryServicesVaultContext -Vault $vault$backupItems = Get-AzRecoveryServicesBackupItem -WorkloadType AzureVM
foreach ($item in $backupItems) {$lastBackup = Get-AzRecoveryServicesBackupJob -Item $item -JobType Backup | Sort-Object -Property StartTime -Descending | Select-Object -First 1if ($lastBackup.Status -ne "Completed" -and $lastBackup.StartTime -lt (Get-Date).AddDays(-1)) {Write-Error "Backup for VM $($item.Name) failed or not completed in the last 24 hours."# 发送告警通知$actionGroup = Get-AzActionGroup -Name "backup-alerts" -ResourceGroupName "backup-rg"Send-AzAlertNotification -ActionGroup $actionGroup -Subject "VM Backup Failure" -Message "Backup for VM $($item.Name) failed."}
}
4. 导入并调度 Runbook:
# 导入Runbook
az automation runbook create \--name CheckBackupStatus \--type PowerShell \--resource-group backup-rg \--automation-account-name backup-automation \--content "$(cat CheckBackupStatus.ps1)"# 发布Runbook
az automation runbook publish \--name CheckBackupStatus \--resource-group backup-rg \--automation-account-name backup-automation# 创建每日检查调度
az automation schedule create \--name DailyBackupCheck \--resource-group backup-rg \--automation-account-name backup-automation \--start-time "2023-10-01T03:00:00+00:00" \--frequency Daily \--interval 1# 关联Runbook和调度
az automation runbook associate-schedule \--name CheckBackupStatus \--resource-group backup-rg \--automation-account-name backup-automation \--schedule-name DailyBackupCheck
图解 7:虚拟机自动备份与监控流程
五、常见问题与解决方法
5.1 ARM 模板部署失败
- 问题现象:执行az deployment group create后,部署状态为Failed,资源未按预期创建。
- 排查方法:
# 查看部署操作详情
az deployment group operation list \--resource-group myResourceGroup \--name templateDeployment \--output table
- 常见原因及解决:
-
- 资源名称冲突:Azure 资源名称通常需要全局唯一(如存储账户),更换名称或删除重名资源。
-
- 配额不足:当前订阅在目标区域的资源配额已用尽,可申请提高配额或选择其他区域。
-
- 依赖资源缺失:模板中引用的资源(如虚拟网络、子网)不存在,需先创建依赖资源。
5.2 Azure Monitor 告警不触发
- 问题现象:资源指标已超过阈值,但告警未触发通知。
- 排查方法:
# 检查告警历史
az monitor metrics alert show-history \--name highCPUAlert \--resource-group myResourceGroup
- 常见原因及解决:
-
- 指标聚合方式错误:如使用max而非avg导致阈值判断不准确,调整告警条件的聚合方式。
-
- 时间粒度不匹配:告警周期(如 5 分钟)小于指标采集粒度,确保时间设置协调。
-
- 操作组配置错误:通知渠道(如邮件、短信)未正确配置,检查操作组的接收者设置。
5.3 Azure Automation Runbook 执行失败
- 问题现象:Runbook 执行后状态为Failed,未完成预期操作。
- 排查方法:
# 查看Runbook执行日志
az automation job show \--resource-group myResourceGroup \--automation-account-name myAutomationAccount \--job-id <job-id> \--query "logs"
- 常见原因及解决:
-
- 权限不足:Run As 账户缺少操作资源的权限,为其分配适当的角色(如Contributor)。
-
- 模块版本问题:Runbook 依赖的 Azure 模块版本过旧,更新模块至最新版本:
az automation module update \--name Az.Compute \--resource-group myResourceGroup \--automation-account-name myAutomationAccount
-
- 参数错误:传入 Runbook 的参数格式或值不正确,验证参数是否符合预期。
六、最佳实践
6.1 资源组织与命名规范
- 按环境和功能划分资源组,如prod-web-rg、dev-db-rg,便于集中管理。
- 采用统一的资源命名格式:[资源类型]-[环境]-[区域]-[序号],例如:
-
- 虚拟机:vm-prod-eastus-01
-
- 存储账户:stprodwestus02(存储账户名称需小写且无特殊字符)
- 为所有资源添加标签(如Environment=Production、Owner=dev-team@contoso.com),支持成本分析和资源筛选:
# 创建资源时添加标签
az vm create \--name vm-prod-eastus-01 \--resource-group prod-web-rg \--tags Environment=Production Owner=dev-team@contoso.com \--image UbuntuLTS \--admin-username azureuser \--admin-password MySecurePassword123!
6.2 安全与权限管理
- 遵循最小权限原则:为用户和服务主体仅分配必要的权限,避免使用Owner角色。
- 启用多因素认证(MFA):为所有 AAD 用户强制开启 MFA,增强账户安全性。
- 使用服务主体而非个人账户执行自动化任务:
# 创建服务主体
az ad sp create-for-rbac --name "automation-sp" --role "Contributor" --scopes /subscriptions/<subscription-id>
- 定期轮换凭证:包括服务主体密钥、存储账户密钥等,避免长期使用固定凭证。
6.3 自动化与监控策略
- 优先使用 ARM 模板或 Bicep(ARM 的改进版)定义基础设施,实现 "基础设施即代码"。
- 对关键业务资源配置全面监控:
-
- 基础监控:CPU、内存、磁盘 I/O、网络流量。
-
- 应用监控:响应时间、错误率、依赖服务健康状态。
- 实现自动化运维闭环:
-
- 自动部署:通过 ARM 模板 + DevOps 管道实现环境一致性部署。
-
- 自动修复:如使用 Azure Automation 重启无响应的服务、替换不健康的 VM。
-
- 自动扩缩容:根据负载自动调整 VM 规模集或 App Service 实例数量。
6.4 成本优化
- 利用 Azure Cost Management 分析成本趋势,识别闲置资源:
# 查看资源组成本
az costmanagement query \--type Usage \--scope /subscriptions/<subscription-id>/resourceGroups/myResourceGroup \--timeframe MonthToDate \--dataset "{'granularity':'Daily','aggregation':{'totalCost':{'name':'PreTaxCost','function':'Sum'}}}"
- 对非生产环境资源配置自动关停:使用 Azure Automation 在夜间和周末停止虚拟机。
- 选择合适的资源规格:根据实际负载选择 VM 大小,避免过度配置;长期使用的资源可购买预留实例。
七、总结
Azure 原生工具构建了一套完整的云运维生态,从命令行交互(Azure CLI)、基础设施即代码(ARM 模板)、监控告警(Azure Monitor)、自动化运维(Azure Automation)到身份管理(Azure AD),覆盖了云资源全生命周期的管理需求。
这些工具的核心价值在于:
- 一致性:通过 ARM 模板确保开发、测试、生产环境的配置一致,减少 "配置漂移" 问题。
- 效率:自动化工具(如 Runbook)替代重复手动操作,降低人为错误,提升运维效率。
- 可观测性:Azure Monitor 提供统一的监控视图,帮助快速定位问题根源。
- 安全性:AAD 的身份管理和细粒度权限控制,为资源访问提供安全保障。
在实际应用中,建议结合业务场景制定工具使用策略:小型项目可从基础 CLI 和 ARM 模板入手;中大型项目则需构建完整的自动化管道(如 Azure DevOps),整合监控、告警和自动修复能力。
随着 Azure 平台的持续演进,其工具链也在不断优化(如 Bicep 替代 ARM、Azure Monitor 工作簿增强可视化),用户应持续关注官方文档和最佳实践,充分发挥 Azure 原生工具的优势,构建高效、可靠、安全的云运维体系。