Configure o agente para o Microsoft SQL Server

O Workload Manager para Microsoft SQL Server usa o agente para cargas de trabalho de computação para detetar e recolher metadados para avaliar as suas configurações do SQL Server. Google Cloud

Este documento mostra como instalar, configurar e validar o agente para cargas de trabalho de computação em instâncias do Compute Engine que executam o SQL Server.

Pré-requisitos para instalar o agente

Antes de instalar o agente para cargas de trabalho de computação, tem de garantir que os seguintes pré-requisitos são cumpridos, juntamente com a criação de uma avaliação da carga de trabalho do SQL Server.

Conceda funções do IAM à conta de serviço

O agente doGoogle Cloudpara cargas de trabalho do Compute usa a conta de serviço de gestão de identidade e de acesso (IAM) anexada à VM para autenticação com o Google Cloud e para autorização de acesso Google Cloud a recursos. Para a recolha de métricas de validação do Workload Manager, use uma nova conta de serviço que inclua as seguintes funções do IAM:

Para adicionar uma função obrigatória à sua conta de serviço, siga estes passos:

  1. Na Google Cloud consola, aceda à página IAM.

    Aceda ao IAM

  2. Selecione o seu projeto do Google Cloud .

  3. Identifique a conta de serviço à qual quer adicionar uma função.

    • Se a conta de serviço ainda não estiver na lista de responsáveis, significa que não lhe foram atribuídas funções. Clique em Adicionar e introduza o endereço de email da conta de serviço.
    • Se a conta de serviço já estiver na lista de responsáveis, significa que tem funções existentes. Clique no botão Editar para a conta de serviço que quer editar.
  4. Selecione a função necessária na lista de funções disponíveis:

    • Compute Engine > Compute Viewer
    • Secret Manager > Secret Manager Secret Accessor
  5. Clique em Adicionar ou Guardar para aplicar as funções à conta de serviço.

Ative o acesso às Google Cloud APIs

O Compute Engine recomenda que configure as suas instâncias de MV para permitir todos os âmbitos de acesso a todas as APIs Cloud e usar apenas as autorizações do IAM da conta de serviço da instância para controlar o acesso aos Google Cloud recursos. Para mais informações, consulte o artigo Crie uma VM que use uma conta de serviço gerida pelo utilizador.

Se limitar o acesso às APIs Cloud, o agente para cargas de trabalho de computação requer os seguintes âmbitos de acesso à API Cloud mínimos na instância de VM do anfitrião:

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

Para mais informações, consulte o artigo Práticas recomendadas de âmbitos.

Se estiver a executar aplicações SQL Server numa instância de VM que não tenha um endereço IP externo, tem de ativar o acesso privado à Google na sub-rede da VM para que o agente para cargas de trabalho do Compute possa aceder às APIs e aos serviços Google. Para saber como ativar o acesso privado à Google numa sub-rede, consulte o artigo Configurar o acesso privado à Google.

Autorizações necessárias no SQL Server

Use o seguinte script para atribuir as autorizações necessárias à conta de utilizador configurada no agente.

    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'' '

Instale o agente

Para instalar a versão mais recente do agente para cargas de trabalho de computação, conclua os passos seguintes:

Windows

No Windows, instala o agente para cargas de trabalho de computação através do comando de gestão de pacotes GooGet, googet. O comando de gestão de pacotes conclui as seguintes tarefas:

  • Transfere a versão mais recente do agente para cargas de trabalho de computação.
  • Cria um serviço do Windows denominado google-cloud-workload-agent e uma tarefa agendada que é executada todos os minutos para verificar se o serviço ainda está em execução e, se necessário, reiniciá-lo.

Para instalar o agente numa VM, siga estes passos:

  1. Estabeleça ligação à instância de VM do Windows através do RDP.
  2. Como administrador, execute os seguintes comandos a partir do 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. Reveja o ficheiro de configuração localizado em %ProgramFiles%\Google\google-cloud-workload-agent\conf e atualize o ficheiro de configuração com os detalhes em Propriedades de configuração.
  4. Reinicie o agente para que esta alteração entre em vigor.

Linux

No Linux, instala o agente para cargas de trabalho do Compute Engine através dos comandos de gestão de pacotes do sistema operativo padrão:

  • No RHEL, use o comando yum
  • No SLES, use o comando zypper
  • No Debian, use o comando apt

O comando de gestão de pacotes conclui as seguintes tarefas:

  • Transfere a versão mais recente do agente para cargas de trabalho de computação.
  • Cria o agente como um serviço Linux denominado google-cloud-workload-agent.systemd
  • Ativa e inicia o serviço google-cloud-workload-agent.

Para instalar o agente numa VM, siga estes passos:

  1. Estabeleça uma ligação SSH à sua VM de anfitrião.
  2. No terminal, instale o agente executando o comando específico do seu sistema operativo:

    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. Reveja o ficheiro de configuração localizado em \etc\google-cloud-workload-agent e atualize o ficheiro de configuração com os detalhes em Propriedades de configuração.

  4. Reinicie o agente para que esta alteração entre em vigor.

Propriedades de configuração

A tabela seguinte descreve as propriedades do ficheiro de configuração do agente.

Propriedades
log_level

String

Para definir o nível de registo do agente, adicione os níveis de registo. Os níveis de registo disponíveis são os seguintes:
  • DEBUG
  • INFO
  • WARNING
  • ERROR
A predefinição é INFO. Não altere o nível de registo, a menos que receba instruções do apoio técnico ao cliente da nuvem.
log_to_cloud

Boolean

Para redirecionar os registos do agente para o Cloud Logging, especifique true. A predefinição é true.

common_discovery.collection_frequency

Duration

Frequência de recolha para o serviço de descoberta comum, em segundos.
O valor predefinido é 10800s.

agent_properties.log_usage_metrics

Boolean

Para ativar o registo de métricas de saúde do agente, defina o valor como true. A predefinição é false.

sqlserver_configuration.enabled

Boolean

Para ativar as recolhas de métricas do SQL Server no agente, defina o valor como true. A predefinição é false.

sqlserver_configuration.collection_configuration.collect_guest_os_metrics

Boolean

Para ativar a recolha de métricas do SO, defina o valor como true. A predefinição é true.
Não defina sqlserver_configuration.collection_configuration.collect_guest_os_metrics como false a menos que lhe seja indicado pelo Cloud Customer Care.

sqlserver_configuration.collection_configuration.collect_sql_metrics

Boolean

Para ativar a recolha de métricas do SQL Server, especifique true. A predefinição é true.
Não defina sqlserver_configuration.collection_configuration.collect_sql_metrics como false a menos que lhe seja indicado pelo Cloud Customer Care.

sqlserver_configuration.collection_configuration.collection_frequency

Duration

Agente para a frequência de recolha de métricas de cargas de trabalho de computação, em segundos. A predefinição é 3600s. Pode atualizar a frequência da recolha. No entanto, recomendamos que mantenha o valor predefinido.

sqlserver_configuration.credential_configurations[].connection_parameters[].host

String

O nome de anfitrião do SQL Server.

sqlserver_configuration.credential_configurations[].connection_parameters[].username

String

Especifique a conta de utilizador que é usada para consultar a instância do SQL Server. Para configurar as autorizações da conta, reveja as autorizações necessárias no script de autorizações e conceda-as de acordo com as suas políticas internas.

Nota: se estiver a usar a autenticação do Windows, certifique-se de que especifica o nome de utilizador no seguinte formato: domain-name\\user-name

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

String

O ID do projeto onde o segredo está armazenado. Defina-o como uma string vazia ("") se o segredo e a instância de VM do anfitrião existirem no mesmo Google Cloud projeto.

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

String

Para fornecer de forma segura a palavra-passe da conta de utilizador da base de dados que o agente usa para consultar o SQL Server, especifique o nome do segredo no Secret Manager que contém as credenciais de segurança da conta de utilizador da base de dados.

Nota: o segredo e a instância de VM anfitriã têm de existir no mesmo Google Cloud projeto.

sqlserver_configuration.credential_configurations[].connection_parameters[].port

Int

Especifique a porta na qual a instância do SQL Server aceita consultas.

sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.host

String

Endereço IP ou FQDN da VM do Windows remota

sqlserver_configuration.credential_configurations[].remote_win.connection_parameters.username

String

Especifique a conta de utilizador que é usada para estabelecer ligação remotamente à VM do Windows.

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

String

Para fornecer de forma segura a palavra-passe da conta de utilizador do Windows que o agente usa para se ligar remotamente à VM, especifique o nome do segredo no Secret Manager que contém as credenciais de segurança da conta de utilizador da base de dados.

Nota: o segredo e a instância de VM anfitriã têm de existir no mesmo Google Cloud projeto.

sqlserver_configuration.credential_configurations[].local_collection

Boolean

Especifique true para indicar que o agente está a fazer a recolha de dados locais. A predefinição é true.

sqlserver_configuration.credential_configurations[].remote_linux.connection_parameters.host

String

Endereço IP ou FQDN da VM Linux remota.

sqlserver_configuration.credential_configurations[].remote_linux.connection_parameters.username

String

Especifique a conta de utilizador que é usada para estabelecer ligação remotamente à VM do Linux.

sqlserver_configuration.credential_configurations[].remote_linux.connection_parameter.port

Int

Especifique o número da porta SSH para a VM Linux remota.

sqlserver_configuration.credential_configurations[].remote_linux.linux_ssh_private_key_path

String

Especifique o caminho para o ficheiro de chave privada de SSH.

sqlserver_configuration.credential_configurations[].vm_properties.instance_name

String

Especifique o nome da instância de VM do Compute Engine.

Nota: opcional para recolha local.

sqlserver_configuration.credential_configurations[].vm_properties.instance_id

String

Especifique o ID da instância de VM do Compute Engine.

Nota: opcional para recolha local.

sqlserver_configuration.collection_timeout

Duration

O limite de tempo para a recolha de métricas, em segundos. A predefinição é "10s".

sqlserver_configuration.max_retries

Int

O número máximo de novas tentativas quando ocorre uma recolha falhada. O valor predefinido é "3".

sqlserver_configuration.retry_frequency

Duration

Especifique a frequência com que o agente deve tentar novamente quando uma recolha falha. O valor predefinido é `3600s`.

sqlserver_configuration.remote_collection

Boolean

Especifique true para indicar que o agente está a fazer a recolha de dados remota. A predefinição é false.

O exemplo seguinte mostra um ficheiro de configuração para o agente para cargas de trabalho de computação:

Coleção local

{
"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"
}
}

Recolha remota

{
"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
}
}

Valide a instalação do agente

Windows

  1. Estabeleça ligação à instância de VM do Windows através do RDP.
  2. Execute o seguinte comando a partir do PowerShell como administrador:

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

    Se o agente estiver em execução, o estado mostra Running.

Linux

  1. Estabeleça uma ligação SSH com a instância de VM do anfitrião.
  2. Execute o seguinte comando:

    systemctl status google-cloud-workload-agent

    Se o agente estiver a funcionar corretamente, a saída contém active (running). Por exemplo:

    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
    

Verifique a versão do agente

Para verificar a versão do seu agente, conclua os seguintes passos:

Windows

  1. Use o RDP para estabelecer ligação à máquina anfitriã.
  2. Como administrador, execute o seguinte comando a partir do PowerShell:
    googet installed google-cloud-workload-agent

RHEL

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    yum info google-cloud-workload-agent

SUSE

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    zypper info google-cloud-workload-agent

Debian

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    dpkg -s google-cloud-workload-agent | grep version

Reinicie o agente

Se o agente para cargas de trabalho de computação parar de funcionar ou atualizar a respetiva configuração, reinicie o agente.

Selecione o seu sistema operativo e, em seguida, siga os passos:

Windows

  1. Use o RDP para estabelecer ligação à máquina anfitriã.
  2. Como administrador, execute o seguinte comando a partir do PowerShell:
    Restart-Service -Name 'google-cloud-workload-agent' -Force

Linux

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    sudo systemctl restart google-cloud-workload-agent

Atualize o agente

Para garantir que tem a versão mais recente do agente, tem de verificar periodicamente se existem atualizações e atualizar o agente.

Procure atualizações

Selecione o seu sistema operativo e, em seguida, siga os passos:

Windows

  1. Use o RDP para estabelecer ligação à máquina anfitriã.
  2. Como administrador, execute o seguinte comando a partir do PowerShell:
    googet latest google-cloud-workload-agent

RHEL

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    sudo yum check-update google-cloud-workload-agent

SLES

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    sudo zypper list-updates -r google-cloud-workload-agent

Debian

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    sudo apt list google-cloud-workload-agent

Instale uma atualização

Selecione o seu sistema operativo e, em seguida, siga os passos:

Windows

  1. Use o RDP para estabelecer ligação à máquina anfitriã.
  2. Como administrador, execute o seguinte comando a partir do PowerShell:
    googet install google-cloud-workload-agent

RHEL

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    sudo yum --nogpgcheck update google-cloud-workload-agent

SLES

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    sudo zypper --no-gpg-checks update google-cloud-workload-agent

Debian

  1. Use o SSH para se ligar à máquina anfitriã.
  2. Execute o seguinte comando:
    sudo apt-get install google-cloud-workload-agent

Veja os registos do agente em Registos na nuvem

Por predefinição, os registos do agente para cargas de trabalho de computação são redirecionados das suas instâncias de VM para o Cloud Logging.

Para ver os registos do agente no Logging, siga estes passos:

  1. Na Google Cloud consola, aceda à página Explorador de registos.

    Aceda ao Explorador de registos

  2. Aceda ao painel Consulta.

  3. No menu pendente Recursos, selecione Global e, de seguida, clique em Aplicar.

  4. No editor de consultas, introduza google-cloud-workload-agent.

  5. Clique em Executar consulta.

    Deverá ver os registos gerados pelas instâncias do agente em execução em todas as suas instâncias de VM. Para filtrar os registos de uma máquina específica, use os filtros disponíveis na interface.

Desative os registos do agente no Cloud Logging

Para desativar o redirecionamento predefinido dos registos do agente para o Cloud Logging, siga estes passos:

  1. Estabeleça uma ligação RDP ou SSH com a instância da VM do anfitrião.

  2. Abra o ficheiro de configuração do agente:

    Windows

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

    Linux

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

  3. Para a propriedade log_to_cloud, atualize o valor para false.

  4. Guarde o ficheiro de configuração.

  5. Reinicie o agente para que esta alteração entre em vigor.

Resolução de problemas

As secções seguintes fornecem informações sobre problemas comuns relacionados com a utilização do agente para cargas de trabalho de computação, as respetivas causas e resolução.

Âmbitos de autenticação insuficientes

Problema: se limitar os âmbitos de acesso na instância de VM do anfitrião, os registos do agente para cargas de trabalho do Compute podem apresentar um erro de autorizações do IAM insuficientes.

  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

Causa: o agente para cargas de trabalho de computação requer âmbitos de acesso mínimos da API Cloud na instância de VM do anfitrião.

Resolução: para resolver este problema, ative os âmbitos de acesso necessários

Falha ao carregar o ficheiro de configuração

Problema: se o ficheiro de configuração tiver valores inválidos, é apresentado o seguinte erro.

"Failed to load configuration","pid":3524,"error":"proto: (line 19:42): unknown
field "{field_name}"

Resolução: para resolver este problema, atualize o ficheiro de configuração com os detalhes em Propriedades de configuração

Falha ao inicializar a recolha de dados

Problema: após a instalação do agente, se o ficheiro de configuração não for atualizado, é apresentado o seguinte erro:

"Failed to initialize guest collection","pid":2112,"error":"invalid value for "user_name" "secret_name"

Resolução: para resolver este problema, inicialize a configuração das credenciais usando propriedades de configuração

O que se segue?