Graphing Amazon RDS MySQL Metrics with Prometheus & Grafana

Recently the mysql community got an awesome monitoring solution for mysql

with Prometheus & Grafana. The graphs are simply beautiful and really lively.

I started off with this nice post on the mysql performance blog  by Roman Vynar and got the solution up and running very easily.

You can actually monitor Amazon RDS instance with the same steps mentioned in the above post but with a few changes:

 

The monitoring framework consists of 4 components:

  1. Prometheus server on port 9090
  2. Grafana server on port 3000
  3. MySQL  exporter  process which connects to the MySQL Server
  4. Node Exporter process which gets system metrics of the box hosting MySQL

 

Prerequisites:

  1. Create an RDS instance.
  2. create an amazon ec2-instance. (this will host all the 4 components)

Setup:

Component 3 & 4: – Node Exporter & MySQL exporter process :

Amazon _DOES_NOT_ allow us to install anything on the RDS box.

So, I am sorry we will not be able get the System metrics of RDS – please rely on cloudwatch / Rds console for load averages, cpu usage , io etc etc.

So Follow the steps as mentioned in the nice post BUT make the following changes,

  • Install the Node exporter & MySQL exporter processes on the ec-instance ,
    • So the ‘/opt/prometheus/prometheus.yml’ file will look like
    • i.e. you are now monitoring system metrics of the ec2-instance not RDS box !
cat << EOF > /opt/prometheus/prometheus.yml
global:
 scrape_interval: 5s
 evaluation_interval: 5s
scrape_configs:
 - job_name: linux
 target_groups:
 - targets: ['localhost:9100']
 labels:
 alias: db1
 - job_name: mysql
 target_groups:
 - targets: ['localhost:9104']
 labels:
 alias: db1
EOF

But we need to tell the MySQL exporter to pull from RDS endpoint, so the

my.cnf file for MySQL exporter should be as follows:

[root@centos7 prometheus_exporters]# cat << EOF > .my.cnf
[client]
user=prom
password=abc123
host=amazon-rds-instance.amazonaws.com
EOF

 

Component 1 & 2: – Grafana & Prometheus:

Just Follow the steps as mentioned in the nice post .

x———————————————————–x

And walllaaaah…. you should be able graph Amazon RDS metrics 🙂

Screen Shot 2016-05-05 at 4.08.17 pm

 

 

Advertisements

2 thoughts on “Graphing Amazon RDS MySQL Metrics with Prometheus & Grafana

  1. Nice post Vishnu ! But is this solution works well for multiple RDS instances ? We are using tcollector to get the metrics from cloudwatch using boto plugin and tag the metric with the rds instance name. Tcollector->TSD->Grafana.

  2. hi Vaisakh.

    yes it is possible.

    in the file ‘/opt/prometheus/prometheus.yml’ :

    Under the Job_Name ‘mysql’ you have a target group which can have multiple targets.

    by default the MySQL Exporter process is bound to 9104.

    You need to start another MySQL Exporter process running with Another Config file which points to another RDS instance on a different port , say 9105

    Command to Run:
    ————————
    ./mysqld_exporter
    -config.my-cnf=
    -log.level=debug
    -web.listen-address=localhost:9105

    2ND_RDS_CONFIG_FILE
    ———————————–
    [client]
    user=prom
    password=abc123
    host=amazon-rds-2nd-instance.amazonaws.com

    Modified Prometheus.yml:
    ———————————————————

    global:
    scrape_interval: 5s
    evaluation_interval: 5s
    scrape_configs:
    – job_name: linux
    target_groups:
    – targets: [‘localhost:9100’]
    labels:
    alias: localhost
    – job_name: mysql
    target_groups:
    – targets: [‘localhost:9104’]
    labels:
    alias: RDS-1
    – targets: [‘localhost:9105’]
    labels:
    alias: RDS-2

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s