Cacti的優(yōu)化技巧
Cacti優(yōu)化
1,優(yōu)化數(shù)據(jù)庫schema,建立合理的索引
cacti默認(rèn)的cacti.sql建立的數(shù)據(jù)庫模型,竟然一個(gè)Index都沒有建。每次執(zhí)行poller.php的時(shí)候,主要的時(shí)間,都花費(fèi)在數(shù)據(jù)庫查詢上。使用下面的sql語句,建立一系列索引,彌補(bǔ)默認(rèn)的cacti.sql中缺乏index的缺點(diǎn)??梢杂行У奶岣遬oller.php執(zhí)行的效率,縮短更新RRD文件所需的時(shí)間
- 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替代默認(rèn)的cmd.php來采集數(shù)據(jù)
- 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/s ... ent_reconnect.patch
- wget http://www.cacti.net/downloads/s ... g_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幾個(gè)參數(shù)
最后,在cacti的setting->poller頁面里,將poller type設(shè)置成spine,同時(shí)設(shè)置spine的Maximum Threads per Process, Number of PHP Script Servers, Script and Script Server Timeout Value幾個(gè)參數(shù)。
通常會(huì)把Maximum Threads per Process設(shè)置成cpu * 2。在這里,我們設(shè)置成8.
3, 重構(gòu)rra文件的目錄結(jié)構(gòu),為每個(gè)device建立單獨(dú)的rra目錄
首先在crontab里禁用poller.php,然后執(zhí)行cacti_install_dir/cli目錄下的 structure_rra_paths.php,它會(huì)將所有的RRD文件按照device重新分配目錄,并修改數(shù)據(jù)庫中的RRD路徑,成功執(zhí)行后,再恢復(fù)poller.php的crontab就可以了。
按照上面3個(gè)步驟,710臺(tái)服務(wù)器,24000個(gè)RRD文件,完成一次poller.php的時(shí)間,縮短到50 seconds。實(shí)現(xiàn)了最初的目的。
TODO:
在執(zhí)行poller.php的時(shí)候, 監(jiān)控服務(wù)器的load達(dá)到了3,通過vmstat查看,顯示負(fù)載主要在I/O。在目前的情況,如果再出現(xiàn)瓶頸,可以考慮安裝Boost插件來進(jìn)一步提供性能。
cacti主要通過snmp來采集數(shù)據(jù),可以引入collected等客戶端,提供數(shù)據(jù)采集的可靠性。
【編輯推薦】