批次執行訪客探索和資料收集


本教學課程將逐步說明如何使用 Migration Center 探索用戶端 CLI 訪客探索功能,探索及收集一批 VMware 虛擬機器 (VM) 執行個體的資料。大量 VM 可能難以監控及排解問題。建議分批處理,每批少於 1,000 個。

目標

您在本教學課程中將學習以下內容:

  • 下載 mcdc CLI。
  • 執行 VMware 目錄探索。
  • 產生包含所有探索到的 VM 的 CSV 檔案。
  • 將 CSV 檔案分割成多個 CSV 檔案,每個檔案都包含部分 VM。
  • 對 CSV 檔案中的所有 VM 執行訪客探索作業。
  • 產生離線評估報告。

費用

本教學課程使用內部部署資源,不會產生任何費用。 Google Cloud

事前準備

  1. 準備好 Linux 電腦,以便安裝及執行 mcdc CLI。Linux 電腦必須符合下列最低需求:

    • glibc 2.25 以上版本
    • 4 GB RAM 和 10 GB 磁碟空間
    • vCenter 和 ESX 主機的網路連線
  2. 確認您擁有具備必要權限的 vSphere 使用者:

    • VM 的讀取權限
    • 所有 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 新增至殼層路徑:
    PATH=$PATH:`pwd`

執行 VMware 商品目錄探索

  • 執行廣告空間探索作業:

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

    更改下列內容:

    • USERNAME:您的 vCenter 使用者名稱
    • VSPHERE_URL:vCenter Server 執行個體或 vSphere Client 的網址

    discover 指令的輸出內容如下所示:

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

產生包含所有已探索 VM 的 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 檔案,其中包含上個步驟中探索到的所有 VM。

  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 檔案,每個檔案包含部分 VM

如要將大型 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 檔案中的所有 VM 執行訪客探索作業

如要為 CSV 檔案中的 VM 執行客體探索作業,請使用 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 指令,在 VM 上傳及執行訪客收集指令碼。

建議在背景執行這項指令碼,並將輸出內容導向記錄檔。如要這麼做,請建立文字檔,並將其做為指令碼的輸入內容。

  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 Client 的網址
    • VSPHERE_USER:vCenter 使用者名稱
    • VSPHERE_PASSWORD:vCenter 密碼
    • VM_USER:VM 使用者名稱
    • VM_PASSWORD:VM 密碼
  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
     

後續步驟