OneAgent :: 大规模布署下的MySQL监控解决方案,适合公有云、私有云环境!

开始使用MySQL来支持业务后,在分片(Sharding)思想的指导下,布署的实例数越来越多,对运维的监控工作也带来了不少的变化,不仅配备了专门的硬件设备来做监控数据库,以便长期保存和分析监控数据,还要求监控越来越实时,向秒级频率发展,大数据和实时分析最早出现在运维监控领域(如果换成对汽车的监控那就是车联网大数据,换成对人的健康监控就是医疗大数据)。

oneagent_monitor_db

开发一个实时数据采集的Agent程序就变得十分重要,OneAgent是专门为MySQL数据库设计的数据采集程序,但作为MySQL的一个插件存在,不需要单独布署,只要MySQL启动,OneAgent会自动运行,完全省去了布署上的麻烦,安装MySQL时自动安装了OneAgent插件。

mysql> show plugins \G
......
*************************** 39. row ***************************
   Name: partition
 Status: ACTIVE
   Type: STORAGE ENGINE
Library: NULL
License: GPL
39 rows in set (0.00 sec)

作为插件机制存在的OneAgent具有多个优点:

  1. 跳过SQL接口访问MySQL的监控指标,实际上是直接访问内存,可以做到秒级实时数据采集。
  2. 可以得到比SQL接口更多的指标,比如活越事务列表的长度,最长的时间时间等通过SQL看不到的指标。
  3. 自动保存数据到文本文件,也可以同步将性能数据插入到性能数据库(仅需要配置“oneagent_monitordb”参数)。
  4. 在同一个时间点得到全方位的性能指标(主机/文件空间/事务引挚等),便于分析和比较,以便快速定位问题。
  5. 将性能数据通过MySQL状态变量进行输出,可以不登录主机查看所有性能指标,比如在批处理中可以根据后端的负载情况进行智能任务调度。
  6. 遵循MySQL插件接口,已经支持5.6及5.7版本,也可以支持不同的MySQL开源分支版本,比如Percona或MariaDB等。

以一千个MySQL实例的布署规模来计算,每个实例每秒收集一次数据,则监控数据库中每秒接受1000个TPS,用单台的MySQL可以轻松胜任监控数据库的工作,如果查询压力较大,可以考虑使用OneProxy中间件做监控数据库的读写分离;以一万个MySQL实例的布署规模来计算,可以考虑使用中间件来做监控数据库的分库分表,即使实例数到10万或20万的规模,也完全没有任何问题。

当详细的性能数据都进入监控数据库后,则可以使用各种工具进行分析和展示。比如可以直接编写如下SQL来得到某个实例上最近10分钟的CPU利用率。

select day,
        cast(json_extract(data, "$.os_usr") as unsigned ) usr,
        cast(json_extract(data, "$.os_irq") as unsigned ) irq,
        cast(json_extract(data, "$.os_idl") as unsigned ) idl,
        cast(json_extract(data, "$.os_sys") as unsigned ) sys
    from oneagent_perfdata
    where day > date_sub(now(), interval 10 minute)
          and host = 'rh4srv1' and port = 3306
    order by day

也可以方便地使用各种工具来做曲线分析,用PHP语言或者Excel都行。下图是由WebChart工具绘制的CPU曲线图。

webchart_cpu_usage

一般公司内部都已经有现成的监控系统,OneAgent插件的目标是解决监控数据的采集和上传工作,可以让你以极端省心的方式布署监控Agent程序,并得到实时和完整的性能数据。