cacti性能優化筆記(面向大規模集群的監控管理)

火星人 @ 2014-03-03 , reply:0


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
《解決方案》

這個頂起來
《解決方案》

老TOM的東西要頂
《解決方案》

好,頂一下



[火星人 via ] cacti性能優化筆記(面向大規模集群的監控管理)已經有491次圍觀

http://www.coctec.com/docs/service/show-post-3036.html