MySQL

L'integrazione MySQL raccoglie le metriche sulle prestazioni relative a InnoDB, il pool di buffer e varie altre operazioni. Raccoglie anche log generali, di errore e di query lenti e li analizza in un payload JSON. I log degli errori vengono analizzati per il codice e il sottosistema degli errori. I log delle query lente vengono analizzati in coppie chiave-valore che descrivono le prestazioni di una query, inclusi il tempo e le righe esaminate.

Per ulteriori informazioni su MySQL, consulta mysql.com.

Prerequisiti

Per raccogliere la telemetria MySQL, devi installare l'agente operativo 2.8.0 o versioni successive.

Questo ricevitore supporta le versioni di MySQL 5.7 e 8.0.

Configura la tua istanza MySQL

Il destinatario mysql si connette per impostazione predefinita a un server MySQL locale utilizzando un socket Unix e l'autenticazione Unix come utente root.

Configurazione dell'agente operativo per MySQL

Segui la guida per configurare l'agente operativo, aggiungi gli elementi necessari per raccogliere log e metriche dalle istanze MySQL e riavvia l'agente.

Configurazione di esempio

Il comando seguente crea il file di configurazione per raccogliere e importare log e metriche per MySQL e riavvia l'agente operativo su Linux.

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
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
metrics:
  receivers:
    mysql:
      type: mysql
  service:
    pipelines:
      mysql:
        receivers:
          - mysql
EOF
sudo service google-cloud-ops-agent restart

Per connetterti all'istanza MySQL utilizzando una connessione TCP con un nome utente e una password, specifica il nome utente e la password nel ricevitore delle metriche. Ad esempio:

metrics:
  receivers:
    mysql:
      type: mysql
      endpoint: localhost:3306
      password: pwd
      username: usr
  service:
    pipelines:
      mysql:
        receivers:
          - mysql

Configura la raccolta dei log

Per importare i log da MySQL, devi creare ricevitori per i log prodotti da MySQL e quindi creare una pipeline per i nuovi destinatari.

Per configurare un ricevitore per i log mysql_error, specifica i seguenti campi:

Campo predefinita Descrizione
type Questo valore deve essere mysql_error.
include_paths [/var/log/mysqld.log, /var/log/mysql/mysqld.log, /var/log/mysql/error.log] Un elenco di percorsi di filesystem da leggere mettendo in coda ogni file. Nei percorsi è possibile utilizzare un carattere jolly (*), ad esempio /var/log/mysql/*.log.
exclude_paths [] Un elenco di pattern di file system da escludere dall'insieme corrispondente da include_paths.
wildcard_refresh_interval 60s L'intervallo a cui vengono aggiornati i percorsi dei file con caratteri jolly in include_paths. È indicato come durata, ad esempio 30s o 2m. Questa proprietà potrebbe essere utile in presenza di velocità effettiva di logging elevate, in cui i file di log vengono ruotati più rapidamente rispetto all'intervallo predefinito.


Per configurare un ricevitore per i log mysql_general, specifica i seguenti campi:

Campo predefinita Descrizione
type Questo valore deve essere mysql_general.
include_paths [/var/lib/mysql/${HOSTNAME}.log] I file di log da leggere.
exclude_paths [] Un elenco di pattern di file system da escludere dall'insieme corrispondente da include_paths.
wildcard_refresh_interval 60s L'intervallo a cui vengono aggiornati i percorsi dei file con caratteri jolly in include_paths. È indicato come durata, ad esempio 30s o 2m. Questa proprietà potrebbe essere utile in presenza di velocità effettiva di logging elevate, in cui i file di log vengono ruotati più rapidamente rispetto all'intervallo predefinito.


Per configurare un ricevitore per i log mysql_slow, specifica i seguenti campi:

Campo predefinita Descrizione
type Questo valore deve essere mysql_slow.
include_paths [/var/lib/mysql/${HOSTNAME}-slow.log] I file di log da leggere.
exclude_paths [] Un elenco di pattern di file system da escludere dall'insieme corrispondente da include_paths.
wildcard_refresh_interval 60s L'intervallo a cui vengono aggiornati i percorsi dei file con caratteri jolly in include_paths. È indicato come durata, ad esempio 30s o 2m. Questa proprietà potrebbe essere utile in presenza di velocità effettiva di logging elevate, in cui i file di log vengono ruotati più rapidamente rispetto all'intervallo predefinito.

Che cosa viene registrato

Il logName dei log mysql_error, mysql_general e mysql_slow è derivato dagli ID destinatario specificati nella configurazione.

A seconda della versione di MySQL, i log mysql_error potrebbero contenere i seguenti campi all'interno di LogEntry:

Campo Tipo Descrizione
jsonPayload.level string Livello di voce di log
jsonPayload.tid number ID thread da cui ha origine il log
jsonPayload.errorCode string Codice di errore MySQL associato al log
jsonPayload.subsystem string Sottosistema MySQL in cui ha avuto origine il log
jsonPayload.message string Messaggio di log
severity stringa (LogSeverity) Livello di voce di log (tradotto)
timestamp stringa (Timestamp) Ora in cui è stata ricevuta la richiesta

I campi vuoti o mancanti non verranno inclusi nella voce di log.


I log mysql_general contengono i seguenti campi in LogEntry:

Campo Tipo Descrizione
jsonPayload.tid number ID thread da cui ha origine il log
jsonPayload.command string Tipo di azione del database registrata nel log
jsonPayload.message string Log dell'azione del database
timestamp stringa (Timestamp) L'ora in cui la voce è stata registrata


I log mysql_slow contengono i seguenti campi in LogEntry:

Campo Tipo Descrizione
jsonPayload.user string Utente che ha eseguito la query
jsonPayload.database string Database in cui è stata eseguita la query
jsonPayload.host string Host dell'istanza di database
jsonPayload.ipAddress string Indirizzo dell'istanza di database
jsonPayload.tid number ID thread in cui è stata registrata la query
jsonPayload.queryTime number Il tempo di esecuzione delle istruzioni in secondi
jsonPayload.lockTime number Il tempo necessario per acquisire serrature in pochi secondi
jsonPayload.rowsSent number Il numero di righe inviate al client
jsonPayload.rowsExamined number Il numero di righe esaminate dal livello del server
jsonPayload.errorNumber number Il numero di errore dell'istruzione o 0 se non si è verificato alcun errore
jsonPayload.killed number Se l'istruzione è stata chiusa, il numero di errore che indica il motivo oppure 0 se l'istruzione è stata chiusa normalmente.
jsonPayload.bytesReceived number Il numero di byte ricevuti da tutti i client
jsonPayload.bytesSent number Il numero di byte inviati a tutti i client
jsonPayload.readFirst number Il numero di volte in cui è stata letta la prima voce di un indice
jsonPayload.readLast number Il numero di richieste di lettura dell'ultima chiave di un indice
jsonPayload.readKey number Il numero di richieste di lettura di una riga in base a una chiave
jsonPayload.readNext number Il numero di richieste di lettura della riga successiva in ordine chiave
jsonPayload.readPrev number Il numero di richieste di lettura della riga precedente in ordine di chiavi
jsonPayload.readRnd number Il numero di richieste di lettura di una riga in base a una posizione fissa
jsonPayload.readRndNext number Il numero di richieste di lettura della riga successiva del file di dati
jsonPayload.sortMergePasses number Il numero di pass di unione che l'algoritmo di ordinamento ha dovuto eseguire.
jsonPayload.sortRangeCount number Il numero di ordinamenti effettuati utilizzando gli intervalli
jsonPayload.sortRows number Numero di righe ordinate
jsonPayload.sortScanCount number Il numero di ordinazioni eseguite eseguendo la scansione della tabella
jsonPayload.createdTmpDiskTables number Il numero di tabelle temporanee interne sul disco create dal server
jsonPayload.createdTmpTables number Il numero di tabelle temporanee interne create dal server
jsonPayload.startTime string Ora di inizio dell'esecuzione dell'istruzione
jsonPayload.endTime string Ora di fine dell'esecuzione dell'istruzione
jsonPayload.message string Testo completo della query
timestamp stringa (Timestamp) L'ora in cui la voce è stata registrata

Questi campi sono forniti solo se la variabile di sistema log_slow_extra è impostata su 'ON'. Questa variabile è disponibile a partire da MySQL 8.0.14.

Per informazioni su questi campi, consulta la documentazione di MySQL.

Configurazione della raccolta di metriche

Per raccogliere metriche da MySQL, devi creare un ricevitore per le metriche MySQL, quindi creare una pipeline per il nuovo destinatario. Per configurare un ricevitore per le metriche MySQL, specifica i seguenti campi:

Campo predefinita Descrizione
type Il valore deve essere mysql.
endpoint localhost:3306 L'URL esposto da MySQL.
collection_interval 60s Un valore time.Duration, ad esempio 30s o 5m.
username root Il nome utente utilizzato per la connessione al server.
password La password utilizzata per la connessione al server.

Che cosa viene monitorato

La seguente tabella fornisce l'elenco delle metriche che l'agente operativo raccoglie dall'istanza MySQL.

Tipo di metrica
Tipo, tipo
Risorse monitorate
Etichette
workload.googleapis.com/mysql.buffer_pool_operations
CUMULATIVE, INT64
gce_instance
operation
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
CUMULATIVE, INT64
gce_instance
kind
workload.googleapis.com/mysql.log_operations
CUMULATIVE, INT64
gce_instance
operation
workload.googleapis.com/mysql.operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.page_operations
CUMULATIVE, INT64
gce_instance
operation
workload.googleapis.com/mysql.row_locks
CUMULATIVE, INT64
gce_instance
kind
workload.googleapis.com/mysql.row_operations
CUMULATIVE, INT64
gce_instance
operation
workload.googleapis.com/mysql.sorts
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.threads
GAUGE, DOUBLE
gce_instance
kind

Dashboard di esempio

Puoi visualizzare le metriche di questa integrazione utilizzando una dashboard di Cloud Monitoring di esempio. Completa le procedure di installazione di dashboard di esempio per importare la dashboard Panoramica di GCE MySQL dalla libreria di esempio e visualizza i grafici che mostrano le metriche MySQL.

Verificare la configurazione

Puoi utilizzare Esplora log e Esplora metriche per verificare di aver configurato correttamente il ricevitore MySQL. L'avvio della raccolta di log e metriche da parte dell'agente operativo potrebbe richiedere uno o due minuti.

Per verificare l'importazione dei log, vai a Esplora log ed esegui la query seguente per visualizzare i log MySQL:

resource.type="gce_instance"
logName=("projects/PROJECT_ID/logs/mysql_error" OR "projects/PROJECT_ID/logs/mysql_general" OR "projects/PROJECT_ID/logs/mysql_slow")


Per verificare l'importazione delle metriche, accedi a Metrics Explorer ed esegui la query seguente nella scheda MQL.

fetch gce_instance
| metric 'workload.googleapis.com/mysql.commands'
| align rate(1m)
| every 1m

Passaggi successivi

Per una panoramica su come utilizzare Ansible per installare l'agente operativo, configurare un'applicazione di terze parti e installare una dashboard di esempio, guarda il video dedicato a l'agente operativo per risolvere i problemi delle applicazioni di terze parti.