Database Monitoring provides deep visibility into your MySQL databases by exposing query metrics, query samples, explain plans, connection data, system metrics, and telemetry for the InnoDB storage engine.
The Agent collects telemetry directly from the database by logging in as a read-only user. Do the following setup to enable Database Monitoring with your MySQL database:
The default Agent configuration for Database Monitoring is conservative, but you can adjust settings such as the collection interval and query sampling rate to better suit your needs. For most workloads, the Agent represents less than one percent of query execution time on the database and less than one percent of CPU.
Database Monitoring runs as an integration on top of the base Agent (see benchmarks).
Proxies, load balancers, and connection poolers
The Datadog Agent must connect directly to the host being monitored, preferably through the instance endpoint. The Agent should not connect to the database through a proxy, load balancer, connection pooler, or the Aurora cluster endpoint. If connected to the cluster endpoint, the Agent collects data from one random replica, and only provides visibility into that replica. If the Agent connects to different hosts while it is running (as in the case of failover, load balancing, and so on), the Agent calculates the difference in statistics between two hosts, producing inaccurate metrics.
Data security considerations
See Sensitive information for information about what data the Agent collects from your databases and how to ensure it is secure.
Optional. Enables tracking recent query history per thread. If enabled it increases the likelihood of capturing execution details from infrequent queries.
Optional. Enables tracking of a larger number of recent queries across all threads. If enabled it increases the likelihood of capturing execution details from infrequent queries.
performance_schema_max_digest_length
4096
Increases the size of SQL digest text in events_statements_* tables. If left at the default value then queries longer than 1024 characters are not collected.
Optional. Enables tracking recent query history per thread. If enabled it increases the likelihood of capturing execution details from infrequent queries.
Optional. Enables tracking of a larger number of recent queries across all threads. If enabled it increases the likelihood of capturing execution details from infrequent queries.
Note: A recommended practice is to allow the Agent to enable the performance-schema-consumer-* settings dynamically at runtime, as part of granting the Agent access. See Runtime setup consumers.
The Datadog Agent requires read-only access to the database in order to collect statistics and queries.
The following instructions grant the Agent permission to login from any host using datadog@'%'. You can restrict the datadog user to be allowed to login only from localhost by using datadog@'localhost'. See the MySQL documentation for more info.
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.
To monitor Aurora hosts, install the Datadog Agent in your infrastructure and configure it to connect to each instance endpoint remotely. The Agent does not need to run on the database, it only needs to connect to it. For additional Agent installation methods not mentioned here, see the Agent installation instructions.
The Datadog Agent supports Autodiscovery of all Aurora endpoints in a cluster. Unless you want different configurations for different instances, or want to find and list Aurora endpoints manually, follow the Autodiscovery setup instructions for Aurora DB clusters instead of the manual setup section below.
To configure this check for an Agent running on a host, for example when you provision a small EC2 instance for the Agent to collect from an Aurora database:
Add this configuration block to your mysql.d/conf.yaml to collect MySQL metrics:
init_config:instances:- dbm:truehost:'<AWS_INSTANCE_ENDPOINT>'port:3306username:datadogpassword:'ENC[datadog_user_database_password]'# from the CREATE USER step earlier, stored as a secret# After adding your project and instance, configure the Datadog AWS integration to pull additional cloud data such as CPU and Memory.aws:instance_endpoint:'<AWS_INSTANCE_ENDPOINT>'
Important: Use the Aurora instance endpoint here, not the cluster endpoint.
To configure the Database Monitoring Agent running in a Docker container such as in ECS or Fargate, you can set the Autodiscovery Integration Templates as Docker labels on your agent container.
Note: The Agent must have read permission on the Docker socket for Autodiscovery of labels to work.
Get up and running quickly by executing the following command to run the agent from your command line. Replace the values to match your account and environment:
Labels can also be specified in a Dockerfile, so you can build and deploy a custom agent without changing any infrastructure configuration:
FROM gcr.io/datadoghq/agent:7.36.1LABEL"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]"}]'
Important: Use the Aurora instance endpoint as the host, not the cluster endpoint.
If you have a Kubernetes cluster, use the Datadog Cluster Agent for Database Monitoring.
Follow the instructions to enable the cluster checks if not already enabled in your Kubernetes cluster. You can declare the MySQL configuration either with static files mounted in the Cluster Agent container or using service annotations:
Complete the following steps to install the Datadog Cluster Agent on your Kubernetes cluster. Replace the values to match your account and environment.
To configure a cluster check with a mounted configuration file, mount the configuration file in the Cluster Agent container on the path /conf.d/mysql.yaml:
cluster_check:true# Make sure to include this flaginit_config:instances:- dbm:truehost:'<AWS_INSTANCE_ENDPOINT>'port:3306username:datadogpassword:'ENC[datadog_user_database_password]'
Rather than mounting a file, you can declare the instance configuration as a Kubernetes Service. To configure this check for an Agent running on Kubernetes, create a Service in the same namespace as the Datadog Cluster Agent:
Important: Use the Aurora instance endpoint here, not the Aurora cluster endpoint.
The Cluster Agent automatically registers this configuration and begins running the MySQL check.
To avoid exposing the datadog user’s password in plain text, use the Agent’s secret management package and declare the password using the ENC[] syntax.
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.
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.