云平台运维工具 ——Azure 原生工具

发布于:2025-08-10 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、简介

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 系统安装
  1. 访问Azure CLI 官方下载下载安装程序
  2. 运行安装程序,按照向导完成安装
  3. 打开命令提示符或 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 eastus

az 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-automation

az 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 1
    if ($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),覆盖了云资源全生命周期的管理需求。

这些工具的核心价值在于:

  1. 一致性:通过 ARM 模板确保开发、测试、生产环境的配置一致,减少 "配置漂移" 问题。
  2. 效率:自动化工具(如 Runbook)替代重复手动操作,降低人为错误,提升运维效率。
  3. 可观测性:Azure Monitor 提供统一的监控视图,帮助快速定位问题根源。
  4. 安全性:AAD 的身份管理和细粒度权限控制,为资源访问提供安全保障。

在实际应用中,建议结合业务场景制定工具使用策略:小型项目可从基础 CLI 和 ARM 模板入手;中大型项目则需构建完整的自动化管道(如 Azure DevOps),整合监控、告警和自动修复能力。

随着 Azure 平台的持续演进,其工具链也在不断优化(如 Bicep 替代 ARM、Azure Monitor 工作簿增强可视化),用户应持续关注官方文档和最佳实践,充分发挥 Azure 原生工具的优势,构建高效、可靠、安全的云运维体系。