Configuración de la Monitorización de base de datos para MySQL gestionado por Aurora

La Monitorización de base de datos proporciona una amplia visibilidad de tus bases de datos MySQL mediante la exposición de métricas de consultas, ejemplos de consultas, planes de explicación, datos de conexión, métricas de sistemas y telemetría para el motor de almacenamiento InnoDB.

El Agent recopila telemetría directamente de la base de datos iniciando sesión como usuario de sólo lectura. Realiza la siguiente configuración para habilitar la Monitorización de base de datos con tu base de datos MySQL:

  1. Configura parámetros de bases de datos.
  2. Concede al Agent acceso a la base de datos.
  3. Instala y configura el Agent.
  4. Instala la integración RDS.

Antes de empezar

Versiones de MySQL compatibles
5.6, 5.7 y 8.0 o posteriores
Versiones compatibles del Agent
7.36.1 o posterior
Impacto del rendimiento
el valor predeterminado de configuración del Agent para la Monitorización de base de datos es conservador, pero puedes ajustar parámetros como el intervalo de recopilación y la frecuencia de muestreo de consultas para que se adapten mejor a tus necesidades. Para la mayoría de las cargas de trabajo, el Agent representa menos del uno por ciento del tiempo de ejecución de consultas en la base de datos y menos del uno por ciento de la CPU.

La Monitorización de base de datos se ejecuta como integración sobre el Agent base (ver valores de referencia).
Proxies, equilibradores de carga y agrupadores de conexiones
El Datadog Agent debe conectarse directamente al host que se está monitorizando, preferentemente mediante el endpoint de instancia. El Agent no debe conectarse a la base de datos a través de un proxy, equilibrador de carga o agrupador de conexiones, o el endpoint del clúster de Aurora. Si el Agent se conecta al endpoint del clúster, recopila datos de una réplica aleatoria y solo proporciona una visibilidad de esa réplica. Si el Agent se conecta a diferentes hosts mientras se ejecuta (como en el caso de la conmutación por error, el equilibrio de carga, etc.), calcula la diferencia en las estadísticas entre dos hosts, lo que produce inexactitudes en las métricas.
Consideraciones sobre la seguridad de los datos
para saber qué datos recopila el Agent de tus bases de datos y cómo garantizar su seguridad, consulta Información confidencial.

Configuración de parámetros de MySQL

Configura lo siguiente en el grupo de parámetros del clúster de base de datos y, a continuación, reinicia el servidor para que los ajustes surtan efecto:

ParámetrosValorDescripción
performance_schema1Obligatorio. Activa el Esquema de rendimiento.
performance_schema_consumer_events_statements_current1Obligatorio. Activa la monitorización de consultas actualmente en ejecución.
performance-schema-consumer-events-waits-currentONObligatorio. Activa la recopilación de eventos de espera.
performance_schema_consumer_events_statements_history1Opcional. Activa el seguimiento del historial de consulta reciente por subproceso. Si se activa, aumenta la probabilidad de capturar detalles de ejecución desde consultas poco frecuentes.
performance_schema_consumer_events_statements_history_long1Opcional. Activa el seguimiento de un número más grande de consultas recientes en todos los subprocesos. Si se activa, aumenta la probabilidad de capturar detalles de ejecución desde consultas poco frecuentes.
ParámetroValorDescripción
performance_schema1Obligatorio. Activa el Esquema de rendimiento.
performance_schema_consumer_events_statements_current1Obligatorio. Activa la monitorización de consultas actualmente en ejecución.
performance-schema-consumer-events-waits-currentONObligatorio. Activa la recopilación de eventos de espera.
performance_schema_consumer_events_statements_history1Opcional. Activa el seguimiento del historial de consulta reciente por subproceso. Si se activa, aumenta la probabilidad de capturar detalles de ejecución desde consultas poco frecuentes.
performance_schema_consumer_events_statements_history_long1Opcional. Activa el seguimiento del historial de consulta reciente por subproceso. Si se activa, aumenta la probabilidad de capturar detalles de ejecución desde consultas poco frecuentes.
performance_schema_max_digest_length4096Aumenta el tamaño del texto de compendio SQL en las tablas events_statements_*. Si se deja el valor por defecto, las consultas más largas que 1024 caracteres no se recopilarán.
performance_schema_max_sql_text_length4096Debe coincidir con performance_schema_max_digest_length.

Nota: Una práctica recomendada es permitir que el Agent habilite la configuración de performance-schema-consumer-* dinámicamente en el tiempo de ejecución, como parte de la concesión de acceso al Agent. Consulta Consumidores de configuración de tiempo de ejecución.

Conceder acceso al Agent

El Datadog Agent requiere acceso de solo lectura a la base de datos para poder recopilar estadísticas y realizar consultas.

Las siguientes instrucciones conceden permiso al Agent para iniciar sesión desde cualquier host con datadog@'%'. Puedes restringir al usuario datadog para que solo pueda iniciar sesión desde el host local usando datadog@'localhost'. Consulta la documentación de MySQL para obtener más información.

Crea el usuario datadog y concédele permisos básicos:

CREATE USER datadog@'%' IDENTIFIED BY '<UNIQUEPASSWORD>';
GRANT REPLICATION CLIENT ON *.* TO datadog@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT PROCESS ON *.* TO datadog@'%';
GRANT SELECT ON performance_schema.* TO datadog@'%';

Crea el usuario datadog y concédele permisos básicos:

CREATE USER datadog@'%' IDENTIFIED by '<UNIQUEPASSWORD>';
ALTER USER datadog@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT REPLICATION CLIENT ON *.* TO datadog@'%';
GRANT PROCESS ON *.* TO datadog@'%';
GRANT SELECT ON performance_schema.* TO datadog@'%';

Crea el siguiente esquema:

CREATE SCHEMA IF NOT EXISTS datadog;
GRANT EXECUTE ON datadog.* to datadog@'%';
GRANT CREATE TEMPORARY TABLES ON datadog.* TO datadog@'%';

Crea el procedimiento explain_statement para que el Agent pueda recopilar los planes de explicación:

DELIMITER $$
CREATE PROCEDURE datadog.explain_statement(IN query TEXT)
    SQL SECURITY DEFINER
BEGIN
    SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
    PREPARE stmt FROM @explain;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

Además, crea este procedimiento en cada esquema del que desees recopilar planes de explicación. Sustituye <YOUR_SCHEMA> por el esquema de tu base de datos:

DELIMITER $$
CREATE PROCEDURE <YOUR_SCHEMA>.explain_statement(IN query TEXT)
    SQL SECURITY DEFINER
BEGIN
    SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
    PREPARE stmt FROM @explain;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE <YOUR_SCHEMA>.explain_statement TO datadog@'%';

Consumidores de configuración en tiempo de ejecución

Datadog recomienda crear el siguiente procedimiento para que el Agent pueda habilitar los consumidores de performance_schema.events_* en tiempo de ejecución.

DELIMITER $$
CREATE PROCEDURE datadog.enable_events_statements_consumers()
    SQL SECURITY DEFINER
BEGIN
    UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
    UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE datadog.enable_events_statements_consumers TO datadog@'%';

Instalación y configuración del Agent

Para monitorizar hosts de Aurora, instala el Datadog Agent en tu infraestructura y configúralo para conectarse a cada endpoint de instancia de forma remota. El Agent no necesita ejecutarse en la base de datos, sólo necesita conectarse a ella. Para conocer otros métodos de instalación del Agent no mencionados aquí, consulta las instrucciones de instalación del Agent.

Configuración de Autodiscovery (recomendada)

El Datadog Agent admite la detección automática de todos los endpoints de Aurora en un clúster. A menos que quieras diferentes configuraciones para diferentes instancias o que quieras encontrar y listar los endpoints de Aurora manualmente, consulta las instrucciones de configuración de Autodiscovery para clústeres de bases de datos de Aurora, en lugar de la sección de configuración manual que se muestra a continuación.

Configuración manual

Para configurar este check para un Agent que se ejecuta en un host, por ejemplo, cuando se aprovisiona una pequeña instancia de EC2 para que el Agent recopile de la base de datos de Aurora:

Edita el archivo mysql.d/conf.yaml, en la carpeta conf.d/ en la raíz del directorio de configuración de tu Agent. Ve el ejemplo mysql.d/conf.yaml para todas las opciones disponibles de configuración, incluidas las de métricas personalizadas.

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

init_config:

instances:
  - dbm: true
    host: '<AWS_INSTANCE_ENDPOINT>'
    port: 3306
    username: datadog
    password: '<YOUR_CHOSEN_PASSWORD>' # desde el paso CREATE USER (crear usuario) anterior

    # Después de añadir tu proyecto e instancia, configura la integración de Datadog AWS para extraer datos de nube adicionales, como CPU y Memoria.
    aws:
      instance_endpoint: '<AWS_INSTANCE_ENDPOINT>'
Importante: Utiliza aquí el endpoint de la instancia de Aurora, no el endpoint del clúster.

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

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

Para configurar el Agent de la Monitorización de base de datos que se ejecuta en un contenedor de Docker, como en ECS o en Fargate, puedes definir las plantillas de integración Autodiscovery como etiquetas (labels) de Docker en tu contenedor del Agent.

Nota: El Agent debe tener permiso de lectura en el socket de Docker para que las etiquetas (labels) de Autodiscovery funcionen.

Línea de comandos

Ponte en marcha rápidamente con el siguiente comando para ejecutar el Agent desde tu línea de comandos. Sustituye los valores para que coincidan con tu cuenta y tu entorno:

export DD_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export DD_AGENT_VERSION=7.36.1

docker run -e "DD_API_KEY=${DD_API_KEY}" \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -l com.datadoghq.ad.check_names='["mysql"]' \
  -l com.datadoghq.ad.init_configs='[{}]' \
  -l com.datadoghq.ad.instances='[{
    "dbm": true,
    "host": "<AWS_INSTANCE_ENDPOINT>",
    "port": 3306,
    "username": "datadog",
    "password": "<UNIQUEPASSWORD>"
  }]' \
  gcr.io/datadoghq/agent:${DD_AGENT_VERSION}

Archivo Docker

Las etiquetas también pueden especificarse en un Dockerfile, por lo que puedes crear y desplegar un Agent personalizado sin cambiar la configuración de tu infraestructura:

FROM gcr.io/datadoghq/agent:7.36.1

LABEL "com.datadoghq.ad.check_names"='["mysql"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"dbm": true, "host": "<AWS_INSTANCE_ENDPOINT>", "port": 3306,"username": "datadog","password": "<UNIQUEPASSWORD>"}]'
Importante: Utiliza el endpoint de la instancia de Aurora como host, no el endpoint del clúster.

Para evitar exponer la contraseña del usuario datadog en texto simple, utiliza el paquete de gestión de secretos del Agent y declara la contraseña utilizando la sintaxis ENC[] o consulta la documentación de variables de plantilla Autodiscovery para saber cómo pasar la contraseña como una variable de entorno.

Si tienes un clúster de Kubernetes, utiliza el Datadog Cluster Agent para la Monitorización de base de datos.

Sigue las instrucciones para habilitar checks de clúster, si no están habilitados en tu clúster de Kubernetes. Puedes declarar la configuración de MySQL mediante archivos estáticos integrados en el contenedor del Cluster Agent o utilizando anotaciones de servicios:

Helm

Realiza los siguientes pasos para instalar el Datadog Cluster Agent en tu clúster de Kubernetes. Sustituye los valores para que coincidan con tu cuenta y tu entorno.

  1. Sigue las instrucciones de instalación del Datadog Agent para Helm.

  2. Actualiza tu archivo de configuración YAML (datadog-values.yaml en las instrucciones de instalación del Cluster Agent) para incluir lo siguiente:

    clusterAgent:
      confd:
        mysql.yaml: -|
          cluster_check: true
          init_config:
            instances:
              - dbm: true
                host: <INSTANCE_ADDRESS>
                port: 3306
                username: datadog
                password: '<UNIQUE_PASSWORD>'      
    
    clusterChecksRunner:
      enabled: true
    
  3. Despliega el Agent con el archivo de configuración anterior desde la línea de comandos:

    helm install datadog-agent -f datadog-values.yaml datadog/datadog
    
Para Windows, añade --set targetSystem=Windows al comando helm install.

Configurar con archivos integrados

Para configurar un check de clúster con un archivo de configuración integrado, integra el archivo de configuración del contenedor del Cluster Agent en la ruta /conf.d/postgres.yaml:

cluster_check: true  # Asegúrate de incluir este indicador
init_config:
instances:
  - dbm: true
    host: '<AWS_INSTANCE_ENDPOINT>'
    port: 3306
    username: datadog
    password: '<UNIQUEPASSWORD>'

Configurar con anotaciones de servicios de Kubernetes

En lugar de integrar un archivo, puedes declarar la configuración de la instancia como servicio de Kubernetes. Para configurar este check en un Agent que se ejecuta en Kubernetes, crea un servicio en el mismo espacio de nombres que el Datadog Cluster Agent:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    tags.datadoghq.com/env: '<ENV>'
    tags.datadoghq.com/service: '<SERVICE>'
  annotations:
    ad.datadoghq.com/service.check_names: '["mysql"]'
    ad.datadoghq.com/service.init_configs: '[{}]'
    ad.datadoghq.com/service.instances: |
      [
        {
          "dbm": true,
          "host": "<AWS_INSTANCE_ENDPOINT>",
          "port": 3306,
          "username": "datadog",
          "password": "<UNIQUEPASSWORD>"
        }
      ]      
spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: mysql
Importante: Utiliza aquí el endpoint de la instancia de Aurora, no el endpoint del clúster.

El Cluster Agent registra automáticamente esta configuración y comienza a ejecutar el check de SQL Server.

Para evitar exponer la contraseña del usuario datadog en texto simple, utiliza el paquete de gestión de secretos del Agent y declara la contraseña utilizando la sintaxis ENC[].

Validar

Ejecuta el subcomando de estado del Agent y busca mysql en la sección Checks. Si no, visita la página Bases de datos para empezar.

Ejemplo de configuraciones del Agent

One agent connecting to multiple hosts

It is common to configure a single Agent host to connect to multiple remote database instances (see Agent installation architectures for DBM). To connect to multiple hosts, create an entry for each host in the MySQL integration config. In these cases, Datadog recommends limiting the number of instances per Agent to a maximum of 10 database instances to guarantee reliable performance.

init_config:
instances:
  - dbm: true
    host: example-service-primary.example-host.com
    port: 3306
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
  - dbm: true
    host: example-service-replica-1.example-host.com
    port: 3306
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    options:
      replication: true
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
  - dbm: true
    host: example-service-replica-2.example-host.com
    port: 3306
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    options:
      replication: true
    tags:
      - 'env:prod'
      - 'team:team-discovery'
      - 'service:example-service'
    [...]

Running custom queries

To collect custom metrics, use the custom_queries option. See the sample mysql.d/conf.yaml for more details.

init_config:
instances:
  - dbm: true
    host: localhost
    port: 3306
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    custom_queries:
    - query: SELECT age, salary, hours_worked, name FROM hr.employees;
      columns:
        - name: custom.employee_age
          type: gauge
        - name: custom.employee_salary
           type: gauge
        - name: custom.employee_hours
           type: count
        - name: name
           type: tag
      tags:
        - 'table:employees'

Working with hosts through a proxy

If the Agent must connect through a proxy such as the Cloud SQL Auth proxy, all telemetry is tagged with the hostname of the proxy rather than the database instance. Use the reported_hostname option to set a custom override of the hostname detected by the Agent.

init_config:
instances:
  - dbm: true
    host: localhost
    port: 5000
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    reported_hostname: example-service-primary
  - dbm: true
    host: localhost
    port: 5001
    username: datadog
    password: 'ENC[datadog_user_database_password]'
    reported_hostname: example-service-replica-1

Instalar la integración de RDS

Para ver métricas de infraestructura de AWS, como la CPU, junto con la telemetría de la base de datos en DBM, instala la integración de RDS (opcional).

Solucionar problemas

Si has instalado y configurado las integraciones y el Agent como se describe, pero no funcionan como se esperaba, consulta Solucionar problemas.

Referencias adicionales

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