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


本教學課程將逐步說明如何使用遷移中心用戶資產評估器 CLI 客體探索功能,在一系列 VMware 虛擬機器 (VM) 執行個體上探索及收集資料。大量 VM 可能難以監控及排解問題。建議您將資料批次分成 1,000 個以下的小型資料群組。

目標

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

  • 下載 mcdc CLI。
  • 執行 VMWare 商品目錄探索作業。
  • 產生 CSV 檔案,其中包含所有偵測到的 VM。
  • 將 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 用戶端的網址

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

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

產生 CSV 檔案,其中包含所有偵測到的 VM

如要產生 CSV 檔案,請使用 GitHub 上「遷移至容器」存放區中的 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 遷移至容器存放區中的 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 用戶端的網址
    • 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
     

後續步驟