MySQL

A integração do MySQL recolhe métricas de desempenho relacionadas com o InnoDB, o conjunto de buffers e várias outras operações. Também recolhe registos gerais, de erros e de consultas lentas, e analisa-os num payload JSON. Os registos de erros são analisados para o respetivo código de erro e subsistema. Os registos de consultas lentas são analisados em pares de chave-valor que descrevem o desempenho de uma consulta, incluindo o tempo de consulta e as linhas examinadas.

Para mais informações sobre o MySQL, consulte a documentação do MySQL.

Pré-requisitos

Para recolher telemetria do MySQL, tem de instalar o agente de operações:

  • Para métricas, instale a versão 2.32.0 ou superior.
  • Para registos, instale a versão 2.5.0 ou superior.

Esta integração suporta as versões 5.7 e 8.0 do MySQL.

Configure a sua instância do MySQL

O recetor mysql liga-se por predefinição a um servidor MySQL local através de um socket Unix e da autenticação Unix como utilizador root.

Configure o agente de operações para o MySQL

Seguindo o guia para configurar o Ops Agent, adicione os elementos necessários para recolher telemetria de instâncias do MySQL e reinicie o agente.

Exemplo de configuração

Os seguintes comandos criam a configuração para recolher e carregar telemetria para o MySQL:

# Configures Ops Agent to collect telemetry from the app. You must restart the agent for the configuration to take effect.

set -e

# Check if the file exists
if [ ! -f /etc/google-cloud-ops-agent/config.yaml ]; then
  # Create the file if it doesn't exist.
  sudo mkdir -p /etc/google-cloud-ops-agent
  sudo touch /etc/google-cloud-ops-agent/config.yaml
fi

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Configure the Ops Agent.
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    mysql:
      type: mysql
      username: root
      password: Ss123%321
      # To use the googlesecretmanager provider to replace plaintext passwords, refer to the example below.
      # password: ${googlesecretmanager:projects/<project-id>/secrets/<secret-id>/versions/<version-id>}
  service:
    pipelines:
      mysql:
        receivers:
        - mysql
logging:
  receivers:
    mysql_error:
      type: mysql_error
    mysql_general:
      type: mysql_general
    mysql_slow:
      type: mysql_slow
  service:
    pipelines:
      mysql:
        receivers:
          - mysql_error
          - mysql_general
          - mysql_slow
EOF

Para que estas alterações entrem em vigor, tem de reiniciar o agente de operações:

Linux

  1. Para reiniciar o agente, execute o seguinte comando na sua instância:
    sudo systemctl restart google-cloud-ops-agent
    
  2. Para confirmar que o agente foi reiniciado, execute o seguinte comando e verifique se os componentes "Agente de métricas" e "Agente de registo" foram iniciados:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. Estabeleça ligação à sua instância através do RDP ou de uma ferramenta semelhante e inicie sessão no Windows.
  2. Abra um terminal do PowerShell com privilégios de administrador: clique com o botão direito do rato no ícone do PowerShell e selecione Executar como administrador
  3. Para reiniciar o agente, execute o seguinte comando do PowerShell:
    Restart-Service google-cloud-ops-agent -Force
    
  4. Para confirmar que o agente foi reiniciado, execute o seguinte comando e verifique se os componentes "Agente de métricas" e "Agente de registo" foram iniciados:
    Get-Service google-cloud-ops-agent*
    

Configure a recolha de registos

Para carregar registos do MySQL, tem de criar um recetor para os registos produzidos pelo MySQL e, em seguida, criar um pipeline para o novo recetor.

Para configurar um recetor para os seus registos mysql_error, especifique os seguintes campos:

Campo Predefinição Descrição
exclude_paths Uma lista de padrões de caminhos do sistema de ficheiros a excluir do conjunto correspondente a include_paths.
include_paths [/var/log/mysqld.log, /var/log/mysql/mysqld.log, /var/log/mysql/error.log] Uma lista de caminhos do sistema de ficheiros a ler através da análise detalhada de cada ficheiro. Pode usar um caráter universal (*) nos caminhos; por exemplo, /var/log/mysql/*.log.
record_log_file_path false Se estiver definido como true, o caminho para o ficheiro específico a partir do qual o registo de registo foi obtido aparece na entrada de registo de saída como o valor da etiqueta agent.googleapis.com/log_file_path. Quando usa um caráter universal, apenas é registado o caminho do ficheiro a partir do qual o registo foi obtido.
type Este valor tem de ser mysql_error.
wildcard_refresh_interval 60s O intervalo no qual os caminhos de ficheiros com carateres universais em include_paths são atualizados. Indicado como uma duração, por exemplo, 30s ou 2m. Esta propriedade pode ser útil em débitos de registo elevados, em que os ficheiros de registo são rodados mais rapidamente do que o intervalo predefinido.

Para configurar um recetor para os seus registos mysql_general, especifique os seguintes campos:

Campo Predefinição Descrição
exclude_paths Uma lista de padrões de caminhos do sistema de ficheiros a excluir do conjunto correspondente a include_paths.
include_paths [/var/lib/mysql/${HOSTNAME}.log] Uma lista de caminhos do sistema de ficheiros a ler através da análise detalhada de cada ficheiro. Pode usar um caráter universal (*) nos caminhos.
record_log_file_path false Se estiver definido como true, o caminho para o ficheiro específico a partir do qual o registo de registo foi obtido aparece na entrada de registo de saída como o valor da etiqueta agent.googleapis.com/log_file_path. Quando usa um caráter universal, apenas é registado o caminho do ficheiro a partir do qual o registo foi obtido.
type Este valor tem de ser mysql_general.
wildcard_refresh_interval 60s O intervalo no qual os caminhos de ficheiros com carateres universais em include_paths são atualizados. Indicado como uma duração, por exemplo, 30s ou 2m. Esta propriedade pode ser útil em débitos de registo elevados, em que os ficheiros de registo são rodados mais rapidamente do que o intervalo predefinido.

Para configurar um recetor para os seus registos mysql_slow, especifique os seguintes campos:

Campo Predefinição Descrição
exclude_paths Uma lista de padrões de caminhos do sistema de ficheiros a excluir do conjunto correspondente a include_paths.
include_paths [/var/lib/mysql/${HOSTNAME}-slow.log] Uma lista de caminhos do sistema de ficheiros a ler através da análise detalhada de cada ficheiro. Pode usar um caráter universal (*) nos caminhos.
record_log_file_path false Se estiver definido como true, o caminho para o ficheiro específico a partir do qual o registo de registo foi obtido aparece na entrada de registo de saída como o valor da etiqueta agent.googleapis.com/log_file_path. Quando usa um caráter universal, apenas é registado o caminho do ficheiro a partir do qual o registo foi obtido.
type Este valor tem de ser mysql_slow.
wildcard_refresh_interval 60s O intervalo no qual os caminhos de ficheiros com carateres universais em include_paths são atualizados. Indicado como uma duração, por exemplo, 30s ou 2m. Esta propriedade pode ser útil em débitos de registo elevados, em que os ficheiros de registo são rodados mais rapidamente do que o intervalo predefinido.

O que é registado

O logName é derivado dos IDs dos recetores especificados na configuração. Os campos detalhados no interior de LogEntry são os seguintes.

Os registos mysql_error contêm os seguintes campos em LogEntry:

Campo Tipo Descrição
jsonPayload.errorCode de string Código de erro do MySQL associado ao registo
jsonPayload.level de string Nível de entrada do registo
jsonPayload.message de string Mensagem de registo
jsonPayload.subsystem de string Subsistema do MySQL onde o registo teve origem
jsonPayload.tid número ID da discussão de onde o registo se originou
severity string (LogSeverity) Nível de entrada de registo (traduzido).

Os registos mysql_general contêm os seguintes campos em LogEntry:

Campo Tipo Descrição
jsonPayload.command de string Tipo de ação da base de dados que está a ser registada
jsonPayload.message de string Registo da ação da base de dados
jsonPayload.tid número ID da discussão de onde o registo se originou
severity string (LogSeverity) Nível de entrada de registo (traduzido).

Os registos mysql_slow contêm os seguintes campos em LogEntry:

Campo Tipo Descrição
jsonPayload.bytesReceived   número O número de bytes recebidos de todos os clientes
jsonPayload.bytesSent   número O número de bytes enviados a todos os clientes
jsonPayload.createdTmpDiskTables   número O número de tabelas temporárias internas no disco criadas pelo servidor
jsonPayload.createdTmpTables   número O número de tabelas temporárias internas criadas pelo servidor
jsonPayload.database de string Base de dados onde a consulta foi executada
jsonPayload.endTime   de string A hora de conclusão da execução do extrato
jsonPayload.errorNumber   número O número do erro da declaração ou 0 se não tiver ocorrido nenhum erro
jsonPayload.host de string Anfitrião da instância de base de dados
jsonPayload.ipAddress de string Endereço da instância de base de dados
jsonPayload.killed   número Se a declaração foi terminada, o número do erro que indica o motivo ou 0 se a declaração tiver sido terminada normalmente
jsonPayload.level de string Nível de entrada do registo
jsonPayload.lockTime número O tempo para adquirir bloqueios em segundos
jsonPayload.message de string Texto completo da consulta
jsonPayload.queryTime número O tempo de execução da declaração em segundos
jsonPayload.readFirst   número O número de vezes que a primeira entrada num índice foi lida
jsonPayload.readKey   número O número de pedidos para ler uma linha com base numa chave
jsonPayload.readLast   número O número de pedidos para ler a última chave num índice
jsonPayload.readNext   número O número de pedidos para ler a linha seguinte por ordem das chaves
jsonPayload.readPrev   número O número de pedidos para ler a linha anterior por ordem das teclas
jsonPayload.readRnd   número O número de pedidos para ler uma linha com base numa posição fixa
jsonPayload.readRndNext   número O número de pedidos para ler a linha seguinte no ficheiro de dados
jsonPayload.rowsExamined número O número de linhas examinadas pela camada de servidor
jsonPayload.rowsSent número O número de linhas enviadas ao cliente
jsonPayload.sortMergePasses   número O número de passes de união que o algoritmo de ordenação teve de fazer
jsonPayload.sortRangeCount   número O número de ordenações feitas com intervalos
jsonPayload.sortRows   número O número de linhas ordenadas
jsonPayload.sortScanCount   número O número de ordenações que foram feitas através da análise da tabela
jsonPayload.startTime   de string A hora de início da execução da declaração
jsonPayload.tid número ID da discussão onde a consulta foi registada
jsonPayload.user de string O utilizador que executou a consulta
severity string (LogSeverity) Nível de entrada de registo (traduzido).

 Estes campos só são fornecidos se a variável de sistema log_slow_extra estiver definida como 'ON'. Esta variável está disponível a partir do MySQL 8.0.14.

Para informações sobre estes campos, consulte a documentação do MySQL.

Configure a recolha de métricas

Para carregar métricas do MySQL, tem de criar um recetor para as métricas produzidas pelo MySQL e, em seguida, criar um pipeline para o novo recetor.

Este recetor não suporta a utilização de várias instâncias na configuração, por exemplo, para monitorizar vários pontos finais. Todas essas instâncias escrevem na mesma série cronológica e o Cloud Monitoring não tem forma de as distinguir.

Para configurar um destinatário para as suas métricas mysql, especifique os seguintes campos:

Campo Predefinição Descrição
collection_interval 60s Um valor de duração, como 30s ou 5m.
endpoint /var/run/mysqld/mysqld.sock O hostname:port ou o caminho do socket Unix que começa com / usado para estabelecer ligação ao servidor MySQL.
password A palavra-passe usada para estabelecer ligação ao servidor.
type Este valor tem de ser mysql.
username root O nome de utilizador usado para estabelecer ligação ao servidor.

O que é monitorizado

A tabela seguinte apresenta a lista de métricas que o agente de operações recolhe da instância do MySQL.

Tipo de métrica
Tipo, Tipo
Recursos monitorizados
Etiquetas
workload.googleapis.com/mysql.buffer_pool_data_pages
GAUGEINT64
gce_instance
status
workload.googleapis.com/mysql.buffer_pool_limit
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.buffer_pool_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.buffer_pool_page_flushes
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/mysql.buffer_pool_pages
GAUGEDOUBLE
gce_instance
kind
workload.googleapis.com/mysql.buffer_pool_size
GAUGEDOUBLE
gce_instance
kind
workload.googleapis.com/mysql.commands
CUMULATIVEINT64
gce_instance
command
workload.googleapis.com/mysql.double_writes
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.handlers
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.locks
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.log_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.page_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.replica.sql_delay
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.replica.time_behind_source
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.row_locks
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.row_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.sorts
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.threads
GAUGEDOUBLE
gce_instance
kind

Valide a configuração

Esta secção descreve como verificar se configurou corretamente o recetor do MySQL. O agente de operações pode demorar um ou dois minutos a começar a recolher telemetria.

Para verificar se os registos do MySQL estão a ser enviados para o Cloud Logging, faça o seguinte:

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

    Aceda ao Explorador de registos

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.

  2. Introduza a seguinte consulta no editor e, de seguida, clique em Executar consulta:
    resource.type="gce_instance"
    (log_id("mysql_error") OR log_id("mysql_general") OR log_id("mysql_slow"))
    

Para verificar se as métricas do MySQL estão a ser enviadas para o Cloud Monitoring, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Explorador de métricas:

    Aceda ao Metrics Explorer

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Na barra de ferramentas do painel do criador de consultas, selecione o botão cujo nome é  MQL ou  PromQL.
  3. Verifique se a opção PromQL está selecionada no botão Idioma. O botão para alternar o idioma encontra-se na mesma barra de ferramentas que lhe permite formatar a consulta.
  4. Introduza a seguinte consulta no editor e, de seguida, clique em Executar consulta:
    {"workload.googleapis.com/mysql.threads", monitored_resource="gce_instance"}
    

Ver o painel de controlo

Para ver as métricas do MySQL, tem de ter um gráfico ou um painel de controlo configurado. A integração do MySQL inclui um ou mais painéis de controlo para si. Todos os painéis de controlo são instalados automaticamente depois de configurar a integração e o agente de operações começar a recolher dados de métricas.

Também pode ver pré-visualizações estáticas de painéis de controlo sem instalar a integração.

Para ver um painel de controlo instalado, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Painéis de controlo:

    Aceda a Painéis de controlo

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Selecione o separador Lista de painéis de controlo e, de seguida, escolha a categoria Integrações.
  3. Clique no nome do painel de controlo que quer ver.

Se configurou uma integração, mas o painel de controlo não foi instalado, verifique se o agente de operações está em execução. Quando não existem dados de métricas para um gráfico no painel de controlo, a instalação do painel de controlo falha. Depois de o agente de operações começar a recolher métricas, o painel de controlo é instalado para si.

Para ver uma pré-visualização estática do painel de controlo, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Integrações:

    Aceda a Integrações

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Clique no filtro da plataforma de implementação Compute Engine.
  3. Localize a entrada para MySQL e clique em Ver detalhes.
  4. Selecione o separador Painéis de controlo para ver uma pré-visualização estática. Se o painel de controlo estiver instalado, pode navegar até ele clicando em Ver painel de controlo.

Para mais informações acerca dos painéis de controlo no Cloud Monitoring, consulte o artigo Painéis de controlo e gráficos.

Para mais informações sobre como usar a página Integrações, consulte o artigo Gerir integrações.

Instale políticas de alerta

As políticas de alerta indicam ao Cloud Monitoring que lhe envie uma notificação quando ocorrerem condições especificadas. A integração do MySQL inclui uma ou mais políticas de alerta para sua utilização. Pode ver e instalar estas políticas de alerta na página Integrações em Monitorização.

Para ver as descrições das políticas de alerta disponíveis e instalá-las, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Integrações:

    Aceda a Integrações

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Localize a entrada para MySQL e clique em Ver detalhes.
  3. Selecione o separador Alertas. Este separador apresenta descrições das políticas de alerta disponíveis e uma interface para as instalar.
  4. Instale políticas de alerta. As políticas de alerta precisam de saber para onde enviar notificações de que o alerta foi acionado, pelo que requerem informações suas para a instalação. Para instalar políticas de alerta, faça o seguinte:
    1. Na lista de políticas de alerta disponíveis, selecione as que quer instalar.
    2. Na secção Configurar notificações, selecione um ou mais canais de notificação. Tem a opção de desativar a utilização de canais de notificação, mas, se o fizer, as suas políticas de alerta são acionadas silenciosamente. Pode verificar o respetivo estado em Monitorização, mas não recebe notificações.

      Para mais informações sobre os canais de notificação, consulte o artigo Faça a gestão dos canais de notificação.

    3. Clique em Criar políticas.

Para mais informações sobre as políticas de alerta no Cloud Monitoring, consulte o artigo Introdução aos alertas.

Para mais informações sobre como usar a página Integrações, consulte o artigo Gerir integrações.

O que se segue?

Para ver um passo a passo sobre como usar o Ansible para instalar o agente de operações, configurar uma aplicação de terceiros e instalar um painel de controlo de exemplo, consulte o vídeo Instale o agente de operações para resolver problemas de aplicações de terceiros.