# slow queries

 template: mysql_10s_slow_queries
       on: mysql.queries
    class: Latency
     type: Database
component: MySQL
   lookup: sum -10s of slow_queries
    units: slow queries
    every: 10s
     warn: $this > (($status >= $WARNING)  ? (5)  : (10))
     crit: $this > (($status == $CRITICAL) ? (10) : (20))
    delay: down 5m multiplier 1.5 max 1h
     info: number of slow queries in the last 10 seconds
       to: dba


# -----------------------------------------------------------------------------
# lock waits

 template: mysql_10s_table_locks_immediate
       on: mysql.table_locks
    class: Utilization
     type: Database
component: MySQL
   lookup: sum -10s absolute of immediate
    units: immediate locks
    every: 10s
     info: number of table immediate locks in the last 10 seconds
       to: dba

 template: mysql_10s_table_locks_waited
       on: mysql.table_locks
    class: Latency
     type: Database
component: MySQL
   lookup: sum -10s absolute of waited
    units: waited locks
    every: 10s
     info: number of table waited locks in the last 10 seconds
       to: dba

 template: mysql_10s_waited_locks_ratio
       on: mysql.table_locks
    class: Latency
     type: Database
component: MySQL
     calc: ( ($mysql_10s_table_locks_waited + $mysql_10s_table_locks_immediate) > 0 ) ? (($mysql_10s_table_locks_waited * 100) / ($mysql_10s_table_locks_waited + $mysql_10s_table_locks_immediate)) : 0
    units: %
    every: 10s
     warn: $this > (($status >= $WARNING)  ? (10) : (25))
     crit: $this > (($status == $CRITICAL) ? (25) : (50))
    delay: down 30m multiplier 1.5 max 1h
     info: ratio of waited table locks over the last 10 seconds
       to: dba


# -----------------------------------------------------------------------------
# connections

 template: mysql_connections
       on: mysql.connections_active
    class: Utilization
     type: Database
component: MySQL
     calc: $active * 100 / $limit
    units: %
    every: 10s
     warn: $this > (($status >= $WARNING)  ? (60) : (70))
     crit: $this > (($status == $CRITICAL) ? (80) : (90))
    delay: down 15m multiplier 1.5 max 1h
     info: client connections utilization
       to: dba


# -----------------------------------------------------------------------------
# replication

 template: mysql_replication
       on: mysql.slave_status
    class: Errors
     type: Database
component: MySQL
     calc: ($sql_running <= 0 OR $io_running <= 0)?0:1
    units: ok/failed
    every: 10s
     crit: $this == 0
    delay: down 5m multiplier 1.5 max 1h
     info: replication status (0: stopped, 1: working)
       to: dba

 template: mysql_replication_lag
       on: mysql.slave_behind
    class: Latency
     type: Database
component: MySQL
     calc: $seconds
    units: seconds
    every: 10s
     warn: $this > (($status >= $WARNING)  ? (5)  : (10))
     crit: $this > (($status == $CRITICAL) ? (10) : (30))
    delay: down 15m multiplier 1.5 max 1h
     info: difference between the timestamp of the latest transaction processed by the SQL thread and \
           the timestamp of the same transaction when it was processed on the master
       to: dba


# -----------------------------------------------------------------------------
# galera cluster size

 template: mysql_galera_cluster_size_max_2m
       on: mysql.galera_cluster_size
    class: Utilization
     type: Database
component: MySQL
   lookup: max -2m at -1m unaligned
    units: nodes
    every: 10s
     info: maximum galera cluster size in the last 2 minutes starting one minute ago
       to: dba

 template: mysql_galera_cluster_size
       on: mysql.galera_cluster_size
    class: Utilization
     type: Database
component: MySQL
     calc: $nodes
    units: nodes
    every: 10s
     warn: $this > $mysql_galera_cluster_size_max_2m
     crit: $this < $mysql_galera_cluster_size_max_2m
    delay: up 20s down 5m multiplier 1.5 max 1h
     info: current galera cluster size, compared to the maximum size in the last 2 minutes
       to: dba

# galera node state

 template: mysql_galera_cluster_state_warn
       on: mysql.galera_cluster_state
    class: Errors
     type: Database
component: MySQL
     calc: $donor + $joined
    every: 10s
     warn: $this != nan AND $this != 0
    delay: up 30s down 5m multiplier 1.5 max 1h
     info: galera node state is either Donor/Desynced or Joined.
       to: dba

 template: mysql_galera_cluster_state_crit
       on: mysql.galera_cluster_state
    class: Errors
     type: Database
component: MySQL
     calc: $undefined + $joining + $error
    every: 10s
     crit: $this != nan AND $this != 0
    delay: up 30s down 5m multiplier 1.5 max 1h
     info: galera node state is either Undefined or Joining or Error.
       to: dba

# galera node status

 template: mysql_galera_cluster_status
       on: mysql.galera_cluster_status
    class: Errors
     type: Database
component: MySQL
     calc: $primary
    every: 10s
     crit: $this != nan AND $this != 1
    delay: up 30s down 5m multiplier 1.5 max 1h
     info: galera node is part of a nonoperational component. \
           This occurs in cases of multiple membership changes that result in a loss of Quorum or in cases of split-brain situations.
       to: dba