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
|
|
GAUGE , DOUBLE gce_instance |
kind
|
workload.googleapis.com/mysql.buffer_pool_size
|
|
GAUGE , DOUBLE gce_instance |
kind
|
workload.googleapis.com/mysql.commands
|
|
CUMULATIVE , INT64 gce_instance |
command
|
workload.googleapis.com/mysql.double_writes
|
|
CUMULATIVE , INT64 gce_instance |
kind
|
workload.googleapis.com/mysql.handlers
|
|
CUMULATIVE , INT64 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
|
|
CUMULATIVE , INT64 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
|
|
CUMULATIVE , INT64 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