基于WEB-API的单机多实例监控
导读:
作者:蒋乐兴 MySQL-DBA 目前在 github 上维护着两套 MySQL 开源工具 mysqltools & dbm(dbm-agent dbm-center),对机器学习和程序化交易也有些心得。
-
面对的问题
-
解决方案
-
MySQL监控网关安装配置过程
-
环境说明
-
安装配置三步曲
-
体验效果
-
杀手级功能--MySQL自动发现自动监控
一、面对的问题
单机多实例场景下如何“简单”,“高效”,“低成本” 地采集到所有 MySQL 实例的任意监控项呢?
二、解决方案
一个可行的方案是“监控网关”,由它负责采集,聚合,暴露(Restful WEB-API)主机上所有 MySQL 的监控项。为什么是这个方案?dbm-agent 的文档上有对这个问题的详细讨论。下面先来体验一下监控网关带来的改变
通过命令行方式采集 172.16.192.100:3306 这个实例的 MGR 角色
curl http://172.16.192.100:8080/instances/3306/member_role
{
"member_role": "PRIMARY"
}
如果你喜欢用浏览器也是一样的
image最重要的是,要实现上面的效果,MySQL-DBA 们几乎没有工作量也没有任何经济上的成本,节约下来的时间可以做更加有意义的事。
三、MySQL监控网关安装配置过程
(一)环境说明
以一个真实的环境为例子,来说明一下怎么使用
1、 环境的关键信息
关键信息 | 说明 |
---|---|
主机IP | 172.16.192.100 |
操作系统 | centos-7.6 |
Python版本 | 3.6.0 |
MySQL版本 | 8.0.18 |
2、 目前主机上运行着两个实例 3306 & 3308
ps -ef | grep mysqld
mysql33+ 10913 1 0 13:21 ? 00:00:56 /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my-3306.cnf
mysql33+ 10995 1 0 13:25 ? 00:00:54 /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my-3308.cnf
(二)安装配置三步曲
1、 在 MySQL 实例上创建用户,监控网关会通过这个用户连接进 MySQL 并采集监控项
create user monitor@'127.0.0.1' identified by 'dbma@0352';
grant replication client,process on *.* to monitor@'127.0.0.1';
grant select on performance_schema.* to monitor@'127.0.0.1';
2、 安装监控网关程序(它是作为 dbm-agent 程序包的一部分发行的,所以真正要安装的是 dbm-agent)
sudo su
pip3 install dbm-agent # 安装
dbm-agent init # 初始化一下 dbm-agent ,使用 dbm-agent 之前一定要初始化
****3、启动监控网状****
sudo su
dbm-monitor-gateway --bind-ip=172.16.192.100 --bind-port=8080 \
--monitor-user=monitor --monitor-password=dbma@0352 start
Successful start and log file save to '/usr/local/dbm-agent/logs/dbm-monitor-gateway.log'
四、体验效果
1、 查看主机上所有被监控实例的列表
curl http://172.16.192.100:8080/instances
[3306, 3308] # 可以看到 dbm-monitor-gateway 返回了当前主机(172.16.192.100) 上的实例列表
浏览器上的效果
image2****、 查询某一实例的特定监控项(以 com_select 为例)
curl http://172.16.192.100:8080/instances/3306/com_select
{
"com_select": "1702"
}
浏览器上的效果
image3、 查询给定实例的所有监控项
curl http://172.16.192.100:8080/instances/3306/
{
"aborted_clients": "5",
"aborted_connects": "155",
"acl_cache_items_count": "0",
"binlog_cache_disk_use": "0",
"binlog_cache_use": "0",
"binlog_stmt_cache_disk_use": "0",
"binlog_stmt_cache_use": "0",
"bytes_received": "495062",
"bytes_sent": "62005555",
....
....
.... # 监控项太多了,只列出了前面几项
}
浏览器上的效果
image五、杀手级功能--MySQL自动发现自动监控
监控网关最值得称道的功能就是它能自动发现主机上新增的 MySQL 实例,并且它会自动的连接到新增的实例然后开始采集它的监控项。
下面我们在主机上再安装一个监听在 3307 的实例,你并不需要重启监控网关,它的内部有一个专门的线程来检测是否有新增实例。尽可能的让 DBA 省心,是 dbm(dbm-center & dbm-agent) 的使命与追求
dbma-cli-single-instance --max-mem=128 --port=3307 install
一分钟过后 3307 已经被发现了
image另外dbm-monitor-gateway是一个全特性的监控工具,更多、更全的文档。