You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yzl 93958d0fb0
zabbix6.0
1 year ago
..
README.md zabbix6.0 1 year ago
template_db_mysql_agent2.yaml zabbix6.0 1 year ago

README.md

MySQL by Zabbix agent 2

Overview

This template is designed for the effortless deployment of MySQL monitoring by Zabbix via Zabbix agent 2 and doesn't require any external scripts.

Requirements

Zabbix version: 7.0 and higher.

Tested versions

This template has been tested on:

  • MySQL 5.7, 8.0
  • Percona 8.0
  • MariaDB 10.4

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

  1. Create MySQL user for monitoring (<password> at your discretion):
CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '<password>';
GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';

For more information, please see MySQL documentation https://dev.mysql.com/doc/refman/8.0/en/grant.html

  1. Set in the {$MYSQL.DSN} macro the data source name of the MySQL instance either session name from Zabbix agent 2 configuration file or URI. Examples: MySQL1, tcp://localhost:3306, tcp://172.16.0.10, unix:/var/run/mysql.sock For more information about MySQL Unix socket file, see the MySQL documentation https://dev.mysql.com/doc/refman/8.0/en/problems-with-mysql-sock.html.

  2. If you had set URI in the {$MYSQL.DSN}, define the user name and password in host macros ({$MYSQL.USER} and {$MYSQL.PASSWORD}). Leave macros {$MYSQL.USER} and {$MYSQL.PASSWORD} empty if you use a session name. Set the user name and password in the Plugins.Mysql.<...> section of your Zabbix agent 2 configuration file. For more information about configuring the Zabbix MySQL plugin, see the documentation https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/src/go/plugins/mysql/README.md.

Macros used

Name Description Default
{$MYSQL.USER}

MySQL user name.

{$MYSQL.PASSWORD}

MySQL user password.

{$MYSQL.ABORTED_CONN.MAX.WARN}

Number of failed attempts to connect to the MySQL server for trigger expression.

3
{$MYSQL.REPL_LAG.MAX.WARN}

The lag of slave from master for trigger expression.

30m
{$MYSQL.SLOW_QUERIES.MAX.WARN}

The number of slow queries for trigger expression.

3
{$MYSQL.BUFF_UTIL.MIN.WARN}

The minimum buffer pool utilization percentage for trigger expression.

50
{$MYSQL.DSN}

System data source name such as <tcp://host:port or unix:/path/to/socket)/>.

<Put your DSN>
{$MYSQL.CREATED_TMP_TABLES.MAX.WARN}

The maximum number of created tmp tables in memory per second for trigger expressions.

30
{$MYSQL.CREATED_TMP_DISK_TABLES.MAX.WARN}

The maximum number of created tmp tables on a disk per second for trigger expressions.

10
{$MYSQL.CREATED_TMP_FILES.MAX.WARN}

The maximum number of created tmp files on a disk per second for trigger expressions.

10
{$MYSQL.INNODB_LOG_FILES}

Number of physical files in the InnoDB redo log for calculating innodb_log_file_size.

2

Items

Name Description Type Key and additional info
MySQL: Get status variables

The item gets server global status information.

Zabbix agent mysql.get_status_variables["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"]
MySQL: Status Zabbix agent mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"]

Preprocessing

  • Discard unchanged with heartbeat: 10m

MySQL: Version Zabbix agent mysql.version["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"]

Preprocessing

  • Discard unchanged with heartbeat: 6h

MySQL: Uptime

The amount of seconds that the server has been up.

Dependent item mysql.uptime

Preprocessing

  • JSON Path: $.Uptime

MySQL: Aborted clients per second

Number of connections that were aborted because the client died without closing the connection properly.

Dependent item mysql.aborted_clients.rate

Preprocessing

  • JSON Path: $.Aborted_clients

  • Change per second
MySQL: Aborted connections per second

Number of failed attempts to connect to the MySQL server.

Dependent item mysql.aborted_connects.rate

Preprocessing

  • JSON Path: $.Aborted_connects

  • Change per second
MySQL: Connection errors accept per second

Number of errors that occurred during calls to accept() on the listening port.

Dependent item mysql.connection_errors_accept.rate

Preprocessing

  • JSON Path: $.Connection_errors_accept

  • Change per second
MySQL: Connection errors internal per second

Number of refused connections due to internal server errors, for example, out of memory errors, or failed thread starts.

Dependent item mysql.connection_errors_internal.rate

Preprocessing

  • JSON Path: $.Connection_errors_internal

  • Change per second
MySQL: Connection errors max connections per second

Number of refused connections due to the max_connections limit being reached.

Dependent item mysql.connection_errors_max_connections.rate

Preprocessing

  • JSON Path: $.Connection_errors_max_connections

  • Change per second
MySQL: Connection errors peer address per second

Number of errors while searching for the connecting client IP address.

Dependent item mysql.connection_errors_peer_address.rate

Preprocessing

  • JSON Path: $.Connection_errors_peer_address

  • Change per second
MySQL: Connection errors select per second

Number of errors during calls to select() or poll() on the listening port. The client would not necessarily have been rejected in these cases.

Dependent item mysql.connection_errors_select.rate

Preprocessing

  • JSON Path: $.Connection_errors_select

  • Change per second
MySQL: Connection errors tcpwrap per second

Number of connections the libwrap library has refused.

Dependent item mysql.connection_errors_tcpwrap.rate

Preprocessing

  • JSON Path: $.Connection_errors_tcpwrap

  • Change per second
MySQL: Connections per second

Number of connection attempts (successful or not) to the MySQL server.

Dependent item mysql.connections.rate

Preprocessing

  • JSON Path: $.Connections

  • Change per second
MySQL: Max used connections

The maximum number of connections that have been in use simultaneously since the server start.

Dependent item mysql.max_used_connections

Preprocessing

  • JSON Path: $.Max_used_connections

  • Discard unchanged with heartbeat: 1h

MySQL: Threads cached

Number of threads in the thread cache.

Dependent item mysql.threads_cached

Preprocessing

  • JSON Path: $.Threads_cached

MySQL: Threads connected

Number of currently open connections.

Dependent item mysql.threads_connected

Preprocessing

  • JSON Path: $.Threads_connected

MySQL: Threads created per second

Number of threads created to handle connections. If Threads_created is big, you may want to increase the thread_cache_size value. The cache miss rate can be calculated as Threads_created/Connections.

Dependent item mysql.threads_created.rate

Preprocessing

  • JSON Path: $.Threads_created

  • Change per second
MySQL: Threads running

Number of threads which are not sleeping.

Dependent item mysql.threads_running

Preprocessing

  • JSON Path: $.Threads_running

MySQL: Buffer pool efficiency

The item shows how effectively the buffer pool is serving reads.

Calculated mysql.buffer_pool_efficiency
MySQL: Buffer pool utilization

Ratio of used to total pages in the buffer pool.

Calculated mysql.buffer_pool_utilization
MySQL: Created tmp files on disk per second

How many temporary files mysqld has created.

Dependent item mysql.created_tmp_files.rate

Preprocessing

  • JSON Path: $.Created_tmp_files

  • Change per second
MySQL: Created tmp tables on disk per second

Number of internal on-disk temporary tables created by the server while executing statements.

Dependent item mysql.created_tmp_disk_tables.rate

Preprocessing

  • JSON Path: $.Created_tmp_disk_tables

  • Change per second
MySQL: Created tmp tables on memory per second

Number of internal temporary tables created by the server while executing statements.

Dependent item mysql.created_tmp_tables.rate

Preprocessing

  • JSON Path: $.Created_tmp_tables

  • Change per second
MySQL: InnoDB buffer pool pages free

The total size of the InnoDB buffer pool, in pages.

Dependent item mysql.innodb_buffer_pool_pages_free

Preprocessing

  • JSON Path: $.Innodb_buffer_pool_pages_free

MySQL: InnoDB buffer pool pages total

The total size of the InnoDB buffer pool, in pages.

Dependent item mysql.innodb_buffer_pool_pages_total

Preprocessing

  • JSON Path: $.Innodb_buffer_pool_pages_total

  • Discard unchanged with heartbeat: 1h

MySQL: InnoDB buffer pool read requests

Number of logical read requests.

Dependent item mysql.innodb_buffer_pool_read_requests

Preprocessing

  • JSON Path: $.Innodb_buffer_pool_read_requests

MySQL: InnoDB buffer pool read requests per second

Number of logical read requests per second.

Dependent item mysql.innodb_buffer_pool_read_requests.rate

Preprocessing

  • JSON Path: $.Innodb_buffer_pool_read_requests

  • Change per second
MySQL: InnoDB buffer pool reads

Number of logical reads that InnoDB could not satisfy from the buffer pool, and had to read directly from the disk.

Dependent item mysql.innodb_buffer_pool_reads

Preprocessing

  • JSON Path: $.Innodb_buffer_pool_reads

MySQL: InnoDB buffer pool reads per second

Number of logical reads per second that InnoDB could not satisfy from the buffer pool, and had to read directly from the disk.

Dependent item mysql.innodb_buffer_pool_reads.rate

Preprocessing

  • JSON Path: $.Innodb_buffer_pool_reads

  • Change per second
MySQL: InnoDB row lock time

The total time spent in acquiring row locks for InnoDB tables, in milliseconds.

Dependent item mysql.innodb_row_lock_time

Preprocessing

  • JSON Path: $.Innodb_row_lock_time

  • Custom multiplier: 0.001

  • Discard unchanged with heartbeat: 1h

MySQL: InnoDB row lock time max

The maximum time to acquire a row lock for InnoDB tables, in milliseconds.

Dependent item mysql.innodb_row_lock_time_max

Preprocessing

  • JSON Path: $.Innodb_row_lock_time_max

  • Custom multiplier: 0.001

  • Discard unchanged with heartbeat: 1h

MySQL: InnoDB row lock waits

Number of times operations on InnoDB tables had to wait for a row lock.

Dependent item mysql.innodb_row_lock_waits

Preprocessing

  • JSON Path: $.Innodb_row_lock_waits

MySQL: Slow queries per second

Number of queries that have taken more than long_query_time seconds.

Dependent item mysql.slow_queries.rate

Preprocessing

  • JSON Path: $.Slow_queries

  • Change per second
MySQL: Bytes received

Number of bytes received from all clients.

Dependent item mysql.bytes_received.rate

Preprocessing

  • JSON Path: $.Bytes_received

  • Change per second
MySQL: Bytes sent

Number of bytes sent to all clients.

Dependent item mysql.bytes_sent.rate

Preprocessing

  • JSON Path: $.Bytes_sent

  • Change per second
MySQL: Command Delete per second

The Com_delete counter variable indicates the number of times the delete statement has been executed.

Dependent item mysql.com_delete.rate

Preprocessing

  • JSON Path: $.Com_delete

  • Change per second
MySQL: Command Insert per second

The Com_insert counter variable indicates the number of times the insert statement has been executed.

Dependent item mysql.com_insert.rate

Preprocessing

  • JSON Path: $.Com_insert

  • Change per second
MySQL: Command Select per second

The Com_select counter variable indicates the number of times the select statement has been executed.

Dependent item mysql.com_select.rate

Preprocessing

  • JSON Path: $.Com_select

  • Change per second
MySQL: Command Update per second

The Com_update counter variable indicates the number of times the update statement has been executed.

Dependent item mysql.com_update.rate

Preprocessing

  • JSON Path: $.Com_update

  • Change per second
MySQL: Queries per second

Number of statements executed by the server. This variable includes statements executed within stored programs, unlike the Questions variable.

Dependent item mysql.queries.rate

Preprocessing

  • JSON Path: $.Queries

  • Change per second
MySQL: Questions per second

Number of statements executed by the server. This includes only statements sent to the server by clients and not statements executed within stored programs, unlike the Queries variable.

Dependent item mysql.questions.rate

Preprocessing

  • JSON Path: $.Questions

  • Change per second
MySQL: Binlog cache disk use

Number of transactions that used a temporary disk cache because they could not fit in the regular binary log cache, being larger than binlog_cache_size.

Dependent item mysql.binlog_cache_disk_use

Preprocessing

  • JSON Path: $.Binlog_cache_disk_use

  • Discard unchanged with heartbeat: 6h

MySQL: Innodb buffer pool wait free

Number of times InnoDB waited for a free page before reading or creating a page. Normally, writes to the InnoDB buffer pool happen in the background. When no clean pages are available, dirty pages are flushed first in order to free some up. This counts the numbers of wait for this operation to finish. If this value is not small, look at the increasing innodb_buffer_pool_size.

Dependent item mysql.innodb_buffer_pool_wait_free

Preprocessing

  • JSON Path: $.Innodb_buffer_pool_wait_free

  • Discard unchanged with heartbeat: 6h

MySQL: Innodb number open files

Number of open files held by InnoDB. InnoDB only.

Dependent item mysql.innodb_num_open_files

Preprocessing

  • JSON Path: $.Innodb_num_open_files

  • Discard unchanged with heartbeat: 6h

MySQL: Open table definitions

Number of cached table definitions.

Dependent item mysql.open_table_definitions

Preprocessing

  • JSON Path: $.Open_table_definitions

  • Discard unchanged with heartbeat: 6h

MySQL: Open tables

Number of tables that are open.

Dependent item mysql.open_tables

Preprocessing

  • JSON Path: $.Open_tables

  • Discard unchanged with heartbeat: 6h

MySQL: Innodb log written

Number of bytes written to the InnoDB log.

Dependent item mysql.innodb_os_log_written

Preprocessing

  • JSON Path: $.Innodb_os_log_written

  • Discard unchanged with heartbeat: 6h

MySQL: Calculated value of innodb_log_file_size

Calculated by (innodb_os_log_written-innodb_os_log_written(time shift -1h))/{$MYSQL.INNODB_LOG_FILES} value of the innodb_log_file_size. Innodb_log_file_size is the size in bytes of the each InnoDB redo log file in the log group. The combined size can be no more than 512GB. Larger values mean less disk I/O due to less flushing checkpoint activity, but also slower recovery from a crash.

Calculated mysql.innodb_log_file_size

Preprocessing

  • Discard unchanged with heartbeat: 6h

Triggers

Name Description Expression Severity Dependencies and additional info
MySQL: Service is down last(/MySQL by Zabbix agent 2/mysql.ping["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"])=0 High
MySQL: Version has changed

MySQL version has changed. Acknowledge to close the problem manually.

last(/MySQL by Zabbix agent 2/mysql.version["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"],#1)<>last(/MySQL by Zabbix agent 2/mysql.version["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"],#2) and length(last(/MySQL by Zabbix agent 2/mysql.version["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"]))>0 Info Manual close: Yes
MySQL: Service has been restarted

MySQL uptime is less than 10 minutes.

last(/MySQL by Zabbix agent 2/mysql.uptime)<10m Info
MySQL: Failed to fetch info data

Zabbix has not received any data for items for the last 30 minutes.

nodata(/MySQL by Zabbix agent 2/mysql.uptime,30m)=1 Info Depends on:
  • MySQL: Service is down
MySQL: Server has aborted connections

The number of failed attempts to connect to the MySQL server is more than {$MYSQL.ABORTED_CONN.MAX.WARN} in the last 5 minutes.

min(/MySQL by Zabbix agent 2/mysql.aborted_connects.rate,5m)>{$MYSQL.ABORTED_CONN.MAX.WARN} Average Depends on:
  • MySQL: Refused connections
MySQL: Refused connections

Number of refused connections due to the max_connections limit being reached.

last(/MySQL by Zabbix agent 2/mysql.connection_errors_max_connections.rate)>0 Average
MySQL: Buffer pool utilization is too low

The buffer pool utilization is less than {$MYSQL.BUFF_UTIL.MIN.WARN}% in the last 5 minutes. This means that there is a lot of unused RAM allocated for the buffer pool, which you can easily reallocate at the moment.

max(/MySQL by Zabbix agent 2/mysql.buffer_pool_utilization,5m)<{$MYSQL.BUFF_UTIL.MIN.WARN} Warning
MySQL: Number of temporary files created per second is high

Possibly the application using the database is in need of query optimization.

min(/MySQL by Zabbix agent 2/mysql.created_tmp_files.rate,5m)>{$MYSQL.CREATED_TMP_FILES.MAX.WARN} Warning
MySQL: Number of on-disk temporary tables created per second is high

Possibly the application using the database is in need of query optimization.

min(/MySQL by Zabbix agent 2/mysql.created_tmp_disk_tables.rate,5m)>{$MYSQL.CREATED_TMP_DISK_TABLES.MAX.WARN} Warning
MySQL: Number of internal temporary tables created per second is high

Possibly the application using the database is in need of query optimization.

min(/MySQL by Zabbix agent 2/mysql.created_tmp_tables.rate,5m)>{$MYSQL.CREATED_TMP_TABLES.MAX.WARN} Warning
MySQL: Server has slow queries

The number of slow queries is more than {$MYSQL.SLOW_QUERIES.MAX.WARN} in the last 5 minutes.

min(/MySQL by Zabbix agent 2/mysql.slow_queries.rate,5m)>{$MYSQL.SLOW_QUERIES.MAX.WARN} Warning

LLD rule Database discovery

Name Description Type Key and additional info
Database discovery

Scanning databases in DBMS.

Zabbix agent mysql.db.discovery["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"]

Preprocessing

  • Discard unchanged with heartbeat: 1d

Item prototypes for Database discovery

Name Description Type Key and additional info
MySQL: Size of database {#DATABASE} Zabbix agent mysql.db.size["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}","{#DATABASE}"]

Preprocessing

  • Discard unchanged with heartbeat: 1h

LLD rule Replication discovery

Name Description Type Key and additional info
Replication discovery

If "show slave status" returns Master_Host, "Replication: *" items are created.

Zabbix agent mysql.replication.discovery["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}"]

Preprocessing

  • Discard unchanged with heartbeat: 1d

Item prototypes for Replication discovery

Name Description Type Key and additional info
MySQL: Replication Slave status {#MASTER_HOST}

The item gets status information on the essential parameters of the slave threads.

Zabbix agent mysql.replication.get_slave_status["{$MYSQL.DSN}","{$MYSQL.USER}","{$MYSQL.PASSWORD}","{#MASTER_HOST}"]
MySQL: Replication Slave SQL Running State {#MASTER_HOST}

This shows the state of the SQL driver threads.

Dependent item mysql.replication.slave_sql_running_state["{#MASTER_HOST}"]

Preprocessing

  • JSON Path: $.Slave_SQL_Running_State

  • Discard unchanged with heartbeat: 6h

MySQL: Replication Seconds Behind Master {#MASTER_HOST}

Number of seconds that the slave SQL thread is behind processing the master binary log.

A high number (or an increasing one) can indicate that the slave is unable to handle events

from the master in a timely fashion.

Dependent item mysql.replication.seconds_behind_master["{#MASTER_HOST}"]

Preprocessing

  • JSON Path: $.Seconds_Behind_Master

  • Matches regular expression: \d+

    Custom on fail: Set error to: Replication is not performed.

  • Discard unchanged with heartbeat: 1h

MySQL: Replication Slave IO Running {#MASTER_HOST}

Whether the I/O thread for reading the master's binary log is running.

Normally, you want this to be Yes unless you have not yet started a replication or have

explicitly stopped it with STOP SLAVE.

Dependent item mysql.replication.slave_io_running["{#MASTER_HOST}"]

Preprocessing

  • JSON Path: $.Slave_IO_Running

  • Discard unchanged with heartbeat: 1h

MySQL: Replication Slave SQL Running {#MASTER_HOST}

Whether the SQL thread for executing events in the relay log is running.

As with the I/O thread, this should normally be Yes.

Dependent item mysql.replication.slave_sql_running["{#MASTER_HOST}"]

Preprocessing

  • JSON Path: $.Slave_SQL_Running

  • Discard unchanged with heartbeat: 1h

Trigger prototypes for Replication discovery

Name Description Expression Severity Dependencies and additional info
MySQL: Replication lag is too high min(/MySQL by Zabbix agent 2/mysql.replication.seconds_behind_master["{#MASTER_HOST}"],5m)>{$MYSQL.REPL_LAG.MAX.WARN} Warning
MySQL: The slave I/O thread is not running

Whether the I/O thread for reading the master's binary log is running.

count(/MySQL by Zabbix agent 2/mysql.replication.slave_io_running["{#MASTER_HOST}"],#1,"eq","No")=1 Average
MySQL: The slave I/O thread is not connected to a replication master count(/MySQL by Zabbix agent 2/mysql.replication.slave_io_running["{#MASTER_HOST}"],#1,"ne","Yes")=1 Warning Depends on:
  • MySQL: The slave I/O thread is not running
MySQL: The SQL thread is not running

Whether the SQL thread for executing events in the relay log is running.

count(/MySQL by Zabbix agent 2/mysql.replication.slave_sql_running["{#MASTER_HOST}"],#1,"eq","No")=1 Warning Depends on:
  • MySQL: The slave I/O thread is not running

LLD rule MariaDB discovery

Name Description Type Key and additional info
MariaDB discovery

Additional metrics if MariaDB is used.

Dependent item mysql.extra_metric.discovery

Preprocessing

  • JavaScript: The text is too long. Please see the template.

Item prototypes for MariaDB discovery

Name Description Type Key and additional info
MySQL: Binlog commits

Total number of transactions committed to the binary log.

Dependent item mysql.binlog_commits[{#SINGLETON}]

Preprocessing

  • JSON Path: $.Binlog_commits

MySQL: Binlog group commits

Total number of group commits done to the binary log.

Dependent item mysql.binlog_group_commits[{#SINGLETON}]

Preprocessing

  • JSON Path: $.Binlog_group_commits

MySQL: Master GTID wait count

The number of times MASTER_GTID_WAIT called.

Dependent item mysql.master_gtid_wait_count[{#SINGLETON}]

Preprocessing

  • JSON Path: $.Master_gtid_wait_count

  • Discard unchanged with heartbeat: 6h

MySQL: Master GTID wait time

Total number of time spent in MASTER_GTID_WAIT.

Dependent item mysql.master_gtid_wait_time[{#SINGLETON}]

Preprocessing

  • JSON Path: $.Master_gtid_wait_time

  • Discard unchanged with heartbeat: 6h

MySQL: Master GTID wait timeouts

Number of timeouts occurring in MASTER_GTID_WAIT.

Dependent item mysql.master_gtid_wait_timeouts[{#SINGLETON}]

Preprocessing

  • JSON Path: $.Master_gtid_wait_timeouts

  • Discard unchanged with heartbeat: 6h

Feedback

Please report any issues with the template at https://support.zabbix.com

You can also provide feedback, discuss the template, or ask for help at ZABBIX forums