系统监控类

cacti性能优化笔记(面向大规模集群的监控管理)[转]

目标:

单台Cacti服务器,同时监控1000+ Server,50000+ RRD 文件. 保证图表数据的连续和流畅,每一轮数据采集时间控制在3分钟之内。

硬件环境:

Intel(R) Xeon(R) CPU           E5420  @ 2.50GHz  4 cores

4G memory

normal sata disk

优化步骤:

1,优化数据库schema,建立合理的索引

cacti默认的cacti.sql建立的数据库模型,竟然一个Index都没有建。每次执行poller.php的时候,主要的时间,都花费在数据库查询上。使用下面的sql语句,建立一系列索引,弥补默认的cacti.sql中缺乏index的缺点。可以有效的提高poller.php执行的效率,缩短更新RRD文件所需的时间

CREATE INDEX data_template_data_id ON data_input_data (data_template_data_id);

CREATE INDEX host_id_snmp_query_id_snmp_index ON data_local (host_id,snmp_query_id,snmp_index);

CREATE INDEX local_data_id_data_source_name ON data_template_rrd (local_data_id,data_source_name);

CREATE INDEX graph_template_id_local_graph_id ON graph_templates_item (graph_template_id,local_graph_id);
CREATE INDEX local_graph_template_item_id ON graph_templates_item (local_graph_template_item_id);

CREATE INDEX host_id_snmp_query_id_snmp_index ON host_snmp_cache (host_id,snmp_query_id,snmp_index);

CREATE INDEX local_data_id_rrd_path ON poller_item (local_data_id,rrd_path);
CREATE INDEX host_id_rrd_next_step ON poller_item (host_id,rrd_next_step);

CREATE INDEX host_id_snmp_query_id ON host_snmp_cache (host_id,snmp_query_id);

CREATE INDEX host_id_snmp_port ON poller_item (host_id,snmp_port);

CREATE INDEX data_source_path ON data_template_data (data_source_path);

2,使用spine替代默认的cmd.php来采集数据

wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.7e.tar.gz

tar zxvf cacti-spine-0.8.7e.tar.gz

cd cacti-spine-0.8.7e

wget http://www.cacti.net/downloads/spine/patches/snmp_v3_fix.patch
wget http://www.cacti.net/downloads/spine/patches/mysql_client_reconnect.patch
wget http://www.cacti.net/downloads/spine/patches/ping_reliability.patch
patch -p1 -N < snmp_v3_fix.patch
patch -p1 -N < mysql_client_reconnect.patch
patch -p1 -N < ping_reliability.patch

./configure –prefix=cacti_install_dir

make

make install

然后编辑cacti_install_dir/etc/spine.conf

修改DB_HOST DB_DATABASE DB_USER DB_PASSWORD几个参数

最后,在cacti的setting->poller页面里,将poller type设置成spine,同时设置spine的Maximum Threads per Process, Number of PHP Script Servers, Script and Script Server Timeout Value几个参数。

通常会把Maximum Threads per Process设置成cpu * 2。在这里,我们设置成8.

3, 重构rra文件的目录结构,为每个device建立单独的rra目录

首先在crontab里禁用poller.php,然后执行cacti_install_dir/cli目录下的 structure_rra_paths.php,它会将所有的RRD文件按照device重新分配目录,并修改数据库中的RRD路径,成功执行后,再恢复poller.php的crontab就可以了。

按照上面3个步骤,710台服务器,24000个RRD文件,完成一次poller.php的时间,缩短到50 seconds。实现了最初的目的。

TODO:

在执行poller.php的时候, 监控服务器的load达到了3,通过vmstat查看,显示负载主要在I/O。在目前的情况,如果再出现瓶颈,可以考虑安装Boost插件来进一步提供性能。

cacti主要通过snmp来采集数据,可以引入collected等客户端,提供数据采集的可靠性。

原文:http://zys.8800.org/index.php/archives/391

RelatedPost

1 Comment

  1. 您好:
    看了您的文章后受益匪浅,现在还有一个小问题不明白,
    patch -p1 -N < snmp_v3_fix.patch
    patch -p1 -N < mysql_client_reconnect.patch
    patch -p1 -N < ping_reliability.patch
    这三个补丁包,是在哪个路径下执行的,或者说给哪些文件打补丁。
    谢谢!

Leave a Reply

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据