EVE Light on Life

给 mysql 安装 pmm 监控

PMM 说明

PMM(Percona Monitoring and Management) 是一款监控和分析 MySQL 服务的一套工具,可以从图形化的方式看到 MySQL 服务的各种性能指标,慢查询分析、连接数、线程状态、查询信息、缓存信息等等,对分析 MySQL 运行时问题很有帮助。

PMM 由两部分软件组成,PMM ClientPMM Server,前者负责在运行 MySQL 服务的地方收集信息,后者则获取由 PMM Client 收集的信息进行汇总聚合并呈现最终的表格图形到 Web 浏览器等。PMM Client 和 PMM Server 可以不用运行在同一台服务器,可能需要运行多个 PMM Client,如 MySQL 运行在集群模式下,需要在每台 MySQL 服务器部署 PMM Client 软件,将信息发送到 PMM Server 运行的服务器上。如果仅简单的跑一个 MySQL 实例,也可以将 PMM Client 和 PMM Server 都部署在 MySQL 服务器上。

下面这张是 PMM 的架构图:

PMM Client 软件包这边包含了几个软件,这里逐个解析:

  • pmm-admin: PMM Client 安装之后,这个命令行工具就是需要来配置 PMM Client 和 PMM Server 连接以及配置收集 MySQL 服务。
  • node_exporter: Prometheus exporter 用于搜集一般系统信息。Prometheus 是一套开源的监控系统,采用时序数据库保存采集的监控数据,有多种 exporter 将第三方服务的监控信息发送到 Prometheus。PMM 工具安装的时候会就会安装好 Prometheus 的这些软件。
  • mysqld_exporter: 收集 MySQL 服务的 Prometheus exporter。
  • mongodb_exporter: PMM 也可以监控 MongoDB 服务,所以也带了 mongodb_exporter。
  • proxy_exporter: 收集 ProxySQL 信息的 exporter。
  • pmm-mysql-queries-0: 收集 MySQL 的查询性能信息,发送到 PMM Server 端的 QAN API。

PMM Server 软件包由包含以下组件:

  • QAN API: 一个后端服务存储 PMM Client 发送过来的查询信息。
  • QAN APP: QAN Web 服务可视化查询分析数据。
  • Prometheus: PMM Server 包含 Prometheus 服务。
  • Grafana: 第三方的可视化图表软件使用 Prometheus 源提供数据。

看到 PMM 工具需要这么多软件并不需要担心,Percona 已经将 PMM Server 打包在 Docker 镜像,PMM Client 也在一个软件包安装,安装配置非常方便快速。

PMM 的安装

以下基于 Ubuntu 18.04 介绍如何将 PMM 安装在 MySQL 的服务器上。

PMM Server 安装

官方已经将 PMM Server 软件打包在 Docker 镜像,安装很简单。Ubuntu 18.04 已经有 Docker 服务。

1. 拉取最新的 PMM Server 镜像

tag 1 是 PMM Server 最新的镜像。

$ docker pull percona/pmm-server:1

2. 创建一个 pmm-data 容器

该容器用来初始化数据卷来保存数据,不要删除这个 pmm-data 容器。

$ docker create \
   -v /opt/prometheus/data \
   -v /opt/consul-data \
   -v /var/lib/mysql \
   -v /var/lib/grafana \
   --name pmm-data \
   percona/pmm-server:1 /bin/true

3. 创建和启动 pmm-server 容器

使用的数据卷为 pmm-data 容器设置的,其中端口可以设置为自己所需要的。

$ docker run -d \
   -p 8001:80 \
   --volumes-from pmm-data \
   --name pmm-server \
   -e SERVER_USER=jsmith \
   -e SERVER_PASSWORD=pass1234 \
   --restart always \
   percona/pmm-server:1

4. 查看 Docker 运行状态

$ docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                                     NAMES
d162c955fee9        percona/pmm-server:1                     "/opt/entrypoint.sh"     13 days ago         Up 13 days          443/tcp, 0.0.0.0:8001->80/tcp             pmm-server

上述步骤执行完毕,则 PMM Server 已经开始运行,可以使用浏览器访问服务器的 8001 端口地址,如果你的机器与服务器是在同一个局域网的话。 这里加上了访问 PMM Server 的用户和密码参数,如果在内网环境是可靠的话,可以不用加这两个参数,则访问 PMM Server 不需要密码。

PMM Client 安装

1. 下载 DEB 包

去 https://www.percona.com/downloads/pmm/ 下载页获取指定系统的 DEB 包,或者直接 wget 下载链接。这里下载 Ubuntu 18.04 的安装包。

$ wget https://www.percona.com/downloads/pmm/1.17.1/binary/debian/bionic/x86_64/pmm-client_1.17.1-1.bionic_amd64.deb

2. 安装 DEB 包

$ sudo dpkg -i pmm-client_1.17.1-1.bionic_amd64.deb

3. 连接 PMM Client 到 PMM Server

sudo pmm-admin config --server 127.0.0.1:8001 --server-user jsmith --server-password pass1234

--server 指定 PMM Server 服务所在的地址和监听的端口,如果在同一台机器,写本地地址即可。

这里假定之前启动 PMM Server 时指定了用户名和密码,则 PMM Client 连接 PMM Server 需设置用户名和密码,如果没有指定,可以不需要这两个参数。 可以使用 pmm-admin ping 查看连接状态。

4. 配置收集 MySQL 数据

PMM 可以从 MySQL 的慢查询日志或者 Performance Schema 收集查询数据。从慢查询日志收集信息最多,但可能增加系统负载。 Performance Schema 从 MySQL 5.6 版开始加入,旧版本的 MySQL,只能设置从慢查询日志收集了。

4.1 创建一个 MySQL 用户给 PMM 使用

我们希望只提供一个受限的 MySQL 用户给 PMM 用来收集相关信息,如访问 Performance 数据库。

GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@' localhost' IDENTIFIED BY 'pass' WITH MAX_USER_CONNECTIONS 10;
GRANT SELECT, UPDATE, DELETE, DROP ON performance_schema.* TO 'pmm'@'localhost';

或者使用 pmm-admin add mysql 命令的 –create-user 选项,自动创建相关权限的用户。可以在下面看到相关描述。

4.2 添加监控 MySQL 实例
4.2.1 使用 Performance Schema 收集方式
  • 确保 MySQL 版本在 5.6(包含) 之后
  • 确保开启了 Performance Schema。
ysql> SHOW VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+

如果没有开启,需在 MySQL 配置文件 my.cnf 种设置, 然后重启 MySQL。

[mysql]
innodb_monitor_enable=all
performance_schema=ON

运行 pmm-admin 命令添加监控:

sudo pmm-admin add mysql --user pmm --password pass --query-source perfschema
4.2.2 使用慢查询收集方式

确保 MySQL 开启了慢查询,在配置文件增加:

log_output=file
slow_query_log=ON
long_query_time=0
log_slow_admin_statements=ON
log_slow_slave_statements=ON

运行 pmm-admin 命令添加监控:

sudo pmm-admin add mysql --user pmm --password pass --query-source slowlog

可以查看增加监控命令的所有选项: pmm-admin add mysql --help

$ sudo pmm-admin add mysql --help
This command adds the given MySQL instance to system, metrics and queries monitoring.

When adding a MySQL instance, this tool tries to auto-detect the DSN and credentials.
If you want to create a new user to be used for metrics collecting, provide --create-user option. pmm-admin will create
a new user '[email protected]' automatically using the given (auto-detected) MySQL credentials for granting purpose.

Table statistics is automatically disabled when there are more than 10000 tables on MySQL.

[name] is an optional argument, by default it is set to the client name of this PMM client.

Usage:
  pmm-admin add mysql [flags] [name]

Examples:
  pmm-admin add mysql --password abc123
  pmm-admin add mysql --password abc123 --create-user
  pmm-admin add mysql --password abc123 --port 3307 instance3307

Flags:
      --create-user                       create a new MySQL user
      --create-user-maxconn uint16        max user connections for a new user (default 10)
      --create-user-password string       optional password for a new MySQL user
      --defaults-file string              path to my.cnf
      --disable-binlogstats               disable binlog statistics
      --disable-processlist               disable process state metrics
      --disable-queryexamples             disable collection of query examples
      --disable-ssl                       disable ssl mode on exporter
      --disable-tablestats                disable table statistics
      --disable-tablestats-limit uint16   number of tables after which table stats are disabled automatically (default 1000)
      --disable-userstats                 disable user statistics
      --force                             force to create/update MySQL user
  -h, --help                              help for mysql
      --host string                       MySQL host
      --password string                   MySQL password
      --port string                       MySQL port
      --query-source string               source of SQL queries: auto, slowlog, perfschema (default "auto")
      --retain-slow-logs int              number of slow logs to retain after rotation (default 1)
      --slow-log-rotation                 enable slow log rotation (default true)
      --socket string                     MySQL socket
      --user string                       MySQL username

Global Flags:
  -c, --config-file string   PMM config file (default "/usr/local/percona/pmm-client/pmm.yml")
      --service-port int     service port
      --skip-root            skip UID check (experimental)
      --timeout duration     timeout (default 5s)
      --verbose              verbose output
4.2.3 查看配置效果
$ sudo pmm-admin list
pmm-admin 1.17.1

PMM Server      | localhost:8001 (password-protected)
Client Name     | ubuntu
Client Address  | 172.17.0.1
Service Manager | linux-systemd

-------------- ------------ ----------- -------- ------------------------------------------ ---------------------------------------------
SERVICE TYPE   NAME         LOCAL PORT  RUNNING  DATA SOURCE                                OPTIONS
-------------- ------------ ----------- -------- ------------------------------------------ ---------------------------------------------
mysql:queries  ubuntu  42002       YES      pmm:***@unix(/var/run/mysqld/mysqld.sock)  query_source=perfschema, query_examples=true
linux:metrics  ubuntu  42000       YES      -


监控界面展示

现在用浏览器可以访问 PMM Server 安装机器的 IP + 端口地址即可以看到监控信息图表话界面,如果 PMM Server 启动时设置了账号和密码,此时需要进行账户验证。

服务器系统信息

服务器信息

MySQL

MySQL Overview

InnoDB

慢查询

慢查询

慢查询2