几个优化 Cacti 监控服务性能的技巧
幾個(gè)優(yōu)化 Cacti 監(jiān)控服務(wù)性能的技巧
by ROBIN on 2011年05月26日 · LEAVE A COMMENT · in NETWORK, 信息世界 | IT
這幾天一直在深入研究 Cacti 的配置,我發(fā)現(xiàn) Cacti 的功能真的很強(qiáng)大,而且大部分的配置和調(diào)試工作只需要在圖形化的界面上做操作即可。由于公司的 Cacti 監(jiān)控服務(wù)器上配置的監(jiān)控端越來越多,所以有些監(jiān)控端出現(xiàn)圖形不連續(xù)的現(xiàn)象,調(diào)高 Cacti 的 log 等級(jí),我在 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 官方手冊(cè)中給出的解釋如下:
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”值設(shè)置為最小值“1”,該問題解決了。但是過了一段時(shí)間圖像又開始斷斷續(xù)續(xù)的,而且生成的 rrd 文件中的數(shù)值都是 NaN,在監(jiān)控服務(wù)器端的命令行下執(zhí)行 snmpwalk 命令,發(fā)現(xiàn)屏幕輸出跑了一些信息后停下來顯示 Timeout: No Response from 10.10.2.91,這是由于網(wǎng)絡(luò)狀況不太好,所以導(dǎo)致 Cacti 服務(wù)沒有完全獲得監(jiān)控端的 SNMP 信息就 Timeout 了。為了證明我的猜測(cè),我在之前的運(yùn)行的 snmpwalk 命令中加入“-t 120”選項(xiàng),結(jié)果 snmpwalk 獲得了完整的監(jiān)控端 SNMP 信息。所以我在 Device 配置界面下設(shè)置“SNMP Timeout”值為 20000,問題徹底解決了,同時(shí)我把“Maximum OID’s Per Get Request”值又重新調(diào)整為默認(rèn)值“10”。這樣可以減少 Cacti 監(jiān)控服務(wù)器訪問監(jiān)控端的 SNMP 服務(wù)的次數(shù)從而提高性能。如果你的網(wǎng)絡(luò)狀況很好的情況下,你可以進(jìn)一步的調(diào)高“Maximum OID’s Per Get Request”值。
Cacti 服務(wù)自帶的輪詢腳本(cmd.php)性能低下,如果監(jiān)控點(diǎn)多的話,平均5分鐘腳本有可能執(zhí)行不完,經(jīng)常導(dǎo)致圖形斷斷續(xù)續(xù),所以我推薦大家采用 spine,它的效率要高于 cmd.php 腳本。由于Cacti 服務(wù)需要寫 rrd 文件記錄監(jiān)控信息,所以在監(jiān)控點(diǎn)多的情況下,會(huì)經(jīng)常性遇到 Disk I/O 的性能瓶頸。所以對(duì) Cacti 監(jiān)控服務(wù)器進(jìn)行一定的性能優(yōu)化配置十分有必要。下面我來介紹幾個(gè)性能優(yōu)化技巧:
1. ?Settings 中修改“poller type”為 Spine,修改 Spine Specific Execution Parameters 里的 Maximum Threads per Process 為監(jiān)控服務(wù)器 cpu 個(gè)數(shù)的2倍。我在實(shí)際的操作中將該值從默認(rèn)值“1”修改為“16”,但是 Poller 的運(yùn)行時(shí)間反倒增加了,再修改為“8”,情況好一些,所以大家可以自己隨意改寫該數(shù)值,然后在 cacti.log 文件中查詢 Poller 輪詢運(yùn)行時(shí)間的變化,然后確定最優(yōu)的方案。如果在 cacti.log 文件中出現(xiàn)如下警告,請(qǐng)按照警告信息在 Cacti 監(jiān)控服務(wù)器端修改相應(yīng)文件的操作權(quá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)建索引。默認(rèn)的 cacti.sql 里一個(gè)索引都沒有,具體操作如下:
[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. 重構(gòu) rra 目錄結(jié)構(gòu),按照 device 劃分 rra 目錄結(jié)構(gòu)。Settings 里的 Paths 選項(xiàng)卡中勾選 “Structured RRA Path (/host_id/local_data_id.rrd)”,如果不成功,請(qǐng)?jiān)诿钚邢聢?zhí)行如下操作:
[root@pubservicedb rra]# /usr/local/php/bin/php /usr/local/apache/htdocs/cacti/cli/structure_rra_paths.php –proceed
網(wǎng)上有人按照這個(gè)優(yōu)化的方案優(yōu)化了 Cacti 監(jiān)控服務(wù),測(cè)試的結(jié)果是:710臺(tái)服務(wù)器,24000個(gè) rrd 文件,完成一次 poller.php 的時(shí)間,縮短到50 seconds。
install spine
Cacti在運(yùn)行的時(shí)候,需要在crontab里添加計(jì)劃任務(wù),默認(rèn)是使用cmd.php來執(zhí)行任務(wù),但效率低下,因此我們用Cactid/Spine來取代cmd.php…
1.編譯 Spine/Cactid
編譯Spine/Cactid之前,先確認(rèn)已經(jīng)安裝以下packages:
net-snmp-devel
mysql
mysql-devel
openssl-devel
Compiling Spine
2.下載最新版本的Spine/Cactid 并編譯成為二進(jìn)制可執(zhí)行文件:
# tar xvzf cacti-spine-0.8.7.tar.gz
# cd spine-0.8.7
# ./configure
# make
# mkdir /usr/local/spine
# cp spine ?spine.conf ?/usr/local/spine
編輯 spine.conf 文件,輸入數(shù)據(jù)庫名、數(shù)據(jù)庫用戶名和密碼等信息.
3.使用管理員帳號(hào)登陸Cacti.在系統(tǒng)參數(shù)中制定Spine/Cactid的物理路徑.
Console -> Configuration -> Settings -> Paths -> Alternate Poller Path -> Spine Poller File Path
Compiling Cactid
Download the latest source distribution of Cactid and run the following commands to get a working binary:
tar xvzf cacti-cactid-0.8.6.tar.gz
cd cactid-0.8.6
./configure
make
Now you must move your new binary, cactid and cactid.conf to a more permanent home such as /usr/local/cactid. Edit the cactid.conf file and specify your database connection information for Cacti.
You should now be ready to start using Cactid!
轉(zhuǎn)載于:https://blog.51cto.com/tonyzeng/1289487
總結(jié)
以上是生活随笔為你收集整理的几个优化 Cacti 监控服务性能的技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-31总结----javascript
- 下一篇: 一个iOS 框架介绍:MKNetwork