本文說明如何在執行 SQL Server 的 Compute Engine 執行個體上,安裝、設定及驗證 Compute Workloads 專用代理程式。
安裝代理程式的必要條件
安裝 Agent for Compute Workloads 之前,請務必符合下列必要條件,並建立 SQL Server 工作負載評估。
將 IAM 角色授予服務帳戶
Google Cloud's Agent for 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 專案。
找出您想新增角色的服務帳戶。
- 如果服務帳戶不在主體清單中,表示尚未獲派任何角色。按一下「新增」,然後輸入服務帳戶的電子郵件地址。
- 如果服務帳戶已在主體清單中,表示已獲指派角色。找到要編輯的服務帳戶,然後按一下「編輯」按鈕。
從可用角色清單中選取所需角色:
- [Compute Engine] > [Compute 檢視者]
- Secret Manager > Secret Manager Secret Accessor
按一下 [Add] (新增) 或 [Save] (儲存),即可將角色套用到服務帳戶。
啟用 API 存取權 Google Cloud
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 專用代理程式存取 Google API 和服務。如要瞭解如何在子網路上啟用 Private Google Access,請參閱「設定 Private Google Access」。
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
安裝 Agent for Compute Workloads。套件管理指令會完成下列工作:
- 下載最新版的 Agent for Compute Workloads。
- 建立名為
google-cloud-workload-agent
的 Windows 服務,以及每分鐘執行一次的排定工作,檢查服務是否仍在執行,並視需要重新啟動服務。
如要在 VM 上安裝代理程式,請按照下列步驟操作:
- 使用遠端桌面協定連線至 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 上,您可以使用標準作業系統套件管理指令安裝 Agent for Compute Workloads:
- 在 RHEL 上,使用
yum
指令 - 在 SLES 上使用
zypper
指令 - 在 Debian 上使用
apt
指令
套件管理指令會完成下列工作:
- 下載最新版的 Agent for Compute Workloads。
- 以 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
查看
\etc\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
- 使用遠端桌面協定連線至 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
重新啟動代理程式
如果 Agent for 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 中查看代理程式記錄
根據預設,Agent for Compute Workloads 的記錄檔會從 VM 執行個體重新導向至 Cloud Logging。
如要在 Logging 中查看代理程式的記錄,請按照下列步驟操作:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
前往「查詢」窗格。
從「資源」下拉式選單中選取「全域」,然後按一下「套用」。
在查詢編輯器中輸入
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 專用代理程式時的常見問題、原因和解決方法。
驗證範圍不足
問題:如果限制主機 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"
解決方法:如要解決這個問題,請使用設定屬性初始化憑證設定
後續步驟
- 進一步瞭解工作負載評估。