這幾天一直在深入研究 Cacti 的配置,,我發(fā)現(xiàn) Cacti 的功能真的很強大,,而且大部分的配置和調(diào)試工作只需要在圖形化的界面上做操作即可,。由于公司的 Cacti 監(jiān)控服務器上配置的監(jiān)控端越來越多,所以有些監(jiān)控端出現(xiàn)圖形不連續(xù)的現(xiàn)象,,調(diào)高 Cacti 的 log 等級,,我在 cacti.log 文件中發(fā)現(xiàn)如下的警告信息:
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”,,該問題解決了,。但是過了一段時間圖像又開始斷斷續(xù)續(xù)的,而且生成的 rrd 文件中的數(shù)值都是 NaN,,在監(jiān)控服務器端的命令行下執(zhí)行 snmpwalk 命令,,發(fā)現(xiàn)屏幕輸出跑了一些信息后停下來顯示 Timeout: No Response from 10.10.2.91,這是由于網(wǎng)絡狀況不太好,,所以導致 Cacti 服務沒有完全獲得監(jiān)控端的 SNMP 信息就 Timeout 了,。為了證明我的猜測,我在之前的運行的 snmpwalk 命令中加入“-t 120”選項,,結果 snmpwalk 獲得了完整的監(jiān)控端 SNMP 信息。所以我在 Device 配置界面下設置“SNMP Timeout”值為 20000,,問題徹底解決了,,同時我把“Maximum OID’s Per Get Request”值又重新調(diào)整為默認值“10”。這樣可以減少 Cacti 監(jiān)控服務器訪問監(jiān)控端的 SNMP 服務的次數(shù)從而提高性能,。如果你的網(wǎng)絡狀況很好的情況下,,你可以進一步的調(diào)高“Maximum OID’s Per Get Request”值。
Cacti 服務自帶的輪詢腳本(cmd.php)性能低下,,如果監(jiān)控點多的話,,平均5分鐘腳本有可能執(zhí)行不完,經(jīng)常導致圖形斷斷續(xù)續(xù),,所以我推薦大家采用 spine,,它的效率要高于 cmd.php 腳本。由于Cacti 服務需要寫 rrd 文件記錄監(jiān)控信息,,所以在監(jiān)控點多的情況下,,會經(jīng)常性遇到 Disk I/O 的性能瓶頸。所以對 Cacti 監(jiān)控服務器進行一定的性能優(yōu)化配置十分有必要,。下面我來介紹幾個性能優(yōu)化技巧:
1. Settings 中修改“poller type”為 Spine,,修改 Spine Specific Execution Parameters 里的 Maximum Threads per Process 為監(jiān)控服務器 cpu 個數(shù)的2倍。我在實際的操作中將該值從默認值“1”修改為“16”,,但是 Poller 的運行時間反倒增加了,,再修改為“8”,情況好一些,,所以大家可以自己隨意改寫該數(shù)值,,然后在 cacti.log 文件中查詢 Poller 輪詢運行時間的變化,然后確定最優(yōu)的方案。如果在 cacti.log 文件中出現(xiàn)如下警告,,請按照警告信息在 Cacti 監(jiān)控服務器端修改相應文件的操作權限,。
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數(shù)據(jù)庫中的表創(chuàng)建索引。默認的 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)”,,如果不成功,,請在命令行下執(zhí)行如下操作:
[root@pubservicedb rra]# /usr/local/php/bin/php /usr/local/apache/htdocs/cacti/cli/structure_rra_paths.php –proceed
網(wǎng)上有人按照這個優(yōu)化的方案優(yōu)化了 Cacti 監(jiān)控服務,測試的結果是:710臺服務器,,24000個 rrd 文件,,完成一次 poller.php 的時間,縮短到50 seconds,。
如果再出現(xiàn)瓶頸,,可以考慮安裝 Boost 插件來進一步提升性能。我會在未來寫一篇關于 Boost 插件的安裝與應用的文章,,感興趣的朋友可以關注,。
|