MySQL

A integração do MySQL coleta métricas de desempenho relacionadas ao InnoDB, ao pool de buffers e a várias outras operações. Ele também coleta registros gerais, de erro e de consulta lenta e os analisa em um payload JSON. Os registros de erros são analisados para o código de erro e o subsistema. Os registros de consulta lenta são analisados em pares de chave-valor que descrevem o desempenho de uma consulta, incluindo o tempo e as linhas examinadas.

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

Pré-requisitos

Para coletar a telemetria do MySQL, instale o Agente de operações:

  • Para métricas, instale a versão 2.32.0 ou mais recente.
  • Para registros, instale a versão 2.5.0 ou mais recente.

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

Configurar a instância do MySQL

Por padrão, o receptor mysql se conecta a um servidor MySQL local usando um soquete Unix e a autenticação Unix como usuário root.

Configure o agente de operações para MySQL

Seguindo o guia para Configurar o agente de operações, adicione os elementos necessários para coletar a telemetria das instâncias do MySQL e reinicie o agente.

Exemplo de configuração

Os comandos a seguir criam a configuração para coletar e ingerir telemetria para o MySQL e reinicia o agente de operações.

# Configures Ops Agent to collect telemetry from the app and restart Ops Agent.

set -e

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

sudo service google-cloud-ops-agent restart
sleep 60

Configurar a coleta de registros

Para ingerir logs do MySQL, crie um receptor para os logs produzidos pelo MySQL e, em seguida, crie um pipeline para o novo receptor.

mysql_errorPara configurar um receptor para os registros , especifique os seguintes campos:

Campo Padrão Descrição
exclude_paths Uma lista de padrões de caminho do sistema de arquivos a serem excluídos 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 arquivos a serem lidos acompanhando cada arquivo. Um caractere curinga (*) pode ser usado nos caminhos. por exemplo, /var/log/mysql/*.log.
record_log_file_path false Se definido como true, o caminho para o arquivo específico de que a gravação de registro foi recebida aparecerá na entrada de registro de saída como o valor do rótulo agent.googleapis.com/log_file_path. Ao usar um caractere curinga, apenas o caminho do arquivo de que o registro foi recebido é gravado.
type Este valor precisa ser mysql_error.
wildcard_refresh_interval 60s O intervalo em que os caminhos de arquivos curinga no include_paths são atualizados. Dado como uma duração de tempo, por exemplo, 30s ou 2m. Essa propriedade pode ser útil com capacidades de registro altas em que os arquivos de registro são alternados mais rapidamente do que o intervalo padrão.

mysql_generalPara configurar um receptor para os registros , especifique os seguintes campos:

Campo Padrão Descrição
exclude_paths Uma lista de padrões de caminho do sistema de arquivos a serem excluídos do conjunto correspondente a include_paths.
include_paths [/var/lib/mysql/${HOSTNAME}.log] Uma lista de caminhos do sistema de arquivos a serem lidos acompanhando cada arquivo. Um caractere curinga (*) pode ser usado nos caminhos.
record_log_file_path false Se definido como true, o caminho para o arquivo específico de que a gravação de registro foi recebida aparecerá na entrada de registro de saída como o valor do identificador agent.googleapis.com/log_file_path. Ao usar um caractere curinga, apenas o caminho do arquivo de que o registro foi recebido é gravado.
type Este valor precisa ser mysql_general.
wildcard_refresh_interval 60s O intervalo em que os caminhos de arquivos curinga no include_paths são atualizados. Dado como uma duração de tempo, por exemplo, 30s ou 2m. Essa propriedade pode ser útil com capacidades de registro altas em que os arquivos de registro são alternados mais rapidamente do que o intervalo padrão.

mysql_slowPara configurar um receptor para os registros , especifique os seguintes campos:

Campo Padrão Descrição
exclude_paths Uma lista de padrões de caminho do sistema de arquivos a serem excluídos do conjunto correspondente a include_paths.
include_paths [/var/lib/mysql/${HOSTNAME}-slow.log] Uma lista de caminhos do sistema de arquivos a serem lidos acompanhando cada arquivo. Um caractere curinga (*) pode ser usado nos caminhos.
record_log_file_path false Se definido como true, o caminho para o arquivo específico de que a gravação de registro foi recebida aparecerá na entrada de registro de saída como o valor do identificador agent.googleapis.com/log_file_path. Ao usar um caractere curinga, apenas o caminho do arquivo de que o registro foi recebido é gravado.
type Este valor precisa ser mysql_slow.
wildcard_refresh_interval 60s O intervalo em que os caminhos de arquivos curinga no include_paths são atualizados. Dado como uma duração de tempo, por exemplo, 30s ou 2m. Essa propriedade pode ser útil com capacidades de registro altas em que os arquivos de registro são alternados mais rapidamente do que o intervalo padrão.

O que é registrado

O logName é derivado dos IDs do receptor especificados na configuração. Os campos detalhados dentro de LogEntry são os seguintes.

Os registros mysql_error contêm os seguintes campos no LogEntry:

Campo Tipo Descrição
jsonPayload.errorCode string Código de erro do MySQL associado ao registro
jsonPayload.level string Nível de entrada de registro
jsonPayload.message string Mensagem de registro
jsonPayload.subsystem string Subsistema MySQL onde o registro foi originado
jsonPayload.tid número ID da linha de execução em que o registro foi originado
severity string (LogSeverity) Nível de entrada de registro (traduzido).

Os registros mysql_general contêm os seguintes campos no LogEntry:

Campo Tipo Descrição
jsonPayload.command string Tipo de ação do banco de dados que está sendo registrada
jsonPayload.message string Registro da ação do banco de dados
jsonPayload.tid número ID da linha de execução em que o registro foi originado
severity string (LogSeverity) Nível de entrada de registro (traduzido).

Os registros mysql_slow contêm os seguintes campos no 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 para todos os clientes
jsonPayload.createdTmpDiskTables   número O número de tabelas temporárias em disco internas criadas pelo servidor
jsonPayload.createdTmpTables   número O número de tabelas temporárias internas criadas pelo servidor
jsonPayload.database string Banco de dados em que a consulta foi executada
jsonPayload.endTime   string O horário de término da execução da instrução
jsonPayload.errorNumber   número O número do erro na instrução ou 0 se nenhum erro ocorreu
jsonPayload.host string Host da instância do banco de dados
jsonPayload.ipAddress string Endereço da instância do banco de dados
jsonPayload.killed   número Se a instrução foi encerrada, o número do erro indicando o motivo ou 0 se ela foi encerrada normalmente
jsonPayload.level string Nível de entrada de registro
jsonPayload.lockTime número O tempo para adquirir bloqueios em segundos
jsonPayload.message string Texto completo da consulta
jsonPayload.queryTime número O tempo de execução da instrução em segundos
jsonPayload.readFirst   número O número de vezes que a primeira entrada em um índice foi lida
jsonPayload.readKey   número O número de solicitações para ler uma linha com base em uma chave
jsonPayload.readLast   número O número de solicitações para ler a última chave em um índice
jsonPayload.readNext   número O número de solicitações para ler a próxima linha na ordem de chaves
jsonPayload.readPrev   número O número de solicitações para ler a linha anterior na ordem de chaves
jsonPayload.readRnd   número O número de solicitações para ler uma linha com base em uma posição fixa
jsonPayload.readRndNext   número O número de solicitações para ler a próxima linha no arquivo de dados
jsonPayload.rowsExamined número O número de linhas examinadas pela camada do servidor
jsonPayload.rowsSent número O número de linhas enviadas para o cliente
jsonPayload.sortMergePasses   número Número de passes de mesclagem que o algoritmo de classificação teve de fazer
jsonPayload.sortRangeCount   número O número de classificações feitas usando intervalos
jsonPayload.sortRows   número O número de linhas classificadas
jsonPayload.sortScanCount   número O número de classificações que foram realizadas verificando a tabela
jsonPayload.startTime   string Horário de início da execução da instrução
jsonPayload.tid número ID da linha de execução em que a consulta foi registrada
jsonPayload.user string Usuário que executou a consulta
severity string (LogSeverity) Nível de entrada de registro (traduzido).

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

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

Configurar a coleta de métricas

Para ingerir métricas da MySQL, crie um receptor para as métricas que a MySQL produz e crie um pipeline para o novo receptor.

Esse receptor não aceita o uso de várias instâncias na configuração, por exemplo, para monitorar vários endpoints. Todas essas instâncias gravam na mesma série temporal, e o Cloud Monitoring não tem como diferenciá-las.

Para configurar um receptor para suas métricas do mysql, especifique os campos a seguir:

Campo Padrão Descrição
collection_interval 60s Um valor de time.Duration, como 30s ou 5m.
endpoint /var/run/mysqld/mysqld.sock O caminho do soquete hostname:port ou Unix que começa com / usado para se conectar ao servidor MySQL.
password A senha usada para se conectar ao servidor.
type Este valor precisa ser mysql.
username root O nome de usuário usado para se conectar ao servidor.

O que é monitorado?

A tabela a seguir fornece a lista de métricas que o agente de operações coleta da instância do MySQL.

Tipo de métrica 
Tipo, tipo
Recursos monitorados
Rótulos
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

Verificar a configuração

Nesta seção, descrevemos como verificar se você configurou corretamente o receptor do MySQL. Pode levar um ou dois minutos para que o agente de operações comece a coletar telemetria.

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

  1. No console do Google Cloud, acesse a página do Análise de registros.

    Acessar a Análise de registros

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Geração de registros.

  2. Digite a consulta a seguir no Editor e 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 sendo enviadas para o Cloud Monitoring, faça o seguinte:

  1. No Console do Google Cloud, acesse a página do  Metrics Explorer:

    Acesse o Metrics explorer

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.

  2. Na barra de ferramentas do painel do criador de consultas, selecione o botão  MQL ou  PromQL.
  3. Verifique se MQL está selecionado na opção de ativar/desativar MQL. A alternância de idiomas está na mesma barra de ferramentas que permite formatar sua consulta.
  4. Digite a consulta a seguir no Editor e clique em Executar consulta:
    fetch gce_instance
    | metric 'workload.googleapis.com/mysql.threads'
    | every 1m
    

Ver painel

Para visualizar as métricas do MySQL, é necessário ter um gráfico ou um painel configurado. A integração do MySQL inclui um ou mais painéis para você. Todos os painéis são instalados automaticamente depois que você configura a integração e o Agente de operações começa a coletar dados de métricas.

Também é possível ver visualizações estáticas de painéis sem instalar a integração.

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

  1. No console do Google Cloud, acesse a página  Painéis:

    Ir para Painéis

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.

  2. Selecione a guia Lista de painéis e escolha a categoria Integrações.
  3. Clique no nome do painel que você quer visualizar.

Se você configurou uma integração, mas o painel não foi instalado, verifique se o agente de operações está em execução. Quando não há dados de métricas para um gráfico no painel, a instalação do painel falha. Depois que o Agente de operações começar a coletar métricas, o painel será instalado para você.

Para acessar uma visualização estática do painel, faça o seguinte:

  1. No console do Google Cloud, acesse a página  Integrações:

    Acessar Integrações

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.

  2. Clique no filtro de plataforma de implantação do Compute Engine.
  3. Localize a entrada do MySQL e clique em Ver detalhes.
  4. Selecione a guia Painéis para uma visualização estática. Se o painel estiver instalado, navegue até ele clicando em Ver painel.

Para mais informações sobre painéis no Cloud Monitoring, consulte Painéis e gráficos.

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

Instalar políticas de alertas

As políticas de alertas orientam o Cloud Monitoring a notificar você quando ocorrerem condições especificadas. A integração do MySQL inclui uma ou mais políticas de alertas para você usar. É possível ver e instalar essas políticas de alertas na página Integrações no Monitoring.

Para visualizar e descrever as descrições de políticas de alertas disponíveis, faça o seguinte:

  1. No console do Google Cloud, acesse a página  Integrações:

    Acessar Integrações

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoramento.

  2. Localize a entrada do MySQL e clique em Ver detalhes.
  3. Selecione a guia Alertas. Essa guia apresenta descrições das políticas de alertas disponíveis e mostra uma interface para instalá-las.
  4. Instalar políticas de alertas. As políticas de alertas precisam saber para onde enviar as notificações de que o alerta foi acionado. Portanto, elas exigem informações para instalação. Para instalar políticas de alertas, faça o seguinte:
    1. Na lista de políticas de alertas disponíveis, selecione aquelas que você quer instalar.
    2. Na seção Configurar notificações, selecione um ou mais canais de notificação. Você pode desativar o uso dos canais de notificação, mas, se isso acontecer, as políticas de alertas vão ser disparadas silenciosamente. É possível verificar o status no Monitoring, mas não receber notificações.

      Para saber mais sobre canais de notificação, consulte Gerenciar canais de notificação.

    3. Clique em Criar políticas.

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

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

A seguir

Para ver um tutorial sobre como usar o Ansible para instalar o agente de operações, configurar um aplicativo de terceiros e instalar um painel de amostra, consulte o vídeo Instalação do agente de operações para resolver problemas de aplicativos de terceiros.