幾個優化 Cacti 監控服務性能的技巧

這幾天一直在深入研究 Cacti 的配置,我發現 Cacti 的功能真的很強大,而且大部分的配置和調試工作只需要在圖形化的界面上做操作即可。由於公司的 Cacti 監控服務器上配置的監控端越來越多,所以有些監控端出現圖形不連續的現象,調高 Cacti 的 log 等級,我在 cacti.log 文件中發現如下的警告信息:

05/25/2011 10:55:39 AM – SPINE: Poller[0] Host[46] TH[1] DS[862] WARNING: SNMP timeout detected [500 ms], ignoring host ’10.10.2.91′

05/25/2011 10:55:38 AM – SPINE: Poller[0] Host[46] TH[1] DS[862] WARNING: SNMP timeout detected [500 ms], ignoring host ’10.10.2.91′

Cacti 官方手冊中給出的解釋如下:

For “reasonable” timeouts, this may be related to a snmpbulkwalk issue. To change this, see Settings, Poller and lower the value for The Maximum SNMP OID’s Per SNMP Get Request. Start at a value of 2 and increase it again, if the poller starts working. (1 or less disables snmpbulkwalk) Some agent’s don’t have the horsepower to deliver that many OID’s at a time. Therefore, we can reduce the number for those older/underpowered devices.

我在 Device 配置界面下,將“Maximum OID’s Per Get Request”值設置爲最小值“1”,該問題解決了。但是過了一段時間圖像又開始斷斷續續的,而且生成的 rrd 文件中的數值都是 NaN,在監控服務器端的命令行下執行 snmpwalk 命令,發現屏幕輸出跑了一些信息後停下來顯示 Timeout: No Response from 10.10.2.91,這是由於網絡狀況不太好,所以導致 Cacti 服務沒有完全獲得監控端的 SNMP 信息就 Timeout 了。爲了證明我的猜測,我在之前的運行的 snmpwalk 命令中加入“-t 120”選項,結果 snmpwalk 獲得了完整的監控端 SNMP 信息。所以我在 Device 配置界面下設置“SNMP Timeout”值爲 20000,問題徹底解決了,同時我把“Maximum OID’s Per Get Request”值又重新調整爲默認值“10”。這樣可以減少 Cacti 監控服務器訪問監控端的 SNMP 服務的次數從而提高性能。如果你的網絡狀況很好的情況下,你可以進一步的調高“Maximum OID’s Per Get Request”值。

Cacti 服務自帶的輪詢腳本(cmd.php)性能低下,如果監控點多的話,平均5分鐘腳本有可能執行不完,經常導致圖形斷斷續續,所以我推薦大家採用 spine,它的效率要高於 cmd.php 腳本。由於Cacti 服務需要寫 rrd 文件記錄監控信息,所以在監控點多的情況下,會經常性遇到 Disk I/O 的性能瓶頸。所以對 Cacti 監控服務器進行一定的性能優化配置十分有必要。下面我來介紹幾個性能優化技巧:

1.  Settings 中修改“poller type”爲 Spine,修改 Spine Specific Execution Parameters 裏的 Maximum Threads per Process 爲監控服務器 cpu 個數的2倍。我在實際的操作中將該值從默認值“1”修改爲“16”,但是 Poller 的運行時間反倒增加了,再修改爲“8”,情況好一些,所以大家可以自己隨意改寫該數值,然後在 cacti.log 文件中查詢 Poller 輪詢運行時間的變化,然後確定最優的方案。如果在 cacti.log 文件中出現如下警告,請按照警告信息在 Cacti 監控服務器端修改相應文件的操作權限。

05/25/2011 09:00:02 AM – SPINE: Poller[0] WARNING: Spine NOT running asroot. This is required if using ICMP. Please run “chmod +s;chown root:root spine” to resolve.

2. 給 Cacti 的 MySQL數據庫中的表創建索引。默認的 cacti.sql 裏一個索引都沒有,具體操作如下:

[root@pubservicedb rra]# mysql -uroot

mysql> use cacti;
Database changed

mysql> CREATE INDEX `data_template_data_id` ON `data_input_data` (`data_template_data_id`);
Query OK, 7498 rows affected (0.09 sec)
Records: 7498 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX `host_id_snmp_query_id_snmp_index` ON data_local (`host_id`,`snmp_query_id`,`snmp_index`);
Query OK, 333 rows affected (0.04 sec)
Records: 333 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX `local_data_id_data_source_name` ON data_template_rrd (`local_data_id`,`data_source_name`);
Query OK, 742 rows affected (0.05 sec)
Records: 742 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX `graph_template_id_local_graph_id` ON graph_templates_item (`graph_template_id`,`local_graph_id`);
Query OK, 2887 rows affected (0.08 sec)
Records: 2887 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX `local_graph_template_item_id` ON graph_templates_item (`local_graph_template_item_id`);
Query OK, 2887 rows affected (0.07 sec)
Records: 2887 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX `host_id_snmp_query_id_snmp_index` ON host_snmp_cache (`host_id`,`snmp_query_id`,`snmp_index`);
Query OK, 1012 rows affected (0.09 sec)
Records: 1012 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX `local_data_id_rrd_path` ON poller_item (`local_data_id`,`rrd_path`);
Query OK, 416 rows affected (0.04 sec)
Records: 416 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX `host_id_rrd_next_step` ON poller_item (`host_id`,`rrd_next_step`);
Query OK, 416 rows affected (0.05 sec)
Records: 416 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX host_id_snmp_query_id ON host_snmp_cache (host_id,snmp_query_id);
Query OK, 1012 rows affected (0.07 sec)
Records: 1012 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX host_id_snmp_port ON poller_item (host_id,snmp_port);
Query OK, 416 rows affected (0.05 sec)
Records: 416 Duplicates: 0 Warnings: 0

mysql> CREATE INDEX data_source_path ON data_template_data (data_source_path);
Query OK, 414 rows affected (0.04 sec)
Records: 414 Duplicates: 0 Warnings: 0

mysql>

3. 重構 rra 目錄結構,按照 device 劃分 rra 目錄結構。Settings 裏的 Paths 選項卡中勾選 “Structured RRA Path (/host_id/local_data_id.rrd)”,如果不成功,請在命令行下執行如下操作:

[root@pubservicedb rra]# /usr/local/php/bin/php /usr/local/apache/htdocs/cacti/cli/structure_rra_paths.php –proceed

網上有人按照這個優化的方案優化了 Cacti 監控服務,測試的結果是:710臺服務器,24000個 rrd 文件,完成一次 poller.php 的時間,縮短到50 seconds。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章