コンピューティング ワークロード用エージェントを設定する

Microsoft SQL Server 用の Workload Manager は、 Google Cloudの Compute Workloads 用エージェントを使用して、SQL Server 構成を評価するためのメタデータを検出して収集します。

このドキュメントでは、SQL Server を実行する Compute Engine インスタンスに Agent for Compute Workloads をインストール、構成、検証する方法について説明します。

エージェントのインストールの前提条件

Compute Workloads 用エージェントをインストールする前に、SQL Server ワークロード評価を作成するとともに、次の前提条件が満たされていることを確認する必要があります。

サービス アカウントに IAM ロールを付与する

Google Cloudのコンピューティング ワークロード用エージェントは、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 のシークレット アクセサー]
  5. [追加] または [保存] をクリックして、サービス アカウントにロールを適用します。

Google Cloud API へのアクセスを有効にする

Compute Engine では、すべての Cloud APIs にすべてのアクセス スコープを使用できるように VM インスタンスを構成し、インスタンス サービス アカウントの IAM 権限のみを使用してリソースへのアクセスを制御することをおすすめします。 Google Cloud 詳細については、ユーザー管理のサービス アカウントを使用する VM を作成するをご覧ください。

Cloud APIs へのアクセスを制限する場合、コンピューティング ワークロード用エージェントには、ホスト VM インスタンスで次の最小 Cloud API アクセス スコープが必要です。

https://www.googleapis.com/auth/cloud-platform

詳細については、スコープのベスト プラクティスをご覧ください。

外部 IP アドレスを持たない VM インスタンスで SQL Server アプリケーションを実行している場合は、VM のサブネットで限定公開の Google アクセスを有効にして、Compute Workloads 用エージェントが 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 にエージェントをインストールする手順は次のとおりです。

  1. RDP を使用して 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 コマンドを使用する

パッケージ管理コマンドは次のタスクを実行します。

  • コンピューティング ワークロード用エージェントの最新バージョンをダウンロードします。
  • エージェントを google-cloud-workload-agent という名前の Linux systemd サービスとして作成します。
  • サービス 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
  1. \etc\google-cloud-workload-agent にある構成ファイルを確認して、構成プロパティの詳細を使用して構成ファイルを更新します。
  2. エージェントを再起動して、この変更を有効にします。

構成プロパティ

次の表に、エージェントの構成ファイルのプロパティを示します。

プロパティ
log_level

String

エージェントのロギングレベルを設定するには、ログレベルを追加します。使用可能なログレベルは次のとおりです。
  • DEBUG
  • INFO
  • WARNING
  • ERROR
デフォルトは INFO です。Cloud カスタマーケアから指示されない限り、ロギングレベルを変更しないでください。
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 カスタマーケアから指示されない限り、sqlserver_configuration.collection_configuration.collect_guest_os_metricsfalse に設定しないでください。

sqlserver_configuration.collection_configuration.collect_sql_metrics

Boolean

SQL Server 指標の収集を有効にするには、true を指定します。デフォルトは true です。
Cloud カスタマーケアから指示されない限り、sqlserver_configuration.collection_configuration.collect_sql_metricsfalse に設定しないでください。

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

エージェントが VM へのリモート接続に使用する Windows ユーザー アカウントのパスワードを安全に指定するには、データベース ユーザー アカウントのセキュリティ認証情報を含む 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

収集が失敗したときにエージェントが再試行する頻度を指定します。デフォルト値は 3600 秒です。

sqlserver_configuration.remote_collection

Boolean

エージェントがリモート データ収集を行っていることを示すには、true を指定します。デフォルトは false です。

次の例は、コンピューティング ワークロード用エージェントの構成ファイルを示しています。

ローカル収集

{
"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. RDP を使用して 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

エージェントを再起動する

コンピューティング ワークロード用エージェントが停止するか、構成を更新した場合は、エージェントを再起動します。

ご使用のオペレーティング システムに応じて、次の操作を行います。

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 でエージェントのログを表示する

デフォルトでは、Compute Workloads 用エージェントのログは、VM インスタンスから Cloud Logging にリダイレクトされます。

Logging でエージェントのログを表示する手順は次のとおりです。

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  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

原因: Agent for 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"

解決策: この問題を解決するには、構成プロパティを使用して認証情報の構成を初期化します。

次のステップ