批量处理客机发现和数据收集


本教程将引导您完成使用迁移中心发现客户端 CLI 客机发现在一批 VMware 虚拟机 (VM) 实例上发现和收集数据的过程。大批量虚拟机可能难以监控和排查问题。我们建议将虚拟机分为较小的组,每组包含少于 1,000 个虚拟机。

目标

在本教程中,您将学习如何完成以下操作:

  • 下载 mcdc CLI
  • 运行 VMWare 清单发现。
  • 生成包含所有已发现虚拟机的 CSV 文件。
  • 将 CSV 文件拆分为包含一部分虚拟机的多个 CSV 文件。
  • 在一个 CSV 文件中的所有虚拟机上运行客机发现。
  • 生成离线评估报告。

费用

此教程使用本地资源,不会产生 Google Cloud 费用。

准备工作

  1. 准备 Linux 机器以安装并运行 mcdc CLI。Linux 机器必须满足以下最低要求:

    • glibc 2.25 版或更高版本
    • 4 GB RAM 和 10 GB 磁盘空间
    • 与 vCenter 和 ESX 主机的网络连接
  2. 确保您拥有具有必要权限的 vSphere 用户:

    • 虚拟机的读取权限
    • 所有 ESX 主机的读取权限
    • 客机操作修改
    • 客机操作程序执行
    • 客机操作查询

下载 mcdc CLI

  1. 连接到 Linux 机器:
    ssh MACHINE_IP
    

    MACHINE_IP 替换为您的 Linux 机器的 IP 地址。

  2. 下载最新版本的 mcdc CLI 并使其可执行:
      curl -O "https://mcdc-release.storage.googleapis.com/$(curl -s https://mcdc-release.storage.googleapis.com/latest)/mcdc"
      chmod +x mcdc
    
  3. mcdc CLI 添加到您的 Shell 路径:
    PATH=$PATH:`pwd`
    

执行 VMware 清单发现

  • 运行清单发现:

    ./mcdc discover vsphere -u USERNAME --url https://VSPHERE_URL
    

    替换以下内容:

    • USERNAME:您的 vCenter 用户名
    • VSPHERE_URL:vCenter Server 实例或 vSphere 客户端的网址

    discover 命令的输出如下所示:

    [+] Found 528 VMs
    Collecting data...
    528 / 528 [---------------------------------------------------] 100.00% 5 p/s
    [✓] Collection completed.
    

生成包含所有已发现虚拟机的 CSV 文件

如需生成 CSV 文件,请使用 GitHub 上的 Migrate to Containers 仓库的 export 脚本。


vms=$(mcdc report --format csv | tail -n +2 | awk -F ',' '{; print $2";"$3";"$4";;;"}')
printf "%s\n" "Name;Platform VM ID;OS Family;IP;USERNAME;PASSWORD"
printf "%s\n" "$vms"

该脚本使用 report 命令生成 CSV 文件,其中包含上一步中发现的所有虚拟机。

  1. 下载脚本:

    curl -O https://raw.githubusercontent.com/GoogleCloudPlatform/migrate-to-containers/main/scripts/mcdc/mcdc_discovery_export_guest_tools.sh
    chmod +x mcdc_discovery_export_guest_tools.sh
    
  2. 运行脚本并将输出保存到文件中:

    ./mcdc_discovery_export_guest_tools.sh > VMS_CSV_FILE
    

    VMS_CSV_FILE 替换为 CSV 文件的名称。

将 CSV 文件拆分为包含一部分虚拟机的多个 CSV 文件

如需将大型 CSV 文件拆分为较小的 CSV 文件,请使用 GitHub 上的 Migrate to Containers 仓库中的 splitter 脚本。

tail -n +2 $1 | split -d -l $num_of_lines - $2
for file in $2*
do
    head -n 1 $1 > tmp_file
    cat "$file" >> tmp_file
    mv -f tmp_file "$file"
done
  1. 下载脚本:

    curl -O https://raw.githubusercontent.com/GoogleCloudPlatform/migrate-to-containers/main/scripts/mcdc/csv_splitter.sh
    chmod +x csv_splitter.sh
    
  2. 运行脚本:

    ./csv_splitter.sh VMS_CSV_FILE CSV_FILES_PREFIX LINES_PER_FILE VMS_CSV_FILE CSV_FILES_PREFIX
    

    替换以下内容:

    • VMS_CSV_FILE:要拆分的输入 CSV 文件。
    • CSV_FILES_PREFIX:生成的 CSV 文件的前缀。
    • LINES_PER_FILE:每个生成的 CSV 文件的行数。默认值为 10

    该脚本会生成各种 CSV 文件。

  3. 查看生成的 CSV 文件列表:

    ls -lrt CSV_FILES_PREFIX*
    

在一个 CSV 文件中的所有虚拟机上运行客机发现

如需为 CSV 文件中的虚拟机运行客机发现,请使用 Migrate to Containers GitHub 代码库中的 collection 脚本。

对上一步生成的每个 CSV 文件重复此步骤。


url_regex='^https?://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]\.[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]$'

read -r -p "CSV file name: " CSV_FILE
if [[ ! -r "$CSV_FILE" ]]; then
    echo "The file $CSV_FILE does not exist or can not be accessed."
    exit 1
fi

read -r -p "vSphere URL: " VSPHERE_URL
if ! [[ $VSPHERE_URL =~ $url_regex ]]; then
    echo "vSphere URL $VSPHERE_URL IS not a valid URL"
    exit 1
fi
read -r -p "vSphere username: " VSPHERE_USER
read -r -s -p "vSphere password: " VSPHERE_PASSWORD
echo ""
read -r -p "Default username: " DEFAULT_USER
read -r -s -p "Default password: " DEFAULT_PASSWORD

echo ""

# CSV fields
#NAME;PLATFORM VM ID;OS;IP;USERNAME;PASSWORD
while IFS=";" read -r vm_name vm_id os ip username password
do
   if [ -z "$username" ]
    then
      username=$DEFAULT_USER
    fi
    if [ -z "$password" ]
    then
          password=$DEFAULT_PASSWORD
    fi

    if [ ! -z "$vm_id" ]
    then
      # Note that the below only works for VMWare VMs
      # vm_id after the last slash if prefixed by vSphere IP
      mod_vm_id=$(echo "$vm_id" | sed 's/.*\///')
      mcdc discover vsphere guest --url $VSPHERE_URL -u $VSPHERE_USER -p $VSPHERE_PASSWORD --vm-user $username --vm-password $password $mod_vm_id
    else
      echo "Skipping VM: $vm_name because it has no VM ID"
    fi
 done < <(tail -n +1 $CSV_FILE)

该脚本使用 discover vsphere guest 命令在虚拟机上上传和执行客机收集脚本。

最好在后台执行此脚本,并将输出定向到日志文件。为此,您需要创建一个文本文件作为输入传递给脚本。

  1. 创建文本文件:

    cat <<EOF >> INPUT_FILE
    CSV_FILES_PREFIXCSV_FILE_SUFFIX
    VSPHERE_URL
    VSPHERE_USER
    VSPHERE_PASSWORD
    VM_USER
    VM_PASSWORD
    EOF
    

    替换以下内容:

    • INPUT_FILE:输入文件名
    • CSV_FILES_PREFIX:CSV 文件名前缀
    • CSV_FILE_SUFFIX:CSV 文件名后缀
    • VSPHERE_URL:vCenter Server 实例或 vSphere 客户端的网址
    • VSPHERE_USER:vCenter 用户名
    • VSPHERE_PASSWORD:vCenter 密码
    • VM_USER:虚拟机用户名
    • VM_PASSWORD:虚拟机密码
  2. 运行客机收集脚本:

    nohup ./mcdc_collect_vms_guest_tools.sh <INPUT_FILE > /tmp/mcdc.out 2>&1 &
    
  3. 对上一步生成的每个 CSV 文件重复第 1 步和第 2 步。

生成离线评估报告

  • 收集完所有数据后,您可以生成详细的 HTML 报告:

    ./mcdc report --format html --full > REPORT_NAME.html
     

后续步骤