Microsoft SQL Server 的 Workload Manager 會使用 Google Cloud的 Compute Workloads Agent,偵測及收集中繼資料,以便評估 SQL Server 設定。
本文說明如何在執行 SQL Server 的 Compute Engine 執行個體上,安裝、設定及驗證 Compute Workloads 代理程式。
安裝代理程式的必要條件
安裝 Agent for Compute Workloads 前,請務必確認已符合下列必要條件,並建立 SQL Server 工作負載評估。
為服務帳戶授予身分與存取權管理角色
Google Cloud的 Compute Workloads 代理程式會使用附加至 VM 的 Identity and Access Management (IAM) 服務帳戶,藉此驗證 Google Cloud 並取得存取 Google Cloud 資源的權限。如要收集 Workload Manager 驗證指標,請使用含有下列 IAM 角色的新服務帳戶:
- Compute Viewer (
roles/compute.viewer
) - Secret Manager 密鑰存取工具 (
roles/secretmanager.secretAccessor
) - Workload Manager 管理員 (
roles/workloadmanager.admin
) - 記錄檔寫入器 (
roles/logging.logWriter
) (如果您使用 Cloud Logging 功能)
如要為服務帳戶新增必要角色,請按照下列步驟操作:
前往 Google Cloud 控制台的「IAM」頁面。
選取 Google Cloud 專案。
找出您想新增角色的服務帳戶。
- 如果服務帳戶不在主體清單中,表示尚未獲派任何角色。按一下「Add」,然後輸入服務帳戶的電子郵件地址。
- 如果服務帳戶已在使用者清單中,表示已獲指派角色。找到要編輯的服務帳戶,然後按一下「編輯」按鈕。
從可用角色清單中選取必要角色:
- Compute Engine > Compute 檢視器
- Secret Manager > Secret Manager 密鑰存取者
按一下 [Add] (新增) 或 [Save] (儲存),即可將角色套用到服務帳戶。
啟用 Google Cloud API 存取權
Compute Engine 建議您設定 VM 執行個體,允許所有 Cloud API 的所有存取權範圍,並僅使用執行個體服務帳戶的 IAM 權限來控管資源存取權。 Google Cloud 詳情請參閱「建立使用使用者管理服務帳戶的 VM」。
如果您限制 Cloud API 存取權,Compute Workloads 代理程式就需要在主機 VM 執行個體上設定下列最低 Cloud API 存取權範圍:
https://www.googleapis.com/auth/cloud-platform
詳情請參閱「範圍最佳做法」。
如果您要在沒有外部 IP 位址的 VM 執行個體上執行 SQL Server 應用程式,就必須在 VM 的子網路上啟用私人 Google 存取權,讓 Compute Workloads 的 Agent 可以存取 Google API 和服務。如要瞭解如何在子網路中啟用私人 Google 存取權,請參閱「設定私人 Google 存取權」。
SQL Server 的必要權限
使用下列指令碼,將必要權限指派給在代理程式中設定的使用者帳戶。
USE [master] GO
GRANT VIEW SERVER STATE TO [user_name] GRANT VIEW ANY DEFINITION TO [user_name]
-- Adds db_datareader role to the user EXEC sp_MSForEachDB ' USE ? IF NOT EXISTS(SELECT * FROM sys.database_principals WHERE name = ''user_name'') BEGIN CREATE USER [user_name] FOR LOGIN [user_name] END EXEC sp_addrolemember ''db_datareader'', ''user_name'' '
安裝代理程式
如要安裝最新版的 Compute Workloads 代理程式,請完成下列步驟:
Windows
在 Windows 上,您可以使用 GooGet 套件管理指令 googet
安裝 Compute Workloads 代理程式。套件管理指令會完成下列工作:
- 下載最新版的運算工作負載代理。
- 建立名為
google-cloud-workload-agent
的 Windows 服務,以及每分鐘執行一次的排程工作,以便檢查服務是否仍在執行,並視需要重新啟動服務。
如要在 VM 上安裝代理程式,請按照下列步驟操作:
- 使用 RDP 連線至 Windows VM 執行個體。
- 以管理員身分在 PowerShell 中執行下列指令:
googet addrepo google-cloud-workload-agent https://packages.cloud.google.com/yuck/repos/google-cloud-workload-agent-windows-x86_64 googet install google-cloud-workload-agent
- 查看
%ProgramFiles%\Google\google-cloud-workload-agent\conf
底下的設定檔,並使用設定屬性中的詳細資料更新設定檔。 - 重新啟動代理程式,讓這項變更生效。
Linux
在 Linux 上,您可以使用標準作業系統套件管理指令安裝 Compute Workloads 專用代理程式:
- 在 RHEL 上使用
yum
指令 - 在 SLES 上,使用
zypper
指令 - 在 Debian 上使用
apt
指令
套件管理指令會完成下列工作:
- 下載最新版的運算工作負載代理。
- 將代理程式設為 Linux
systemd
服務,並命名為google-cloud-workload-agent
。 - 啟用並啟動服務
google-cloud-workload-agent
。
如要在 VM 上安裝代理程式,請按照下列步驟操作:
- 建立與主機 VM 的 SSH 連線。
- 在終端機中,執行適用於您作業系統的指令來安裝代理程式:
RHEL
sudo tee /etc/yum.repos.d/google-cloud-workload-agent.repo << EOM [google-cloud-workload-agent] name=Google Cloud Agent for Compute Workloads baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-workload-agent-\$basearch enabled=1 gpgcheck=0 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOM sudo yum install google-cloud-workload-agent
SLES
sudo zypper addrepo --refresh https://packages.cloud.google.com/yum/repos/google-cloud-workload-agent-\$basearch google-cloud-workload-agent sudo zypper install google-cloud-workload-agent
Debian
echo 'deb https://packages.cloud.google.com/apt google-cloud-workload-agent-x86-64-apt main' | sudo tee -a /etc/apt/sources.list.d/google-cloud-workload-agent.list \ sudo apt-get update \ sudo apt-get install google-cloud-workload-agent
設定屬性
下表說明代理程式設定檔的屬性。
屬性 | |
---|---|
log_level |
INFO 。除非 Cloud Customer Care 指示您變更記錄層級,否則請勿擅自變更。 |
log_to_cloud |
如要將代理程式記錄重新導向至 Cloud Logging,請指定 |
common_discovery.collection_frequency |
常見探索服務的收集頻率 (以秒為單位)。 |
agent_properties.log_usage_metrics |
如要啟用代理程式健康指標記錄功能,請將值設為 |
sqlserver_configuration.enabled |
如要在代理程式中啟用 SQL Server 指標收集功能,請將值設為 |
sqlserver_configuration.collection_configuration.collect_guest_os_metrics |
如要啟用 OS 指標收集功能,請將值設為 |
sqlserver_configuration.collection_configuration.collect_sql_metrics |
如要啟用 SQL Server 指標收集功能,請指定 |
sqlserver_configuration.collection_configuration.collection_frequency |
運算工作負載代理的指標收集頻率 (以秒為單位)。預設值為 |
sqlserver_configuration.credential_configurations[].connection_parameters[].host |
SQL Server 主機名稱。 |
sqlserver_configuration.credential_configurations[].connection_parameters[].username |
指定用來查詢 SQL Server 執行個體的使用者帳戶。 如要設定帳戶權限,請查看 權限指令碼中所需的權限,並根據內部政策授予這些權限。 注意:如果您使用的是 Windows 驗證,請務必使用以下格式指定使用者名稱:
|
sqlserver_configuration.credential_configurations[].connection_parameters[].secret.project_id |
儲存機密的專案 ID。如果祕密和主機 VM 執行個體位於同一個 Google Cloud 專案中,請將其設為空字串 ("")。 |
sqlserver_configuration.credential_configurations[].connection_parameters[].secret.secret_name |
如要安全地提供資料庫使用者帳戶的密碼,以便代理程式用於查詢 SQL Server,請在 Secret Manager 中指定包含資料庫使用者帳戶安全性憑證的機密金鑰名稱。 注意:密鑰和主機 VM 執行個體必須位於同一個 Google Cloud 專案中。 |
sqlserver_configuration.credential_configurations[].connection_parameters[].port |
指定 SQL Server 執行個體接受查詢的通訊埠。 |
sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.host |
遠端 Windows VM 的 IP 位址或 FQDN |
sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.username |
指定用於遠端連線至 Windows VM 的使用者帳戶。 |
sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.secret.secret_name |
如要安全地提供密碼給 Windows 使用者帳戶,以便代理程式用於遠端連線至 VM,請在 Secret Manager 中指定密鑰的名稱,該密鑰包含資料庫使用者帳戶的安全性憑證。 注意:密鑰和主機 VM 執行個體必須位於同一個 Google Cloud 專案中。 |
sqlserver_configuration.credential_configurations[].local_collection |
指定 |
sqlserver_configuration.credential_configurations[].remote_linux.connection_parameters.host |
遠端 Linux VM 的 IP 位址或 FQDN。 |
sqlserver_configuration.credential_configurations[].remote_linux.connection_parameters.username |
指定用於遠端連線至 Linux VM 的使用者帳戶。 |
sqlserver_configuration.credential_configurations[].remote_linux.connection_parameter.port |
指定遠端 Linux VM 的 SSH 通訊埠號碼。 |
sqlserver_configuration.credential_configurations[].remote_linux.linux_ssh_private_key_path |
指定 SSH 私密金鑰檔案的路徑。 |
sqlserver_configuration.credential_configurations[].vm_properties.instance_name |
指定 Compute Engine VM 執行個體的名稱。 注意:選用屬性,適用於本機收集。 |
sqlserver_configuration.credential_configurations[].vm_properties.instance_id |
指定 Compute Engine VM 執行個體的 ID。 注意:可選用,適用於本機收集。 |
sqlserver_configuration.collection_timeout |
指標收集逾時時間 (以秒為單位)。預設值為 `10s`。 |
sqlserver_configuration.max_retries |
發生失敗收集時的重試次數上限。預設值為 `3`。 |
sqlserver_configuration.retry_frequency |
指定收集作業失敗時,代理程式應重試的頻率。預設值為 `3600s`。 |
sqlserver_configuration.remote_collection |
指定 |
以下範例顯示 Agent for Compute Workloads 的設定檔:
本機收集
{ "log_level": "INFO", "common_discovery": { "collection_frequency": "10800s" }, "sqlserver_configuration": { "enabled": true, "collection_configuration": { "collect_guest_os_metrics": true, "collect_sql_metrics": true, "collection_frequency": "60s" }, "credential_configurations": [ { "connection_parameters": [ { "host": ".", "username": "db_user_name", "secret": { "project_id": "", "secret_name": "idb_pwd_secret_name" }, "port": 1433 } ], "local_collection": true } ], "collection_timeout": "60s", "max_retries": 5, "retry_frequency": "3600s" } }
遠端收集
{ "log_level": "INFO", "common_discovery": { "collection_frequency": "10800s" }, "sqlserver_configuration": { "enabled": true, "collection_configuration": { "collect_guest_os_metrics": true, "collect_sql_metrics": true, "collection_frequency": "60s" }, "credential_configurations": [ { "connection_parameters": [ { "host": "sql_server_instance", "username": "db_user_name", "secret": { "project_id": "", "secret_name": "db_pwd_secret_name" }, "port": 1433 } ], "remote_win": { "connection_parameters": { "host": "sql_server_instance", "username": "user_name", "secret": { "project_id": "", "secret_name": "pwd_secret_name" } } }, "vm_properties": { "instance_name": "db01", "instance_id": "9999999999999999999" } }, { "connection_parameters": [ { "host": "sql_server_instance", "username": "db_user_name", "secret": { "project_id": "", "secret_name": "db_pwd_secret_name" }, "port": 1433 } ], "remote_linux": { "connection_parameters": { "host": "sql_server_instance", "username": "user_name", "secret": { "project_id": "", "secret_name": "pwd_secret_name" }, "port": 22 }, "linux_ssh_private_key_path": "path of the private key" }, "vm_properties": { "instance_name": "db02", "instance_id": "9999999999999999999" } } ], "collection_timeout": "10s", "max_retries": 3, "retry_frequency": "3600s", "remote_collection": true } }
驗證代理程式安裝
Windows
- 使用 RDP 連線至 Windows VM 執行個體。
以管理員身分在 PowerShell 中執行下列指令:
$(Get-Service -Name 'google-cloud-workload-agent' -ErrorAction Ignore).Status
如果代理程式正在執行,狀態會顯示
Running
。
Linux
- 建立與主機 VM 執行個體的 SSH 連線。
請執行下列指令:
systemctl status google-cloud-workload-agent
如果代理程式運作正常,輸出內容就會包含
active (running)
。例如:google-cloud-workload-agent.service - Google Cloud Agent for Compute Workloads Loaded: loaded (/usr/lib/systemd/system/google-cloud-workload-agent.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2023-12-31 18:59:12 UTC; 10s ago Main PID: 14412 (google_cloud_sq) Tasks: 7 Memory: 12.9M (max: 1.0G limit: 1.0G available: 1011.0M) CGroup: /system.slice/google-cloud-workload-agent.service └─ 14412 /usr/bin/google_cloud_sql_server_agent --action=run
檢查代理程式版本
如要查看代理程式版本,請完成下列步驟:
Windows
- 使用 RDP 連線至主機。
- 以管理員身分在 PowerShell 中執行下列指令:
googet installed google-cloud-workload-agent
RHEL
- 使用 SSH 連線至主機。
- 請執行下列指令:
yum info google-cloud-workload-agent
SUSE
- 使用 SSH 連線至主機。
- 請執行下列指令:
zypper info google-cloud-workload-agent
Debian
- 使用 SSH 連線至主機。
- 請執行下列指令:
dpkg -s google-cloud-workload-agent | grep version
重新啟動代理程式
如果 Compute Workloads 代理程式停止運作,或您更新了其設定,請重新啟動代理程式。
請選取作業系統,然後按照步驟操作:
Windows
- 使用 RDP 連線至主機。
- 以管理員身分在 PowerShell 中執行下列指令:
Restart-Service -Name 'google-cloud-workload-agent' -Force
Linux
- 使用 SSH 連線至主機。
- 請執行下列指令:
sudo systemctl restart google-cloud-workload-agent
更新代理程式
為確保您使用的是最新版的代理程式,請定期檢查更新並更新代理程式。
檢查更新
請選取作業系統,然後按照步驟操作:
Windows
- 使用 RDP 連線至主機。
- 以管理員身分在 PowerShell 中執行下列指令:
googet latest google-cloud-workload-agent
RHEL
- 使用 SSH 連線至主機。
- 請執行下列指令:
sudo yum check-update google-cloud-workload-agent
SLES
- 使用 SSH 連線至主機。
- 請執行下列指令:
sudo zypper list-updates -r google-cloud-workload-agent
Debian
- 使用 SSH 連線至主機。
- 請執行下列指令:
sudo apt list google-cloud-workload-agent
安裝更新
請選取作業系統,然後按照步驟操作:
Windows
- 使用 RDP 連線至主機。
- 以管理員身分在 PowerShell 中執行下列指令:
googet install google-cloud-workload-agent
RHEL
- 使用 SSH 連線至主機。
- 請執行下列指令:
sudo yum --nogpgcheck update google-cloud-workload-agent
SLES
- 使用 SSH 連線至主機。
- 請執行下列指令:
sudo zypper --no-gpg-checks update google-cloud-workload-agent
Debian
- 使用 SSH 連線至主機。
- 請執行下列指令:
sudo apt-get install google-cloud-workload-agent
在 Cloud Logging 中查看代理程式記錄
根據預設,Compute Workloads 代理程式的記錄會從 VM 執行個體重新導向至 Cloud Logging。
如要在「記錄」中查看代理程式的記錄,請按照下列步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
前往「Query」窗格。
從「Resources」下拉式選單中選取「Global」,然後按一下「Apply」。
在查詢編輯器中輸入
google-cloud-workload-agent
。點選「執行查詢」。
您應該會看到在所有 VM 執行個體上執行的代理程式執行個體產生的記錄檔。如要篩選特定機器的記錄,請使用介面提供的篩選器。
在 Cloud Logging 中停用代理程式的記錄
如要停用預設的代理程式記錄重新導向至 Cloud Logging 功能,請按照下列步驟操作:
與主機 VM 執行個體建立 RDP 或 SSH 連線。
開啟代理程設定檔:
Windows
%ProgramFiles%\Google\google-cloud-workload-agent\conf\configuration.json
Linux
/etc/google-cloud-workload-agent/configuration.json
針對屬性
log_to_cloud
,將值更新為false
。儲存設定檔。
重新啟動代理程式,讓這項變更生效。
疑難排解
下列各節將說明使用 Compute Workloads 的 Agent 時常見的問題、原因和解決方法。
驗證權限不足
問題:如果您限制主機 VM 執行個體的存取權範圍,Compute Workloads 代理程式記錄可能會顯示 IAM 權限不足的錯誤。
googleapi: Error 403: Request had insufficient authentication scopes. Details: [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "googleapis.com", "metadata": { "method": "google.cloud.workloadmanager.datawarehouse.v1.DataCollectService.WriteInsight", "service": "workloadmanager.googleapis.com" }, "reason": "ACCESS_TOKEN_SCOPE_INSUFFICIENT" } ]More details: Reason: insufficientPermissions, Message: Insufficient Permission
原因:Compute Workloads 代理程式需要在主機 VM 執行個體上具備最低 Cloud API 存取權範圍。
解決方法:如要解決這個問題,請啟用必要的存取範圍
無法載入設定檔
問題:如果設定檔包含無效值,您會看到下列錯誤。
"Failed to load configuration","pid":3524,"error":"proto: (line 19:42): unknown field "{field_name}"
解決方法:如要解決這個問題,請使用設定屬性中的詳細資料更新設定檔
無法初始化資料收集
問題:如果在安裝代理程式後未更新設定檔,您會看到以下錯誤:
"Failed to initialize guest collection","pid":2112,"error":"invalid value for "user_name" "secret_name"
解決方法:如要解決這個問題,請使用設定屬性初始化憑證設定
後續步驟
- 進一步瞭解工作負載評估。