Cacti的優化

lin.tao發表於2013-04-10

伺服器架構研究室blog.linuxhonker.com

Cacti的優化

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);

show index from table; 檢視索引

2, 重構rra檔案的目錄結構,為每個device建立單獨的rra目錄

首先在crontab裡禁用poller.php,然後執行cacti_install_dir/cli目錄下的 structure_rra_paths.php,

php  structure_rra_paths.php –proceed

它會將所有的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等客戶端,提供資料採集的可靠性。

3使用spine替代預設的cmd.php來採集資料 見上一章

1、讓Cacti使用Spine外掛,並進行相關設定
關於spine外掛的安裝,這裡就不講了
訪問:http://cacti_host_ipaddress/cacti
Settings -> Paths -> ”Spine Poller File Path” -> spine程式的位置
Settings -> Poller -> ”Poller Type” -> spine

2、程式調整

對於程式和執行緒的調整有利於縮短採集時間,可以進行大量的採集。在CU論壇上看有人說cacti能夠同時採集1k服務,這樣的效能沒有測試過,但是有人測試過同時採集200臺伺服器的,佔用的內容只有幾百兆,cpu的利用率也很低,說明一臺的普通的機器排除網路鏈路延時採集的效能是相當強悍的

Settings -> Poller -> ”Maximum Concurrent Poller Processes”(最大併發輪詢器程式),修改該值
Settings -> Poller -> ”Maximum Threads per Process”(每程式最大執行緒數),修改該值
Settings -> Poller -> ”Number of PHP Script Servers”(PHP指令碼服務程式數),修改該值
通過修改這三個引數,可以提高一部分的效能

3、增加php 的記憶體使用的上限值
# vi /etc/php.ini
memory_limit = 256M (預設是128MB,根據記憶體的使用情況,可以改大一點)

4、定期 optimize cacti 資料庫
cacti 的 poller_output 會不明原因的長大,大到資料越寫越慢,直到無法更新。每隔一段時間手動 “Truncate poller_output table” 後,就會繼續正常運作;所以我們可以利用crontab定期清除資料
#vi /etc/cron.d/truncate_poller
0 0 * * 0  root  /usr/local/mysql/bin/mysql –user=cacti –password=2010 cacti -e ‘truncate table poller_output;’
#chkconfig –level 3 crond on && service crond start

5、修改mysql的最大連線數

一般預設安裝的時候沒有調整最大連線數的話,當需要併發量的時候可以出圖就會斷斷續續的
mysql> set GLOBAL max_connections=2000;
或者直接修改my.cnf配置檔案,增加:max_connections = 2000;


相關文章