Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana...

63
Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Transcript of Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana...

Page 1: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Monitoring MySQL withPrometheus & Grafana

Julien Pivotto (@roidelapluie)

Percona University Belgium

June 22nd, 2017

Page 2: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

SELECT USER();Julien "roidelapluie" Pivotto

@roidelapluie

Sysadmin at inuits

Automation, monitoring, HA

MySQL/MariaDB user/admin/contributor

Grafana and Prometheus user/contributor

Page 3: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

inuits

Page 4: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

MonitoringCreative Commons Attribution 2.0 https://www.flickr.com/photos/kevandotorg/13829348104/

Page 5: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

DevOps

4 keys principles

Culture

Automation

Metrics

Sharing

Damon Edwards and John Willis, 2010

Page 6: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Metrics mattersFind when a service is unavailable (before yourusers)

Understand Failures (post-mortem)

Learn from your infrastructure

Anticipate

Page 7: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Collecting MetricsIn general, you should collect as many metricsas you can

Frequently (5 min collection are not enough)

Store the metrics in a sane way (avoidaveraging old metrics, etc)

Page 8: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

How to collect metrics?Many many solutions, including:

Graphite

Elasticsearch beats

Zabbix

and .. Prometheus

Page 9: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Out of scope today

Alerting

Prometheus and Grafana installation

Prometheus Fine Tuning

But I'm happy to discuss that after the talks!

Page 10: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Prometheushttps://prometheus.io/

Page 11: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PrometheusPrometheus is a Cloud-Native Data-Centric Open-Source Performant Simple metrics collection,analysis and alerting tool.

Nothing more.

Page 12: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Cloud NativeEasy to configure, deploy, maintain

Designed in multiple services

Container ready

Orchestration ready (dynamic config)

Fuzziness

Page 13: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Data CentricA Metric in Prometheus has metadata:

myql_global_status_handlers_total{handler="tmp_write"} 1122

And lots of function to filter, change, remove...those metadata while fetching them.

Page 14: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Open SourceApache 2.0

Go

Support for multiple OS

Many "exporters":https://github.com/prometheus/prometheus/wiki/Defau

lt-port-allocations

Page 15: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PerformancePrometheus is designed to fetch data in aninterval measured in SECONDS

You can fine tune its memory usage and whenit flushes to disk

It can also adapt its scraping frequencydynamically

Page 16: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

How does it work?

Page 17: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

How does it work?

Page 18: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

How does it work?

Page 19: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

How does it work?

Page 20: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

How does it work?

Page 21: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

ExportersExporters expose metrics with an HTTP API

Bindings available for many languages

Exporters do not save data ; they are not"proxies" and don't "cache" anything

Page 22: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Exploring Metrics

Page 23: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Exploring Metrics

Page 24: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Exploring Metrics

Page 25: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Exploring Metrics

Page 26: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PromQLmysql_global_status_commands_total

Page 27: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PromQLmysql_global_status_commands_total{command="select"}

Page 28: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PromQLmysql_global_status_commands_total

{command=~"select|set_options"}

Page 29: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PromQLmysql_global_status_commands_total{command=~"select|set

_options"}

Page 30: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PromQLderiv(mysql_global_status_connections[5m])

Page 31: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

PromQL{__name__=~".+innodb.+cache.*"}

predict_linear(mysql_heartbeat_lag_seconds[5m], 60*2)

sum(rate(mysql_global_status_commands_total{command=~"

(commit|rollback)"}[5m])) without (command)

Page 32: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Prometheus + mysqld_exporterCollect a LOT of data(e.g. global variables & status)

Embeds basic visualisation console

By default scraps every 15s

Page 33: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

A word aboutPrometheus vs Graphite

Prometheus does not see a metric as an "event".Metrics are current value until they are replaced.You can not see when a metric has been includedin Prometheus.For Events, Prometheus refers to Elasticsearch.

Page 34: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017
Page 35: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

One tool does one job...Prometheus will collect data

Exporters will expose data

Grafana will graph data

Page 36: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

GrafanaOpen Source (Apache 2.0)

Web app

Specialized in visualization

Pluggable

Multiple datasources: prometheus, graphite,influxdb...

Has an API!

Page 37: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

History of GrafanaGrafana is a fork of Kibana 3 ; used to be JS-Driven.

Now fully featured, requires a database, multi-projects/users support, etc...

Page 38: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Grafana and PrometheusPrometheus shipped its own consoles

Now it recommends Grafana and deprecatedits own consoles

Page 39: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Grafana Dashboards

Page 40: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Grafana Dashboards

Page 41: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Time Picker

Page 42: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Configure Prometheus inGrafana

Page 43: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Configure Prometheus inGrafana

Page 44: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Prometheus Dashboard

Page 45: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Creating Grafana DashboardsTakes time

Requires deep knowledge of the tools

Improved over time

Easy to share (json + online library)

Page 46: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Percona Grafana DashboardPercona Open Sourced Grafana Dashboards

Covering MySQL, Mongo and Linux monitoring

Part of a bigger picture, PMM, but usablestandalone

Open Source (AGPL!)

https://github.com/percona/grafana-dashboards

Page 47: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Installing Percona Graphes

Method 1 (RO dashboards)

Enable File dashboards in Grafana

Clone grafana-dashboards to the configuredlocation (or make a package)

Method 2 (RW dashboards)

Use the Grafana API to upload the JSON's.

Page 48: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

MySQL SetupYou'll need mysqld_exporter, with a user

MySQL 5.1+

Performance Schema for full set of metrics

mysqld_exporter-collect.binlog_size=true-collect.info_schema.processlist=true`

Page 49: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

node_exporter setupnode_exporter-collectors.enabled="diskstats,filefd,filesystem,loadavg,meminfo,netdev,stat,time,uname,vmstat"

Page 50: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Prometheus (static file)scrape_configs:  ­ job_name: prometheus    static_configs:      ­ targets: ['localhost:9090']        labels:          instance: prometheus

  ­ job_name: linux    static_configs:      ­ targets: ['10.0.98.43:9100']        labels:          instance: db1

  ­ job_name: mysql    static_configs:      ­ targets: ['10.0.98.43:9104']        labels:          instance: db1

Page 51: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Dashboards

Page 52: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Dashboards

Page 53: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Dashboards

Page 54: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

We don't need all of them?Because Grafana is just viz, you can importonly the one you want (e.g. exclude Mongo)

You can import later any extra dashboard youneed

Page 55: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

MySQL Overview

Page 56: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

MySQL Overview

Page 57: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

MySQL Overview

Page 58: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

InnoDB

Page 59: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

InnoDB

Page 60: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

InnoDB

Page 61: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Replication

Page 62: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

ConclusionsPrometheus and Grafana are first-classmonitoring tools

Totally different approach than other tools

Embeddable into your apps

Percona Dashboards gets your graphes readyin no-time with minimal efforts

Page 63: Monitoring MySQL with Prometheus & Grafana - Percona · Monitoring MySQL with Prometheus & Grafana Julien Pivotto (@roidelapluie) Percona University Belgium June 22nd, 2017

Julien Pivottoroidelapluie

[email protected]

Inuitshttps://[email protected]

Contact