Configuración de la monitorización de bases de datos para MySQL gestionado por Amazon RDS
La monitorización de bases 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 bases de datos con tu base de datos MySQL:
- Configura la integración AWS.
- Configura parámetros de bases de datos.
- Concede al Agent acceso a la base de datos.
- Instala y configura el Agent.
- Instala la integración RDS.
Antes de empezar
- Versiones de MySQL compatibles
- 5.6, 5.7, o 8.0+
- Versiones de MariaDB compatibles
- v10.5, v10.6 o v10.11
La monitorización de bases de datos para MariaDB es compatible con limitaciones conocidas. - Versiones compatibles del Agent
- v7.36.1 o posterior
- Impacto en el rendimiento
- El valor predeterminado de configuración del Agent para la monitorización de bases 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 bases de datos se ejecuta como integración junto con el Agent de base (consulta los valores de referencia). - Proxies, equilibradores de carga y agrupadores de conexiones
- El Datadog Agent debe conectarse directamente al host que está siendo monitorizado, preferiblemente a través del endpoint de la instancia. El Agent no debe conectarse a la base de datos a través de un proxy, equilibrador de carga o agrupador de conexiones. Si el Agent se conecta a diferentes hosts mientras se está ejecutando (como en el caso de la conmutación por error, el equilibrio de carga, etc.), el Agent calcula la diferencia en las estadísticas entre dos hosts, produciendo métricas inexactas.
- 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 la integración AWS
Habilita la Recopilación estándar en la sección Resource Collection (Recopilación de recursos) de tu cuadro de integración de Amazon Web Services.
Configuración de parámetros de MySQL
Configura lo siguiente en el grupo de parámetros de base de datos y luego reinicia el servidor para que los ajustes surtan efecto:
Parámetro | Valor | Descripción |
---|
performance_schema | 1 | Obligatorio. Habilita el esquema de rendimiento. |
max_digest_length | 4096 | Obligatorio para la recopilación de consultas más grandes. Aumenta el tamaño del texto del resumen SQL en las tablas de events_statements_* . Si se deja en el valor por defecto, no se recopilarán las consultas de más de 1024 caracteres. |
performance_schema_max_digest_length | 4096 | Debe coincidir con max_digest_length . |
performance_schema_max_sql_text_length | 4096 | Debe coincidir con max_digest_length . |
Parámetro | Valor | Descripción |
---|
performance_schema | 1 | Obligatorio. Habilita el esquema de rendimiento. |
max_digest_length | 4096 | Obligatorio para la recopilación de grandes consultas. Aumenta el tamaño del texto de compendio SQL en tablas events_statements_* . Si se deja en el valor por defecto, no se recopilarán las consultas de más de 1024 caracteres. |
performance_schema_max_digest_length | 4096 | Debe coincidir con max_digest_length . |
Conceder acceso al Agent
El Datadog Agent requiere acceso de sólo 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 que utilice datadog@'%'
. Puedes restringir al usuario datadog
para que sólo pueda iniciar sesión desde el host local utilizando datadog@'localhost'
. Para obtener más información, consulta la documentación de MySQL.
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 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 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 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 quieras 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
Con RDS, los consumidores de esquemas de rendimiento no pueden habilitarse permanentemente en una configuración. Crea el siguiente procedimiento para dar al Agent la capacidad de habilitar 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@'%';
Store your password using secret management software such as Vault. You can then reference this password as ENC[<SECRET_NAME>]
in your Agent configuration files: for example, ENC[datadog_user_database_password]
. See Secrets Management for more information.
The examples on this page use datadog_user_database_password
to refer to the name of the secret where your password is stored. It is possible to reference your password in plain text, but this is not recommended.
Instalación y configuración del Agent
Para monitorizar hosts de RDS, 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.
Para configurar este check para un Agent que se ejecuta en un host, por ejemplo, cuando se aprovisiona una pequeña instancia EC2 para que el Agent recopile de la base de datos de RDS:
Edita el archivo mysql.d/conf.yaml
, que se encuentra en la carpeta conf.d/
en la raíz del directorio de configuración del Agent, para empezar a recopilar tus métricas de MySQL. Para conocer todas las opciones de configuración disponibles, consulta el [mysql.d/conf.yaml] de ejemplo]2.
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: 'ENC[datadog_user_database_password]' # desde la etapa CREAR USUARIO anterior, almacenada como secreto
# Después de añadir tu proyecto y tu instancia, configura la integración AWS en Datadog para extraer datos adicionales de la nube, como CPU y memoria.
aws:
instance_endpoint: '<AWS_INSTANCE_ENDPOINT>'
Reinicia el Agent para empezar a enviar métricas de MySQL a Datadog.
Para configurar el Agent de monitorización de bases de datos que se ejecuta en un contenedor 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 Docker para que las etiquetas 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": "ENC[datadog_user_database_password]"}]'
Si tienes un clúster Kubernetes, utiliza el Datadog Cluster Agent para la monitorización de bases de datos.
Sigue las instrucciones para habilitar checks de clúster, si no están habilitados en tu clúster 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 Kubernetes. Sustituye los valores para que coincidan con tu cuenta y tu entorno.
Sigue las instrucciones de instalación del Datadog Agent para Helm.
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:
postgres.yaml: |-
cluster_check: true
init_config:
instances:
- dbm: true
host: <INSTANCE_ADDRESS>
port: 3306
username: datadog
password: 'ENC[datadog_user_database_password]'
clusterChecksRunner:
enabled: true
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
For Windows, append --set targetSystem=windows
to the helm install
command.
Configuración 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/mysql.yaml
:
cluster_check: true # Asegúrate de incluir este marcador
init_config:
instancias:
- dbm: true
host: '<AWS_INSTANCE_ENDPOINT>'
port 3306
nombre usuario Datadog
password: 'ENC[datadog_user_database_password]'
Configuración 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": "ENC[datadog_user_database_password]"
}
]
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: mysql
El Cluster Agent registra automáticamente esta configuración y comienza a ejecutar el check de SQL Server.
Validar
Ejecuta el subcomando de estado del Agent y busca mysql
en la sección Checks. Si no, consulta 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 RDS (opcional).
Solucionar problemas
Si has instalado y configurado las integraciones y el Agent como se describe, pero no funcionan como esperabas, consulta Solucionar problemas.
Referencias adicionales
Más enlaces, artículos y documentación útiles: