# VMware Skyline Health Diagnostics(SHD)使用 - Part3: 報告排程、離線更新
###### tags: `skyline` `vmware`
[toc]
# 報告排程
若希望經常性地掃描所佈署的 vSphere 環境,可以透過報告排程(Schedulder)定期執行,查看報告以了解問題,進而立即解決或安排計畫處理。
排程功能可使用以下 3 種健康檢查類型(Analysis Type),對 vSphere 清單進行定期掃描,並查看掃描報告。
- vCenter Health Check
- VCF Health Check
- vSAN Health Check
:::warning
**注意**
表示能執行排程的檢查類型,並不包含:
- **Diagnostics**
- **VMSA Scan**
- **VCG Check**
**所以功能上還是有所限制!**
:::
## 啟用排程
報告排程功能預設並沒有啟用,必須透過以下步驟進行啟用。
1. 選擇上方功能選單 **Scheduler** > **Enable Scheduler**。或是點擊頂部訊息欄中的 **ENABLE SCHEDULER**。

2. 根據視窗顯示的密碼強度需求建立排程密碼,點擊 **SAVE** 建立。

3. 成功建立密碼後,排程功能啟用畫面如下。

:::info
**資訊**
- 若要關閉排程,點擊 **DISABLE SCHEDULER**。
- 重啟 shd 服務或 SHD 設備,會自動關閉排程服務。若要重啟排程服務,必須輸入先前建立的啟用密碼。務必**妥善保管此啟用密碼**。
:::
## 建立第一個報告排程
啟用排程功能後,可以安排每月、每週和每天的執行頻率。
1. 點擊 **`+`** 新增排程。

2. 選擇所需的健康檢查類型。

3. 輸入目標資訊。
- 執行 vCenter Health Check 或 vSAN Health Checks,請提供 VMware vCenter Server 登入資訊。

- 執行 VMware Cloud Foundation 運行狀況檢查,請提供 SDDC Manager 登入資訊。

4. 選擇排程執行週期,目前提供 **`Daily`**, **`Weekly`**, **`Monthly`**。點擊 **CHECK CONNECTION** 確認連接狀態。若連接成功,則會顯示 **FINISH** 按鈕,點擊完成建立作業。

5. 顯示目前計畫的報告排程清單。

## 編輯排程
建立的報告排程,可以透過編輯(Edit)進行**執行頻率**和**排程開關**的調整。
1. 選擇欲修改的報告。點擊上方的 **Edit** 圖示。

2. 點選欲調整的項目進行編輯,點擊 **SAVE** 確認。
- Frequency to run schedule
- Schedule Enabled

## 刪除排程
1. 選擇欲修改的報告。點擊上方的 **Delete** 圖示。

2. 點擊 **DELETE** 確認刪除。
## 查看排程報告
- 在 **Scheduler** 功能,選擇執行狀態為 **Completed** 的報告,點擊右側 **View Report** 圖示查看。

- 在 **Show Reports** 功能,檢視分析類型 **VC_HEALTH** 的報告,在其右側點擊 **View** 圖示查看。

:::info
**資訊**
若發現排程報告執行失敗。

可選擇上方功能 **Show Reports**,檢視任務(Tasks)狀態。

取得**Task ID** 及 **Bundle Name** 資訊,再 SSH 連線至 SHD 設備,檢視 **`/opt/vmware-shd/vmware-shd/log/vmware-shd-task-{{TASK_ID}}.log`** 日誌紀錄進行問題排除。
透過簡單的 python 程式,檢視失敗的任務編號,得知排程報告執行的是 **vSAN Health Check**,失敗的原因應是該連接的叢集(Cluster)並非 vSAN 的叢集,無法使用 API 取得相關資訊所造成的。

- 範例程式 `checkTask.py`
```python=
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
if len(sys.argv) > 1:
task_id = sys.argv[1]
task_logfile = 'vmware-shd-task-' + task_id + '.log'
else:
print('Usage: {} <TASK_ID>'.format(sys.argv[0]))
quit()
print('>> Check the Task ID : [{}]'.format(task_id))
print('-' * 42 + '\n')
with open(task_logfile, 'r') as f:
print(f.read())
```
:::
## 重啟排程
將 **shd 服務**或 **SHD 設備**執行**重新啟動**的動作,基於安全考量,**排程功能會自動關閉**。若需要使用報告排程功能,必須重新啟用服務。
重啟服務就跟最初啟用服務一樣,需要輸入密碼,而且是**最初啟用排程服務所建立的密碼**。
:::warning
**注意**
- 如果輸入密碼與建立密碼無法匹配,將無法成功再次啟用排程服務。

- 若有原先啟用排程的建立密碼,則可透過命令列方式修改密碼。
- 若忘記原先啟用排程的建立密碼,可透過命令列方式重置密碼。但原有計畫的排程報告將會失效,需要重新制定排程計畫。<font color=red>**請妥善保管排程建立密碼**</font>
:::
## 管理排程建立密碼
若需要進行排程建立密碼的管理,目前無法透過 UI 界面完成,必須使用 SSH 連線至 SHD 設備,透過命令列方式完成。
:::info
**資訊**
- **`sha-admin`** 帳戶密碼可透過 UI 界面進行變更。但仍**需要已知原有密碼**。選擇 **Settings** > **Reset Password** 完成。
- 其他建立的帳戶密碼,可透過 UI 界面進行變更。選擇 **Settings** > **User Management**,選擇要變更密碼的使用者,點擊上方 **Edit(鉛筆圖示)** 完成。
- 也可使用命令列方式 **`shd-user`** 達成。

:::
### 修改密碼
#### 條件
確定持有以下有效資訊:
- `root` 帳戶密碼
- `sha-admin` 帳戶密碼
- 原排程建立密碼的資訊。
#### 步驟
1. 使用 `root` 帳戶並透過 SSH 連線至 SHD 設備。

2. 執行 **`shd-config credmanager`** 命令。輸入 `sha-admin` 密碼。
3. 選擇 **3. Rekey the credential Store**。輸入原有排程建立密碼。輸入二次欲修改的建立密碼。若無錯誤訊息,表示密碼已經修改成功。

4. 排程密碼修改後,會自動關閉排程服務。請按照上節提及的重啟排程步驟啟用,此時要驗證的密碼,輸入已變更的密碼。
:::info
**資訊** 若要重啟 shd 服務,輸入 **`systemctl restart vmware-shd`** 命令。
:::
### 重置密碼
#### 條件
確定持有以下有效資訊:
- `root` 帳戶密碼
- `sha-admin` 帳戶密碼
- ~~原排程建立密碼的資訊。~~(因為早就忘了才會重置!)
#### 步驟
1. 使用 `root` 帳戶並透過 SSH 連線至 SHD 設備。
2. 執行 **`shd-config credmanager`** 命令。輸入 `sha-admin` 密碼。
3. 選擇 **4. Re-initialize the credential Store**。輸入 **`sha-admin`** 帳戶密碼。再輸入二次新的建立密碼。若無錯誤訊息,表示密碼已經重置成功。

:::danger
**注意**
- 重置排程密碼將會影響原有的排程計畫。
- 原有的排程計畫有可能被清空!
- 務必妥善保存排程建立密碼。
:::
# 自動刪除分析報告
所有的分析報告預設配置為永久保存。啟用分析報告的自動刪除,報告將在設定的保留期後自動刪除。SHD 可透過兩種方式設定報告的保存期限:
- UI 界面
- 組態文件
## UI 界面
1. 選擇上方 **Settings** 功能選單, 點擊左側 **Configurations**,顯示目前設定組態。
2. 選擇屬性 **Report Retention Period** 進行修改。

3. 點擊編輯圖示 <img width=40 src='https://docs.vmware.com/en/VMware-Skyline-Health-Diagnostics/services/Skyline-Health-Diagnostics/images/GUID-8A59403C-FBF0-4CB2-8630-5E2C996A009C-low.png'>,修改屬性值。預設值為 **`0`**。直接輸入數值或使用上下箭頭調整值。點擊 <img width=30 src='https://docs.vmware.com/en/VMware-Skyline-Health-Diagnostics/services/Skyline-Health-Diagnostics/images/GUID-8720A2D3-4B52-48CB-BD90-F7CEC7A4799E-low.png'> 圖示儲存數值。

## 組態文件
1. 使用 **`root`** 帳戶並透過 SSH 連線至 SHD 設備。

2. 切換目錄至 **`/opt/vmware-shd/vmware-shd/app/apiserver/`。備份既有組態檔 **`vmware-shd.conf`**。

3. 使用 **`vi`** 編輯組態檔,調整 **[reports]** 區塊下 **retention** 的參數值後儲存設定。
```console
[reports]
owneronly=0
retention=1
```
或使用以下命令直接編輯。
```bash
sed -i 's/^retention=.*$/retention=1/' vmware-shd.conf
```
4. 重啟 **vmware-shd** 服務。
```bash
systemctl restart vmware-shd
```


:::warning
**注意** **vmware-shd** 服務重啟,若有使用報告排程功能則須再次手動啟用。
:::
# 離線更新
由於企業的安全政策,或許 SHD 也無法具有互聯網連線的權限。所以之前提到的線上更新將無法使用,但可以透過離線方式進行補丁/版本的更新。
> 如果作適度的安全評估及配置,或許能取得互聯網連線會是比較有效率的作法。
截至目前為止,SHD 版本仍是 `3.0.2`(2022-03-24)。
## 更新步驟
1. 請先至 [VMware Customer Connect Portal](https://my.vmware.com/) 將 VMware Skyline Health Diagnostics ISO 映像下載 [[連結: https://my.vmware.com/group/vmware/get-download?downloadGroup=SKYLINE\_HD\_VSPHERE
]](https://my.vmware.com/group/vmware/get-download?downloadGroup=SKYLINE_HD_VSPHERE)。
:::info
此 ISO 映像檔可作為更新或安裝 SHD 使用。

:::
2. 如果可以請先將 SHD 設備關機並進行快照備份。這裡使用 **`govc`** 命令完成 SHD 虛擬設備的快照。
```console
govc vm.power -off {VM_NAME}
```

```console
govc snapshot.create -vm {VM_NAME} -d {DESCRIPTION} {SNAPSHOT_NAME}
```


3. 接著選擇要存放 ISO 映像檔的資料存放區,建立一個目錄存放(選項,非必要),將 ISO 映像檔上傳至該目錄。
以上的動作,為了不浪費時間截太多圖,還是直接使用 **GOVC** 完成吧。
```console
govc datastore.mkdir -ds=${ds} ${iso_path}
govc datastore.upload -ds=${ds} ./${iso_file} ${iso_path}/${iso_file}
govc datastore.ls -ds=${ds} ${iso_path}
```


對了,確認檔案完整性是個好習慣。我找不到 **`govc`** 的方式,就直接使用 SSH 連線至 ESXi 執行命令確認吧。

好喔!沒有問題。
4. 接著就是將上傳的新版本 ISO 映像檔掛載至 SHD 虛擬設備當中。並確認 **開啟電源時連線(Connect at Power On)** 勾選。將 SHD 設備開啟電源。
當然,還是從 **GOVC** 來試試看!
```console
## 取得目前 CD-ROM 裝置狀態
govc device.info -vm {VM_NAME} 'cdrom-*'
## 取得 CD-ROM 裝置名稱
govc device.info -vm {VM_NAME} 'cdrom-*' | grep 'Name:' | sed 's/^Name:.*[ ]//'
## 掛載 ISO 映像檔至指定的 CD-RON 裝置
govc device.cdrom.insert -ds ${ds} -device ${cdrom} -vm {VM_NAME} ${iso_path}/${iso_file}
## 設定開機時連線 CD-ROM
govc device.connect -vm {VM_NAME} ${cdrom}
```

:::info
若要將卸載 CD-ROM,可執行以下命令
```console
govc device.cdrom.eject -vm {VM_NAME} -device {DEVICE_NAME}
```
:::
5. 準備就緒,將 SHD 虛擬設備開機。使用 SSH 連線或用 Console 方式,使用 **`root`** 登入。將設定的 CD-ROM 裝置掛載,執行 `sh /mnt/cdrom/install.sh` 進行安裝程序。
哈!還是想用 **govc**。
```console
## 開啟電源
govc vm.power -on {VM_NAME}
## 掛載 CD-ROM
govc guest.run -vm {VM_NAME} -l {USER:PASSWORD} mount /dev/cdrom /mnt/cdrom
## 顯示掛載檔案資訊
govc guest.ls -vm {VM_NAME} -l {USER:PASSWORD} /mnt/cdrom/
```

- **`install.sh`** 檔案內容

剩下的就是執行 **`sh /mnt/cdrom/install.sh`** 吧?!因為已經安裝最新版本,目前也看不出來有什麼改變!

:::info
其實上述離線更新的流程,也是之前版本透過 ISO 映像檔安裝 SHD 的方式。可以參考 Youtube 影片(2:17 開始)[[連結]](https://youtu.be/rBZuBINtcAM?t=137)。
:::
---
好了,大致使用上就這樣了。還剩一個隱藏的 API 使用,雖然不知道能做什麼,但還是想玩玩看!
- [Part1: 安裝及界面](https://hackmd.io/@farmer87/shd_01)
- [Part2: 功能操作](https://hackmd.io/@farmer87/shd_02)
- [Part3: 報告排程](https://hackmd.io/@farmer87/shd_03)
- [Part4: API 使用](https://hackmd.io/@farmer87/shd_04)
# 參考資訊
- [Scheduling the Health Checks](https://docs.vmware.com/en/VMware-Skyline-Health-Diagnostics/services/Skyline-Health-Diagnostics/GUID-3B812466-3848-48EC-AF91-0D18A1997000.html)
- [Update or Upgrade the VMware Skyline Health Diagnostics Offline](https://docs.vmware.com/en/VMware-Skyline-Health-Diagnostics/services/Skyline-Health-Diagnostics/GUID-361B9F7D-A857-4A60-B0D6-6039FDC08E4F.html)