使用Cacti监控MySQL

本文将概述一些自己在使用中的问题(并不会给出step by step的使用介绍),以供参考,详细信息请留言或mail

既然别人的轮子已经很好用了,我自己就不发明了。使用Cacti可以较为快速搭建一个MySQL性能监控平台:

blogcacti-3


Cacti是一个用于监控网络流量、主机负载的工具,并可以将这些采集到的数值信息转换为图形展示。Cacti使用RRDtool实现数据存储和绘图,可以方便、美观的实现数据图形化。通过给Cacti增加MySQL的监控模板,就能够实现对MySQL相关参数的监控和图形展示。

关于Cacti配合MySQL模板的安装和使用可以参考文章:

一、 安装中的问题

Cacti的安装是一个复杂的工程,需要安装PHP(需要某些模块)、httpd、RRDtool等。

1. php缺少某些模块

如果你用的是默认安装php,你可能甚至连mysql模块都没有,这时候,你需要给你php安装上一些需要的模块。例如:mysql,curl等。

2. RRDtool版本

Cacti使用RRDtool存储数据、绘制图形。这里需要注意的是,在安装好RRDtool后,必需要到Cacti的后台,填写RRDtool的相关配置,例如安装路径、版本等。

二、 使用中的问题

1. 数据接近0的时候,显示奇怪的数据

如下图,在数据接近于0的时候我们会看到数据显示的是100m:
cacti-1

事实上,这里的单位 m 表示微,即需要除以1000。100m表示0.1。

Cacti中使用如下单位:M(兆)、K(千)、m(微)。

2. 日志中的奇怪错误

在Cacti运行一段时间后,我在Cacti的log中看到如下错误:CMDPHP: Poller[0] Host[16] DS[25] WARNING: Result from CMD not valid. Partial Result: U…… 貌似这是一个bug。将Poller Type改为spine可以避免这个问题。

3. 采集到异常数据

Cacti有时会采集到一些异常的数据,例如,采集到一些非常大(比正常数据大100倍)。这时候,绘制图形的时候,会看到纵坐标的比例会被这些数据拉大到K甚至M,以至于正常数据已经无法观察了。

导致这种异常数据的原因有很多,这里给出两个剔除这些异常的办法

  • 先用rrdtool dump出RRA文件中的数据,删除异常数据,然后使用rrdtool restore数据
  • 修改Cacti模板中的Data Source模板,设置一个合理的最大值(Maximum Value)

4. 采集使用的MySQL用户需要什么权限

因为需要执行SHOW /*!50002 GLOBAL */ STATUS、SHOW SLAVE STATUS、SHOW /*!50000 ENGINE*/ INNODB STATUS等权限,所以一般需要如下权限设置:

         GRANT PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'cacti'@'%'

需要注意的是,不需要ALL PRIVILEGES。

三、 一些改进

1. 修改采集、展示数据的步长(interval)

默认下,Cacti是每隔五分钟采集一次数据,并存放到rra文件中,现在希望修改为每隔一份采集、展示相关数据。我们需要做如下修改:

  • 选择console=>Settings=>Poller,把其中的Poller Interval和Cron Interval改为Every Minute。
  • 修改crontab中的采集脚本为*/1 * * * * php /www/cacti/poller.php > /dev/null 2>&1
  • 最后,你还需要修改Data Template中的step值,将其修改为60

2. 批量增加Device

如果待监控的主机数量很多的时候,一台台添加Device是很痛苦的,可以通过编写一些脚本来实现批量增加Device。

这里提供一个编写批量脚本的思路:通过编写一个页面接收添加Device时,需要Post的表单的数据,然后使用curl模拟表单提交。实践证明这种方式是可行的,事实上,我就使用这样的脚本来批量添加Device的。

3. 我的主机端口不是3306

使用mysql-cacti-templates模板的时候,如果你的端口不是3306的话,mysql-cacti-templates中的脚本是无法正确的连接目标主机的MySQL的。这时候,只需对模板中的采集脚本做一个小小的修改就可以了。大约在脚本的226行下面增加如下内容

$conn = @mysql_connect($options['host'], $user, $pass);
    //Modified by orczhou
    //Now we'll try some other Ports.
if ( !$conn ) {
        $conn = @mysql_connect($options['host'].":3307", $user, $pass);
}

这就是我在使用过程中遇到的一些问题与解决,你有什么好的经验呢?分享一下吧

In:

4 responses to “使用Cacti监控MySQL”

  1. 我调整了步长,结果报错了~
    三个地方都修改了,悲剧。
    然后添加各种Device都是unkown类型~
    删除rra里的数据reinstall都再也不能正常监控了。
    好诡异~今晚继续研究这问题。

  2. […] GRANT PROCESS, SUPER, REPLICATION CLIENT ON *.* TO ‘cacti’@’%’ 参考: 使用Cacti监控MySQL […]

  3. 举子

    如果cacti不安装span, cacti貌似就没办法做到每分钟采集一次数据,就算是在crontab中设置1分钟他其实还是5分钟采集一次数据

    “修改crontab中的采集脚本为*/1 * * * * php /www/cacti/poller.php > /dev/null 2>&1”

  4. ruochen

    $conn = @mysql_connect($options[‘host’].”:3307″, $user, $pass);—-没仔细看这个代码,感觉你这样修改,也只能连接3306和3307端口,如果连接更多的端口呢?

Leave a Reply

Your email address will not be published. Required fields are marked *