設定 Microsoft SQL Server 的代理程式

Microsoft SQL Server 適用的 Workload Manager 會使用 Google Cloud的 Agent for Compute Workloads,偵測及收集中繼資料,評估 SQL Server 設定。

本文說明如何在執行 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 角色的新服務帳戶:

如要將必要角色新增至服務帳戶,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「IAM」頁面。

    前往「IAM」頁面

  2. 選取 Google Cloud 專案。

  3. 找出您想新增角色的服務帳戶。

    • 如果服務帳戶不在主體清單中,表示尚未獲派任何角色。按一下「新增」,然後輸入服務帳戶的電子郵件地址。
    • 如果服務帳戶已在主體清單中,表示已獲指派角色。找到要編輯的服務帳戶,然後按一下「編輯」按鈕。
  4. 從可用角色清單中選取所需角色:

    • [Compute Engine] > [Compute 檢視者]
    • Secret Manager > Secret Manager Secret Accessor
  5. 按一下 [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 上安裝代理程式,請按照下列步驟操作:

  1. 使用遠端桌面協定連線至 Windows VM 執行個體。
  2. 以管理員身分從 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
    
  3. 查看 %ProgramFiles%\Google\google-cloud-workload-agent\conf 下的設定檔,並使用「設定屬性」中的詳細資料更新設定檔。
  4. 重新啟動代理程式,讓這項變更生效。

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 上安裝代理程式,請按照下列步驟操作:

  1. 建立與主機 VM 的 SSH 連線。
  2. 在終端機中,執行適用於作業系統的指令,安裝代理程式:

    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
    

  3. 查看 \etc\google-cloud-workload-agent 下的設定檔,並使用「設定屬性」中的詳細資料更新設定檔。

  4. 重新啟動代理程式,讓這項變更生效。

設定屬性

下表說明代理程式設定檔的屬性。

屬性
log_level

String

如要設定代理程式的記錄層級,請新增記錄層級。 可用的記錄層級如下:
  • DEBUG
  • INFO
  • WARNING
  • ERROR
預設值為 INFO。除非 Cloud Customer Care 指示您變更記錄層級,否則請勿擅自更動。
log_to_cloud

Boolean

如要將代理程式記錄重新導向至 Cloud Logging,請指定 true。預設值為 true

common_discovery.collection_frequency

Duration

一般探索服務的收集頻率 (以秒為單位)。
預設值為 10800s

agent_properties.log_usage_metrics

Boolean

如要啟用代理程式健康指標記錄功能,請將值設為 true。 預設值為 false

sqlserver_configuration.enabled

Boolean

如要在代理程式中啟用 SQL Server 指標收集功能,請將值設為 true。 預設值為 false

sqlserver_configuration.collection_configuration.collect_guest_os_metrics

Boolean

如要啟用 OS 指標收集功能,請將值設為 true。 預設為 true 步。
除非 Cloud Customer Care 另有指示,否則請勿將 sqlserver_configuration.collection_configuration.collect_guest_os_metrics 設為 false

sqlserver_configuration.collection_configuration.collect_sql_metrics

Boolean

如要啟用 SQL Server 指標收集功能,請指定 true。 預設為 true 步。
除非 Cloud Customer Care 另有指示,否則請勿將 sqlserver_configuration.collection_configuration.collect_sql_metrics 設為 false

sqlserver_configuration.collection_configuration.collection_frequency

Duration

運算工作負載代理程式的指標收集頻率 (以秒為單位)。 預設值為 3600s。 您可以更新收集頻率。不過,建議您保留預設值。

sqlserver_configuration.credential_configurations[].connection_parameters[].host

String

SQL Server 主機名稱。

sqlserver_configuration.credential_configurations[].connection_parameters[].username

String

指定用於查詢 SQL Server 執行個體的使用者帳戶。 如要設定帳戶權限,請查看 權限指令碼中列出的必要權限,並根據內部政策授予權限。

注意:如果您使用 Windows 驗證,請務必以以下格式指定使用者名稱: domain-name\\user-name

sqlserver_configuration.credential_configurations[].connection_parameters[].secret.project_id

String

儲存密鑰的專案 ID。如果密鑰和主機 VM 執行個體位於同一個專案,請將其設為空字串 ("")。 Google Cloud

sqlserver_configuration.credential_configurations[].connection_parameters[].secret.secret_name

String

如要安全地提供資料庫使用者帳戶的密碼,供代理程式查詢 SQL Server,請在 Secret Manager 中指定密碼的名稱,該密碼包含資料庫使用者帳戶的安全憑證。

注意:密鑰和主機 VM 執行個體必須位於同一個 Google Cloud 專案。

sqlserver_configuration.credential_configurations[].connection_parameters[].port

Int

指定 SQL Server 執行個體接受查詢的通訊埠。

sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.host

String

遠端 Windows VM 的 IP 位址或 FQDN

sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.username

String

指定用來遠端連線至 Windows VM 的使用者帳戶。

sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.secret.secret_name

String

如要安全地提供 Windows 使用者帳戶的密碼,供代理程式用來遠端連線至 VM,請在 Secret Manager 中指定密鑰名稱,該密鑰包含資料庫使用者帳戶的安全憑證。

注意:密鑰和主機 VM 執行個體必須位於同一個 Google Cloud 專案。

sqlserver_configuration.credential_configurations[].local_collection

Boolean

指定 true,表示代理程式正在收集本機資料。 預設值為 true

sqlserver_configuration.credential_configurations[].remote_linux.connection_parameters.host

String

遠端 Linux VM 的 IP 位址或 FQDN。

sqlserver_configuration.credential_configurations[].remote_linux.connection_parameters.username

String

指定用於遠端連線至 Linux VM 的使用者帳戶。

sqlserver_configuration.credential_configurations[].remote_linux.connection_parameter.port

Int

指定遠端 Linux VM 的 SSH 通訊埠號碼。

sqlserver_configuration.credential_configurations[].remote_linux.linux_ssh_private_key_path

String

指定 SSH 私密金鑰檔案的路徑。

sqlserver_configuration.credential_configurations[].vm_properties.instance_name

String

指定 Compute Engine VM 執行個體名稱。

注意:店面產品素材資源集合可選擇是否提供這項資訊。

sqlserver_configuration.credential_configurations[].vm_properties.instance_id

String

指定 Compute Engine VM 執行個體 ID。

注意:店面產品素材資源集合可選擇是否提供這項資訊。

sqlserver_configuration.collection_timeout

Duration

指標收集作業的逾時時間 (以秒為單位)。預設值為 `10s`。

sqlserver_configuration.max_retries

Int

集合失敗時的重試次數上限。 預設值為 `3`。

sqlserver_configuration.retry_frequency

Duration

指定代理程式在收集失敗時的重試頻率。 預設值為 `3600s`。

sqlserver_configuration.remote_collection

Boolean

指定 true,表示代理程式正在進行遠端資料收集。 預設值為 false

以下範例顯示 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

  1. 使用遠端桌面協定連線至 Windows VM 執行個體。
  2. 以管理員身分從 PowerShell 執行下列指令:

    $(Get-Service -Name 'google-cloud-workload-agent' -ErrorAction Ignore).Status

    如果代理程式正在執行,狀態會顯示 Running

Linux

  1. 建立與主機 VM 執行個體的 SSH 連線。
  2. 請執行下列指令:

    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

  1. 使用 RDP 連線至主機。
  2. 以管理員身分從 PowerShell 執行下列指令:
    googet installed google-cloud-workload-agent

RHEL

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    yum info google-cloud-workload-agent

SUSE

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    zypper info google-cloud-workload-agent

Debian

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    dpkg -s google-cloud-workload-agent | grep version

重新啟動代理程式

如果 Agent for Compute Workloads 停止運作或您更新其設定,請重新啟動代理程式。

選取作業系統,然後按照下列步驟操作:

Windows

  1. 使用 RDP 連線至主機。
  2. 以管理員身分從 PowerShell 執行下列指令:
    Restart-Service -Name 'google-cloud-workload-agent' -Force

Linux

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    sudo systemctl restart google-cloud-workload-agent

更新代理程式

為確保您使用最新版本的代理程式,請定期檢查更新並更新代理程式。

檢查更新

選取作業系統,然後按照下列步驟操作:

Windows

  1. 使用 RDP 連線至主機。
  2. 以管理員身分從 PowerShell 執行下列指令:
    googet latest google-cloud-workload-agent

RHEL

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    sudo yum check-update google-cloud-workload-agent

SLES

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    sudo zypper list-updates -r google-cloud-workload-agent

Debian

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    sudo apt list google-cloud-workload-agent

安裝更新

選取作業系統,然後按照下列步驟操作:

Windows

  1. 使用 RDP 連線至主機。
  2. 以管理員身分從 PowerShell 執行下列指令:
    googet install google-cloud-workload-agent

RHEL

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    sudo yum --nogpgcheck update google-cloud-workload-agent

SLES

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    sudo zypper --no-gpg-checks update google-cloud-workload-agent

Debian

  1. 使用 SSH 連線至主機。
  2. 請執行下列指令:
    sudo apt-get install google-cloud-workload-agent

在 Cloud Logging 中查看代理程式記錄

根據預設,Agent for Compute Workloads 的記錄檔會從 VM 執行個體重新導向至 Cloud Logging

如要在 Logging 中查看代理程式的記錄,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往「Logs explorer」(記錄檔探索工具)

  2. 前往「查詢」窗格。

  3. 從「資源」下拉式選單中選取「全域」,然後按一下「套用」

  4. 在查詢編輯器中輸入 google-cloud-workload-agent

  5. 點選「執行查詢」

    您應該會看到在所有 VM 執行個體上執行的代理程式執行個體所產生的記錄。如要篩選特定電腦的記錄,請使用介面中的篩選器。

在 Cloud Logging 中停用代理程式記錄

如要停用代理程式記錄預設重新導向至 Cloud Logging 的功能,請按照下列步驟操作:

  1. 建立與主機 VM 執行個體的 RDP 或 SSH 連線。

  2. 開啟代理程式的設定檔:

    Windows

    %ProgramFiles%\Google\google-cloud-workload-agent\conf\configuration.json

    Linux

    /etc/google-cloud-workload-agent/configuration.json

  3. 將屬性 log_to_cloud 的值更新為 false

  4. 儲存設定檔。

  5. 重新啟動代理程式,讓這項變更生效。

疑難排解

下列各節提供使用 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"

解決方法:如要解決這個問題,請使用設定屬性初始化憑證設定

後續步驟