グローバルサポート vSAN サポート&サービス

[GS Newsletter] vSAN ホストが「応答なし」の状態でログを取得する

こんにちは、VMware グローバルサポート Newsletter vSAN `チームの曽田です。

以前、「vSAN ホストが「応答なし」になった場合の対応について」にて対処方法のご案内をいたしましたが、今回はホストが「応答なし」の状態でログを収集する方法についてご案内いたします。


VMware vSAN ホストが「応答なし」の状態では、VMware vCenter からログ取得のリクエストを受け付けられないため、ホスト上で直接ログを収集することになります。

また、「応答なし」の状態にあることから、vCenter と接続している hostd に問題が発生している場合があり、多くの場合はストレージに問題を抱えている状況下にあります。

このため、hostd やストレージの応答を待つようなコマンドを極力避け、取得するログを限定する必要があります。

サポートへお問い合わせ頂いた際は、取得するログを限定して収集するスクリプト (vsanLogCollect.sh) を使っており、このスクリプトを使用したログ収集方法についてご案内いたします。

※スクリプト自身はサポートリクエストのなかでエンジニアより提供しております。
※不定期にスクリプトの修正が入るため、都度最新のものをご案内しているため、ブログから共有が出来ない点、何卒ご了承ください。


1. 事前準備

サポートエンジニアから提供されたスクリプトファイルを該当ホストに転送します。

ssh が可能な状況であれば scp でファイルを転送するか、他のホストからデータストアブラウザなどを利用して、共有データストア上からスクリプトを利用します。

2. ログ取得

スクリプトは shell スクリプトになっているため、#sh vsanLogCollect.sh でログを収集します。
実行時のログを一部抜粋いたします。

# sh vsanLogCollect.sh
Creating ramdisk at /tmp/vsanLogs …Collecting logs to “/tmp/vsanLogs/日付
Collecting logs from /var/run/log …
…中略
Zipping all collected information …
Logs collected. File: “/tmp/vsanLogs/ホスト名.uuid.日付.vsanLogs.tgz”Collection complete.The file “/tmp/vsanLogs/ホスト名.uuid.日付.vsanLogs.tgz” can be copied via SCP for upload.


各種ログを取得するコマンドが順次実行され、数分程度で収集は完了します。

コマンド完了後、/tmp/vsanLogs/ 配下の 「ホスト名…tgz」ファイルが作成されているため、こちらをお送り頂きます。

3. ファイル取得後の一時領域開放

ログ取得時、メモリ上にログ取得領域として /tmp/vsanLogs (ramdisk) を作成しています。
ストレージの問題があった場合にも、影響を回避することが可能です。
ログファイル送付後はこの領域を開放するために、localcli のコマンドで領域を開放させていただきます。
# vsanLogCollect.sh 実行時の最終行より
The ramdisk can be destroyed by running “localcli system visorfs ramdisk remove -t /tmp/vsanLogs/”
# localcli system visorfs ramdisk remove -t /tmp/vsanLogs/

 

4. ログの個別取得

スクリプトはサポートリクエストの中で共有しておりますが、実際に取得しているコマンドをいくつか記載します。
個別で逐次取得する場合に参考ください。

# /tmp/vsanLogs を ramdisk として確保します。
localcli system visorfs ramdisk add -m 256 -M 4096 -n vsanLogs -t /tmp/vsanLogs -p 0700

# 取得環境を準備します。
runTime=$(date +”%Y-%m-%dT%H:%M:%S”)

runPath=”/tmp/vsanLogs/$runTime”
mkdir “$runPath”
mkdir -p “$runPath”/commands “$runPath”/etc/vmware/vsan “$runPath”/var/run/log

# 各種コマンド結果の書き出しやファイルをコピーします。
vsi_traverse -o “$runPath”/commands/vsi_traverse.bin > /dev/null
cp /etc/vmware/esx.conf “$runPath”/etc/vmware/esx.conf

cp -r /etc/vmware/vsan/* “$runPath”/etc/vmware/vsan/
cp -r /var/run/log/* “$runPath”/var/run/log > /dev/null

cp -r /var/log/vsantraces/vsant*    “$runPath”/var/log/vsantraces > /dev/null
cp -r /var/log/vsantraces/vsanOb* “$runPath”/var/log/vsantraces > /dev/null

vmware -vl > “$runPath”/commands/vmware_-vl.txt
/usr/lib/vmware/vm-support/bin/nicinfo.sh > “$runPath”/commands/nicinfo.sh.txt
cmmds-tool find -f python > “$runPath”/commands/cmmds-tool_find_-f_python.txt
ps -cPTgjstz > “$runPath”/commands/ps_-cPTgjstz.txt

python /usr/lib/vmware/vsan/bin/vsan-health-status.pyc > “$runPath”/commands/python_usrlibvmwarevsanbinvsan-health-statuspyc.txt
python /usr/lib/vmware/vsan/perfsvc/VsanLsomHealth.pyc > “$runPath”/commands/python_usrlibvmwarevsanperfsvcVsanLsomHealthpyc.txt
python /usr/lib/vmware/vsan/perfsvc/vsan-perfsvc-status.pyc svc_info > “$runPath”/commands/python_usrlibvmwarevsanperfsvcvsan-perfsvc-statuspyc-svc_info.txt

/sbin/localcli vsan cluster get > “$runPath”/commands/localcli_vsan-cluster-get.txt
/sbin/localcli vsan cluster unicastagent list > “$runPath”/commands/localcli_vsan-cluster-unicastagent-list.txt
/sbin/localcli vsan network list > “$runPath”/commands/localcli_vsan-network-list.txt
/sbin/localcli vsan storage list > “$runPath”/commands/localcli_vsan-storage-list.txt
/sbin/localcli system maintenanceMode get > “$runPath”/commands/localcli_system_maintenanceMode_get.txt
/sbin/localcli vsan health cluster list > “$runPath”/commands/localcli_vsan_health_cluster_list.txt
/bin/vmkvsitools lsof > “$runPath”/commands/vmkvsitools_lsof.txt
/sbin/vdq -q -H > “$runPath”/commands/vdq_-q–H.txt

# 取得後のファイルを圧縮しています。
cd “$runPath”
tar -czf /tmp/vsanLogs/`hostname -f`.`cmmds-tool whoami`.$runTime.vsanLogs.tgz “.” > /dev/null

# /tmp/vsanLogs 配下に取得されたファイル名を表示しています。
echo “Collection complete.
The file \”/tmp/vsanLogs/`hostname -f`.`cmmds-tool whoami`.$runTime.vsanLogs.tgz\” can be copied via SCP for upload.”
echo “The ramdisk can be destroyed by running \”localcli system visorfs ramdisk remove -t /tmp/vsanLogs/\””

# ファイル収集後に /tmp/vsanLogs を開放します。
# 収集したファイルが消えるため、収集後に実施ください。
localcli system visorfs ramdisk remove -t /tmp/vsanLogs

# /tmp/vsanLogs が開放された事を確認します。
localcli system visorfs ramdisk list | egrep “Ramdisk|vsanLogs”

Ramdisk Name System Include in Coredumps Reserved Maximum Used Peak Used Free Reserved Free Maximum Inodes Allocated Inodes Used Inodes Mount Point

/tmp/vsanLogs の表示がなければ開放されています

 

5. おわりに

障害発生時にログバンドルが取得出来ない状況下でのログ収集方法をご案内いたしました。
状況に応じて追加で必要となるログはございますが、事象発生時の記録をできる限り残しておくという点でvsanLogCollect.sh で収集されるログは有用ですので、ぜひ活用いただきたいと存じます。