Supported OS Linux Mac OS Windows

Versión de la integración14.3.0

Dashboard de MySQL

Información general

La integración de MySQL controla el rendimiento de tus instancias de MySQL. Recopila métricas en relación con el rendimiento, las conexiones, los errores y métricas de InnoDB.

Activa la Monitorización de base de datos (DBM) para obtener información mejorada sobre el rendimiento de las consultas y el estado de la base de datos. Además de la integración estándar, Datadog DBM proporciona métricas a nivel de consulta, snapshots de consultas en tiempo real e históricas, análisis de eventos en espera, carga de la base de datos y planes de explicación de consultas.

Se admiten las versiones 5.6, 5.7 y 8.0 de MySQL, y las versiones 10.5, 10.6, 10.11 y 11.1 de MariaDB.

Configuración

En esta página, se describe la integración estándar del Agent de MySQL. Si buscas el producto de Monitorización de base de datos para MySQL, consulta Monitorización de base de datos de Datadog.

Instalación

El check de MySQL está incluido en el paquete del Datadog Agent . No es necesaria ninguna instalación adicional en tu servidor de MySQL.

Preparar MySQL

Nota: Para instalar la Monitorización de base de datos para MySQL, selecciona tu solución de alojamiento en la documentación de Monitorización de base de datos para obtener instrucciones.

Procede con los siguientes pasos de esta guía solo si vas a instalar únicamente la integración estándar.

En cada servidor MySQL, crea un usuario de base de datos para el Datadog Agent.

Las siguientes instrucciones conceden al Agent permiso para iniciar sesión desde cualquier host mediante datadog@'%'. Puedes restringir al usuario datadog para que sólo pueda iniciar sesión desde el host local mediante datadog@'localhost'. Consulta Añadir cuentas de MySQL, asignar privilegios y eliminar cuentas para obtener más información.

Crea el usuario datadog con el siguiente comando:

mysql> CREATE USER 'datadog'@'%' IDENTIFIED BY '<UNIQUEPASSWORD>';
Query OK, 0 rows affected (0.00 sec)

Comprueba que el usuario se ha creado correctamente mediante los siguientes comandos: sustituye <UNIQUEPASSWORD> por la contraseña que has creado anteriormente:

mysql -u datadog --password=<UNIQUEPASSWORD> -e "show status" | \
grep Uptime && echo -e "\033[0;32mMySQL user - OK\033[0m" || \
echo -e "\033[0;31mCannot connect to MySQL\033[0m"

El Agent necesita algunos privilegios para recopilar métricas. Concede al usuario datadog sólo los siguientes privilegios limitados.

Para las versiones 5.6 y 5.7 de MySQL, concede replication client y establece max_user_connections con el siguiente comando:

mysql> GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'%' WITH MAX_USER_CONNECTIONS 5;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Para MySQL 8.0 o posterior, concede replication client y establece max_user_connections con los siguientes comandos:

mysql> GRANT REPLICATION CLIENT ON *.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'datadog'@'%' WITH MAX_USER_CONNECTIONS 5;
Query OK, 0 rows affected (0.00 sec)

Concede al usuario datadog el privilegio de proceso:

mysql> GRANT PROCESS ON *.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)

Verifica el cliente de replicación. Sustituye <UNIQUEPASSWORD> por la contraseña que creaste anteriormente:

mysql -u datadog --password=<UNIQUEPASSWORD> -e "show slave status" && \
echo -e "\033[0;32mMySQL grant - OK\033[0m" || \
echo -e "\033[0;31mMissing REPLICATION CLIENT grant\033[0m"

Si se activan, las métricas pueden recopilarse de la base de datos performance_schema concediendo un privilegio adicional:

mysql> show databases like 'performance_schema';
+-------------------------------+
| Database (performance_schema) |
+-------------------------------+
| performance_schema            |
+-------------------------------+
1 row in set (0.00 sec)

mysql> GRANT SELECT ON performance_schema.* TO 'datadog'@'%';
Query OK, 0 rows affected (0.00 sec)

Configuración

Sigue las instrucciones a continuación para configurar este check para un Agent que se ejecuta en un host. Para entornos en contenedores, consulta las secciones de Docker, Kubernetes, o ECS.

Nota: Para obtener una lista completa de las opciones de configuración disponibles, consulta el mysql.d/conf.yaml de ejemplo.

Host

Para configurar este check para un Agent que se ejecuta en un host:

Edita el archivo mysql.d/conf.yaml, en la carpeta conf.d/ en la raíz de tu directorio de configuración del Agent para iniciar la recopilación de tus métricas y logs de MySQL.

Para obtener una lista completa de las opciones de configuración disponibles, consulta el mysql.d/conf.yaml de ejemplo.

Recopilación de métricas
  • Añade este bloque de configuración a tu mysql.d/conf.yaml para recopilar tus métricas de MySQL:

    init_config:
    
    instances:
      - host: 127.0.0.1
        username: datadog
        password: "<YOUR_CHOSEN_PASSWORD>" # from the CREATE USER step earlier
        port: "<YOUR_MYSQL_PORT>" # e.g. 3306
        options:
          replication: false
          galera_cluster: true
          extra_status_metrics: true
          extra_innodb_metrics: true
          schema_size_metrics: false
          disable_innodb_metrics: false
    

Nota: Escribe tu contraseña entre comillas simples en caso de que haya un carácter especial.

Para recopilar extra_performance_metrics, tu servidor de MySQL debe tener habilitado performance_schema; de lo contrario, configura extra_performance_metrics en false. Para obtener más información sobre performance_schema, consulta inicio rápido del esquema de rendimiento de MySQL.

Nota: El usuario datadog debe establecerse en la configuración de la integración de MySQL como host: 127.0.0.1 en lugar de localhost. Como alternativa, también puedes utilizar sock.

Reinicia el Agent para empezar a enviar métricas de MySQL a Datadog.

Recopilación de logs

Disponible para el Agent versión 6.0 o posterior

  1. Por defecto, MySQL loguea todo en /var/log/syslog que requiere acceso raíz para la lectura. Para que los logs sean más accesibles, sigue estos pasos:

    • Edita /etc/mysql/conf.d/mysqld_safe_syslog.cnf y elimina o comenta las líneas.

    • Edita /etc/mysql/my.cnf y añade las siguientes líneas para activar los logs de consultas generales, de error y lentas:

        [mysqld_safe]
        log_error = /var/log/mysql/mysql_error.log
      
        [mysqld]
        general_log = on
        general_log_file = /var/log/mysql/mysql.log
        log_error = /var/log/mysql/mysql_error.log
        slow_query_log = on
        slow_query_log_file = /var/log/mysql/mysql_slow.log
        long_query_time = 2
      
    • Guarda el archivo y reinicia MySQL con los siguientes comandos: service mysql restart

    • Asegúrate de que el Agent tiene acceso de lectura al directorio /var/log/mysql y a todos los archivos que contiene. Vuelve a controlar tu configuración de logrotate para asegurarte de que esos archivos se tienen en cuenta y que los permisos se establecen correctamente allí también.

    • En /etc/logrotate.d/mysql-server debería haber algo parecido a:

        /var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql_slow.log {
                daily
                rotate 7
                missingok
                create 644 mysql adm
                Compress
        }
      
  2. La recopilación de logs está desactivada por defecto en el Datadog Agent, actívala en tu archivo datadog.yaml:

    logs_enabled: true
    
  3. Añade este bloque de configuración en tu archivo mysql.d/conf.yaml para empezar a recopilar tus logs de MySQL:

    logs:
      - type: file
        path: "<ERROR_LOG_FILE_PATH>"
        source: mysql
        service: "<SERVICE_NAME>"
    
      - type: file
        path: "<SLOW_QUERY_LOG_FILE_PATH>"
        source: mysql
        service: "<SERVICE_NAME>"
        log_processing_rules:
          - type: multi_line
            name: new_slow_query_log_entry
            pattern: "# Time:"
            # If mysqld was started with `--log-short-format`, use:
            # pattern: "# Query_time:"
            # If using mysql version <5.7, use the following rules instead:
            # - type: multi_line
            #   name: new_slow_query_log_entry
            #   pattern: "# Time|# User@Host"
            # - type: exclude_at_match
            #   name: exclude_timestamp_only_line
            #   pattern: "# Time:"
    
      - type: file
        path: "<GENERAL_LOG_FILE_PATH>"
        source: mysql
        service: "<SERVICE_NAME>"
        # For multiline logs, if they start by the date with the format yyyy-mm-dd uncomment the following processing rule
        # log_processing_rules:
        #   - type: multi_line
        #     name: new_log_start_with_date
        #     pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
        # If the logs start with a date with the format yymmdd but include a timestamp with each new second, rather than with each log, uncomment the following processing rule
        # log_processing_rules:
        #   - type: multi_line
        #     name: new_logs_do_not_always_start_with_timestamp
        #     pattern: \t\t\s*\d+\s+|\d{6}\s+\d{,2}:\d{2}:\d{2}\t\s*\d+\s+
    

    Para conocer todas las opciones de configuración disponibles, incluidas las de métricas personalizadas, consulta el mysql.yaml de ejemplo.

  4. Reinicia el Agent.

Docker

Para configurar este check para un Agent que se ejecuta en un contenedor:

Recopilación de métricas

Establece plantillas de integración de Autodiscovery como etiquetas de Docker en tu contenedor de aplicación:

LABEL "com.datadoghq.ad.check_names"='["mysql"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"server": "%%host%%", "username": "datadog","password": "<UNIQUEPASSWORD>"}]'

Consulta las variables de plantilla de Autodiscovery para obtener más detalles sobre cómo usar <UNIQUEPASSWORD> como una variable de entorno en lugar de una etiqueta (label).

Recopilación de logs

La recopilación de logs está desactivada por defecto en el Datadog Agent. Para activarla, consulta recopilación de logs de Docker.

A continuación, establece integraciones de log como etiquetas de Docker:

LABEL "com.datadoghq.ad.logs"='[{"source":"mysql","service":"mysql"}]'

Kubernetes

Para configurar este check para un Agent que se ejecuta en Kubernetes:

Recopilación de métricas

Establece plantillas de integraciones de Autodiscovery como anotaciones de pod en tu contenedor de aplicación. Alternativamente, puedes configurar plantillas con un archivo, configmap, o almacén de clave-valor.

Anotaciones v1 (para el Datadog Agent v7.36 o anterior)

apiVersion: v1
kind: Pod
metadata:
  name: mysql
  annotations:
    ad.datadoghq.com/mysql.check_names: '["mysql"]'
    ad.datadoghq.com/mysql.init_configs: '[{}]'
    ad.datadoghq.com/mysql.instances: |
      [
        {
          "server": "%%host%%", 
          "username": "datadog",
          "password": "<UNIQUEPASSWORD>"
        }
      ]      
  labels:
    name: mysql
spec:
  containers:
    - name: mysql

Anotaciones v2 (para el Datadog Agent v7.36 o posterior)

apiVersion: v1
kind: Pod
metadata:
  name: mysql
  annotations:
    ad.datadoghq.com/mysql.checks: |
      {
        "mysql": {
          "instances": [
            {
              "server": "%%host%%", 
              "username": "datadog",
              "password": "<UNIQUEPASSWORD>"
            }
          ]
        }
      }      
  labels:
    name: mysql
spec:
  containers:
    - name: mysql

Consulta las variables de plantilla de Autodiscovery para obtener más detalles sobre cómo usar <UNIQUEPASSWORD> como una variable de entorno en lugar de una etiqueta.

Recopilación de logs

La recopilación de logs está desactivada por defecto en el Datadog Agent. Para activarla, consulta Recopilación de logs de Kubernetes.

A continuación, establece integraciones de log como anotaciones del pod. Alternativamente, puedes configurar esto con un archivo, configmap, o almacén de clave-valor.

Anotaciones v1/v2

apiVersion: v1
kind: Pod
metadata:
  name: mysql
  annotations:
    ad.datadoghq.com/mysql.logs: '[{"source": "mysql", "service": "mysql"}]'
  labels:
    name: mysql

ECS

Para configurar este check para un Agent que se ejecuta en ECS:

Recopilación de métricas

Establece las plantillas de integraciones de Autodiscovery como etiquetas de Docker en el contenedor de tu aplicación:

{
  "containerDefinitions": [{
    "name": "mysql",
    "image": "mysql:latest",
    "dockerLabels": {
      "com.datadoghq.ad.check_names": "[\"mysql\"]",
      "com.datadoghq.ad.init_configs": "[{}]",
      "com.datadoghq.ad.instances": "[{\"server\": \"%%host%%\", \"username\": \"datadog\",\"password\": \"<UNIQUEPASSWORD>\"}]"
    }
  }]
}

Consulta las variables de plantilla de Autodiscovery para obtener más detalles sobre cómo usar <UNIQUEPASSWORD> como una variable de entorno en lugar de una etiqueta.

Recopilación de logs

Disponible para el Agent versión 6.0 o posterior

La recopilación de logs está desactivada por defecto en el Datadog Agent. Para activarla, consulta recopilación de logs de ECS.

A continuación, establece integraciones de log como etiquetas de Docker:

{
  "containerDefinitions": [{
    "name": "mysql",
    "image": "mysql:latest",
    "dockerLabels": {
      "com.datadoghq.ad.logs": "[{\"source\":\"mysql\",\"service\":\"mysql\"}]"
    }
  }]
}

Validación

Ejecuta el subcomando de estado del Agent y busca mysql en la sección Checks.

Datos recopilados

Métricas

El check no recopila todas las métricas por defecto. Establece las siguientes opciones de configuración booleanas en true para activar las respectivas métricas:

extra_status_metrics añade las siguientes métricas:

Nombre de la métricaTipo de métrica
mysql.binlog.cache_disk_useGAUGE
mysql.binlog.cache_useGAUGE
mysql.performance.handler_commitRATE
mysql.performance.handler_deleteRATE
mysql.performance.handler_prepareRATE
mysql.performance.handler_read_firstRATE
mysql.performance.handler_read_keyRATE
mysql.performance.handler_read_nextRATE
mysql.performance.handler_read_prevRATE
mysql.performance.handler_read_rndRATE
mysql.performance.handler_read_rnd_nextRATE
mysql.performance.handler_rollbackRATE
mysql.performance.handler_updateRATE
mysql.performance.handler_writeRATE
mysql.performance.opened_tablesRATE
mysql.performance.qcache_total_blocksGAUGE
mysql.performance.qcache_free_blocksGAUGE
mysql.performance.qcache_free_memoryGAUGE
mysql.performance.qcache_not_cachedRATE
mysql.performance.qcache_queries_in_cacheGAUGE
mysql.performance.select_full_joinRATE
mysql.performance.select_full_range_joinRATE
mysql.performance.select_rangeRATE
mysql.performance.select_range_checkRATE
mysql.performance.select_scanRATE
mysql.performance.sort_merge_passesRATE
mysql.performance.sort_rangeRATE
mysql.performance.sort_rowsRATE
mysql.performance.sort_scanRATE
mysql.performance.table_locks_immediateGAUGE
mysql.performance.table_locks_immediate.rateRATE
mysql.performance.threads_cachedGAUGE
mysql.performance.threads_createdMONOTONIC

extra_innodb_metrics añade las siguientes métricas:

Nombre de la métricaTipo de métrica
mysql.innodb.active_transactionsGAUGE
mysql.innodb.buffer_pool_dataGAUGE
mysql.innodb.buffer_pool_pages_dataGAUGE
mysql.innodb.buffer_pool_pages_dirtyGAUGE
mysql.innodb.buffer_pool_pages_flushedRATE
mysql.innodb.buffer_pool_pages_freeGAUGE
mysql.innodb.buffer_pool_pages_totalGAUGE
mysql.innodb.buffer_pool_read_aheadRATE
mysql.innodb.buffer_pool_read_ahead_evictedRATE
mysql.innodb.buffer_pool_read_ahead_rndGAUGE
mysql.innodb.buffer_pool_wait_freeMONOTONIC
mysql.innodb.buffer_pool_write_requestsRATE
mysql.innodb.checkpoint_ageGAUGE
mysql.innodb.current_transactionsGAUGE
mysql.innodb.data_fsyncsRATE
mysql.innodb.data_pending_fsyncsGAUGE
mysql.innodb.data_pending_readsGAUGE
mysql.innodb.data_pending_writesGAUGE
mysql.innodb.data_readRATE
mysql.innodb.data_writtenRATE
mysql.innodb.dblwr_pages_writtenRATE
mysql.innodb.dblwr_writesRATE
mysql.innodb.hash_index_cells_totalGAUGE
mysql.innodb.hash_index_cells_usedGAUGE
mysql.innodb.history_list_lengthGAUGE
mysql.innodb.ibuf_free_listGAUGE
mysql.innodb.ibuf_mergedRATE
mysql.innodb.ibuf_merged_delete_marksRATE
mysql.innodb.ibuf_merged_deletesRATE
mysql.innodb.ibuf_merged_insertsRATE
mysql.innodb.ibuf_mergesRATE
mysql.innodb.ibuf_segment_sizeGAUGE
mysql.innodb.ibuf_sizeGAUGE
mysql.innodb.lock_structsGAUGE
mysql.innodb.locked_tablesGAUGE
mysql.innodb.locked_transactionsGAUGE
mysql.innodb.log_waitsRATE
mysql.innodb.log_write_requestsRATE
mysql.innodb.log_writesRATE
mysql.innodb.lsn_currentRATE
mysql.innodb.lsn_flushedRATE
mysql.innodb.lsn_last_checkpointRATE
mysql.innodb.mem_adaptive_hashGAUGE
mysql.innodb.mem_additional_poolGAUGE
mysql.innodb.mem_dictionaryGAUGE
mysql.innodb.mem_file_systemGAUGE
mysql.innodb.mem_lock_systemGAUGE
mysql.innodb.mem_page_hashGAUGE
mysql.innodb.mem_recovery_systemGAUGE
mysql.innodb.mem_thread_hashGAUGE
mysql.innodb.mem_totalGAUGE
mysql.innodb.os_file_fsyncsRATE
mysql.innodb.os_file_readsRATE
mysql.innodb.os_file_writesRATE
mysql.innodb.os_log_pending_fsyncsGAUGE
mysql.innodb.os_log_pending_writesGAUGE
mysql.innodb.os_log_writtenRATE
mysql.innodb.pages_createdRATE
mysql.innodb.pages_readRATE
mysql.innodb.pages_writtenRATE
mysql.innodb.pending_aio_log_iosGAUGE
mysql.innodb.pending_aio_sync_iosGAUGE
mysql.innodb.pending_buffer_pool_flushesGAUGE
mysql.innodb.pending_checkpoint_writesGAUGE
mysql.innodb.pending_ibuf_aio_readsGAUGE
mysql.innodb.pending_log_flushesGAUGE
mysql.innodb.pending_log_writesGAUGE
mysql.innodb.pending_normal_aio_readsGAUGE
mysql.innodb.pending_normal_aio_writesGAUGE
mysql.innodb.queries_insideGAUGE
mysql.innodb.queries_queuedGAUGE
mysql.innodb.read_viewsGAUGE
mysql.innodb.rows_deletedRATE
mysql.innodb.rows_insertedRATE
mysql.innodb.rows_readRATE
mysql.innodb.rows_updatedRATE
mysql.innodb.s_lock_os_waitsRATE
mysql.innodb.s_lock_spin_roundsRATE
mysql.innodb.s_lock_spin_waitsRATE
mysql.innodb.semaphore_wait_timeGAUGE
mysql.innodb.semaphore_waitsGAUGE
mysql.innodb.tables_in_useGAUGE
mysql.innodb.x_lock_os_waitsRATE
mysql.innodb.x_lock_spin_roundsRATE
mysql.innodb.x_lock_spin_waitsRATE

extra_performance_metrics añade las siguientes métricas:

Nombre de la métricaTipo de métrica
mysql.performance.query_run_time.avgGAUGE
mysql.performance.digest_95th_percentile.avg_usGAUGE

schema_size_metrics añade las siguientes métricas:

Nombre de la métricaTipo de métrica
mysql.info.schema.sizeGAUGE

Eventos

El check de MySQL no incluye eventos.

Checks de servicio

Solucionar problemas

Referencias adicionales

Más enlaces, artículos y documentación útiles:

PREVIEWING: may/embedded-workflows