Cacti磁盘使用百分比
http://blog.chinaunix.net/uid-1886735-id-2810683.html
http://bbs.chinaunix.net/thread-2090625-1-1.html
cacti 监控磁盘按使用率报警接入方法 (2007-11-28 11:35)
分类: Monitor
vim include/config_arrays.php
$custom_data_source_types = array( "CURRENT_DATA_SOURCE" => "Current Graph Item Data Source", "ALL_DATA_SOURCES_NODUPS" => "All Data Sources (Don't Include Duplicates)", "ALL_DATA_SOURCES_DUPS" => "All Data Sources (Include Duplicates)", "CURRENT_DS_MINIMUM_VALUE" => "Current Data Source Item: Minimum Value", "SIMILAR_DATA_SOURCES_NODUPS" => "All Similar Data Sources (Don't Include Duplicates)", "CURRENT_DS_MAXIMUM_VALUE" => "Current Data Source Item: Maximum Value", "CURRENT_GRAPH_MINIMUM_VALUE" => "Graph: Lower Limit", "CURRENT_GRAPH_MAXIMUM_VALUE" => "Graph: Upper Limit", "VALUE_OF_HDD_TOTAL" => "Value of hdd_total data source"); |
vim plugins/thold/thold-functions.php
switch ($cdef['value']) { case 'CURRENT_DATA_SOURCE': $cdef['value'] = $oldvalue; // get_current_value($rra, $ds, 0); break; case 'VALUE_OF_HDD_TOTAL': $cdef['value'] = get_current_value($rra, 'hdd_total', 0); break; |
在cacti界面添加 cdef模块
cdef=CURRENT_DATA_SOURCE,100,*,VALUE_OF_HDD_TOTAL,/ |
最后添加监控磁盘模块时候选择hdd_used 就OK拉!
=============================================
本文本自王先进's blog,原文链接http://www.wangxianjin.cn/?action=show&id=83转载请注明出处。 cacti本身的模板只可以监控硬盘的使用大小,而不能监控使用非分率,所以我们要自定义cdef来监控硬盘使用率,并借助thold插件实现报警功能。网上找的资料都是在cacti.0.8.6版上实现的,而我用的是cacti.0.8.7版。因此,根据实际情况做如下改动: 在cacti目录下,vi global_arrays.php 搜索custom_data_source_types,修改这一段如下: $custom_data_source_types = array( "CURRENT_DATA_SOURCE" => "Current Graph Item Data Source", "ALL_DATA_SOURCES_NODUPS" => "All Data Sources (Don't Include Duplicates)", "ALL_DATA_SOURCES_DUPS" => "All Data Sources (Include Duplicates)", "SIMILAR_DATA_SOURCES_NODUPS" => "All Similar Data Sources (Don't Include Duplicates)", "SIMILAR_DATA_SOURCES_DUPS" => "All Similar Data Sources (Include Duplicates)", "CURRENT_DS_MINIMUM_VALUE" => "Current Data Source Item: Minimum Value", "CURRENT_DS_MAXIMUM_VALUE" => "Current Data Source Item: Maximum Value", "CURRENT_GRAPH_MINIMUM_VALUE" => "Graph: Lower Limit", "CURRENT_GRAPH_MAXIMUM_VALUE" => "Graph: Upper Limit", "VALUE_OF_HDD_TOTAL" => "Value of hdd_total data source"); 在cacti界面的Graph Management-cdefs新建cdef模块,名字自己起,添加字段如下: Item #1 Special Data Source: CURRENT_DATA_SOURCE Item #2 Custom String: 100 Item #3 Operator: * Item #4 Special Data Source: VALUE_OF_HDD_TOTAL Item #5 Operator: / 也就是说 cdef=CURRENT_DATA_SOURCE,100,*,VALUE_OF_HDD_TOTAL,/ 这样就可以在Threshold Templates里面添加监控硬盘的模块了,我添加的是Host MIB - Hard Drive Space ,最后在Threshold CDEF里面选择刚自定义的cdef,这样就可以正常监控硬盘使用率了。 |
=============================================
=============================================
=============================================
Hi,
i wanted to make a threshold based on % of used disk space (i saw few suggestions about this but none of them worked for me). However, i was able to do it after little modifications of cacti and threshold plugin
I'm polling disk total capacity and present usage using standard template Host MIB - Available Disk Space (screen01)
Step 1: I created new CDEF (screen02)
cdef=CURRENT_DATA_SOURCE,100,*,VALUE_OF_HDD_TOTAL,/
To get 'VALUE_OF_HDD_TOTAL' please add one line to file include/config_arrays.php
Step 2: After adding new CDEF, one more modification to file plugins/thold/thold-functions.php is needed:
Step 3: After that, i created threshold template for data field "hdd_used " (screen03)
Step 4: At the bottom, select CDEF you created in step 1 ("Threshold CDEF Apply this CDEF before returning the data"). Save and wait 2 polling cycles. After that you should see current value in %! (screen04)
Forgive me my poor english.
i wanted to make a threshold based on % of used disk space (i saw few suggestions about this but none of them worked for me). However, i was able to do it after little modifications of cacti and threshold plugin
I'm polling disk total capacity and present usage using standard template Host MIB - Available Disk Space (screen01)
Step 1: I created new CDEF (screen02)
cdef=CURRENT_DATA_SOURCE,100,*,VALUE_OF_HDD_TOTAL,/
To get 'VALUE_OF_HDD_TOTAL' please add one line to file include/config_arrays.php
Code:
$custom_data_source_types = array(
"CURRENT_DATA_SOURCE" => "Current Graph Item Data Source",
"ALL_DATA_SOURCES_NODUPS" => "All Data Sources (Don't Include Duplicates)",
"ALL_DATA_SOURCES_DUPS" => "All Data Sources (Include Duplicates)",
"CURRENT_DS_MINIMUM_VALUE" => "Current Data Source Item: Minimum Value",
"SIMILAR_DATA_SOURCES_NODUPS" => "All Similar Data Sources (Don't Include Duplicates)",
"CURRENT_DS_MAXIMUM_VALUE" => "Current Data Source Item: Maximum Value",
"CURRENT_GRAPH_MINIMUM_VALUE" => "Graph: Lower Limit",
"CURRENT_GRAPH_MAXIMUM_VALUE" => "Graph: Upper Limit",
"VALUE_OF_HDD_TOTAL" => "Value of hdd_total data source");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ add this line
"CURRENT_DATA_SOURCE" => "Current Graph Item Data Source",
"ALL_DATA_SOURCES_NODUPS" => "All Data Sources (Don't Include Duplicates)",
"ALL_DATA_SOURCES_DUPS" => "All Data Sources (Include Duplicates)",
"CURRENT_DS_MINIMUM_VALUE" => "Current Data Source Item: Minimum Value",
"SIMILAR_DATA_SOURCES_NODUPS" => "All Similar Data Sources (Don't Include Duplicates)",
"CURRENT_DS_MAXIMUM_VALUE" => "Current Data Source Item: Maximum Value",
"CURRENT_GRAPH_MINIMUM_VALUE" => "Graph: Lower Limit",
"CURRENT_GRAPH_MAXIMUM_VALUE" => "Graph: Upper Limit",
"VALUE_OF_HDD_TOTAL" => "Value of hdd_total data source");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ add this line
Step 2: After adding new CDEF, one more modification to file plugins/thold/thold-functions.php is needed:
Code:
switch ($cdef['value']) {
case 'CURRENT_DATA_SOURCE':
$cdef['value'] = $oldvalue; // get_current_value($rra, $ds, 0);
break;
case 'VALUE_OF_HDD_TOTAL':
$cdef['value'] = get_current_value($rra, 'hdd_total', 0);
break;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ add 3 last lines
case 'CURRENT_DATA_SOURCE':
$cdef['value'] = $oldvalue; // get_current_value($rra, $ds, 0);
break;
case 'VALUE_OF_HDD_TOTAL':
$cdef['value'] = get_current_value($rra, 'hdd_total', 0);
break;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ add 3 last lines
Step 3: After that, i created threshold template for data field "hdd_used " (screen03)
Step 4: At the bottom, select CDEF you created in step 1 ("Threshold CDEF Apply this CDEF before returning the data"). Save and wait 2 polling cycles. After that you should see current value in %! (screen04)
Forgive me my poor english.
Attachments: |
screen01.GIF [ 30.82 KiB | Viewed 16370 times ] |
screen02.GIF [ 8.68 KiB | Viewed 16370 times ] |
screen03.GIF [ 8.37 KiB | Viewed 16370 times ] |
screen04.GIF [ 42.11 KiB | Viewed 16370 times ] |
=============================================
=============================================
=============================================
http://north-m.blogspot.com/2011/11/cacti_4861.html
修改cacti脚本, 增加磁盘使用百分比
最近在部署cacti用来monitor各数据库服务器, 想要设置一个磁盘空间报警, 当分区满90的时候发alert mail, 但是看了现在已经设置的monitor disk space的data source, 里面并没有类似于used_percent项, 又懒得再去找其他的template, 变自己修改已经有的脚本来实现.
首先找到对应的data query:
首先找到对应的data query:
我们知道了这个data query对应的xml文件, 于是找到这个xml文件, 编辑, 在field中增加一项:
<fields> <hrStorageIndex> <name>Index</name> <direction>input</direction> <query_name>index</query_name> </hrStorageIndex> ...... <hrStorageUsedPercent> <name>Used Percent</name> <direction>output</direction> <query_name>used_percent</query_name> </hrStorageUsedPercent> |
从这个文件中我们也可以看出, 所用的php文件:
<script_path>|path_cacti|/scripts/ss_host_disk.php</script_path> |
对应编辑这个php文件(不会php, 只能看着改了):
if ($cmd == "index") { $return_arr = ss_host_disk_reindex(cacti_snmp_walk($hostname, $snmp_community, $oids["index"], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER)); for ($i=0;($i<sizeof($return_arr));$i++) { print $return_arr[$i] . "\n"; } }elseif ($cmd == "num_indexes") { $return_arr = ss_host_disk_reindex(cacti_snmp_walk($hostname, $snmp_community, $oids["index"], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER)); print sizeof($return_arr); }elseif ($cmd == "query") { $arg = $arg1; $arr_index = ss_host_disk_reindex(cacti_snmp_walk($hostname, $snmp_community, $oids["index"], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER)); $arr = ss_host_disk_reindex(cacti_snmp_walk($hostname, $snmp_community, $oids[$arg], $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, $max_oids, SNMP_POLLER)); for ($i=0;($i<sizeof($arr_index));$i++) { print $arr_index[$i] . "!" . $arr[$i] . "\n"; } }elseif ($cmd == "get") { $arg = $arg1; $index = $arg2; if ($arg == "used_percent") { $sau_used = preg_replace("/[^0-9]/i", "", db_fetch_cell("select field_value from host_snmp_cache where host_id=$host_id and field_name='hrStorageAllocationUnits' and snmp_index='$index'")); $snmp_used = cacti_snmp_get($hostname, $snmp_community, $oids["used"] . ".$index", $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol,$snmp_priv_passphrase,$snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, SNMP_POLLER); if($snmp_data_used<0){ $used = (abs($snmp_used) + 2147483647) * $sau_used; } else { $used = $snmp_used * $sau_used; } $sau_total = preg_replace("/[^0-9]/i", "", db_fetch_cell("select field_value from host_snmp_cache where host_id=$host_id and field_name='hrStorageAllocationUnits' and snmp_index='$index'")); $snmp_total = cacti_snmp_get($hostname, $snmp_community, $oids["total"] . ".$index", $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol,$snmp_priv_passphrase,$snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, SNMP_POLLER); if($snmp_total<0){ $total = (abs($snmp_total) + 2147483647) * $sau_total; } else { $total = $snmp_total * $sau_total; } return number_format($used * 100 / $total, 2); } if (($arg == "total") || ($arg == "used")) { $sau = preg_replace("/[^0-9]/i", "", db_fetch_cell("select field_value from host_snmp_cache where host_id=$host_id and field_name='hrStorageAllocationUnits' and snmp_index='$index'")); $snmp_data = cacti_snmp_get($hostname, $snmp_community, $oids[$arg] . ".$index", $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol,$snmp_priv_passphrase,$snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, SNMP_POLLER); if($snmp_data<0){ return (abs($snmp_data) + 2147483647) * $sau; } else { return $snmp_data * $sau; } }else{ return cacti_snmp_get($hostname, $snmp_community, $oids[$arg] . ".$index", $snmp_version, $snmp_auth_username, $snmp_auth_password, $snmp_auth_protocol,$snmp_priv_passphrase,$snmp_priv_protocol, $snmp_context, $snmp_port, $snmp_timeout, $ping_retries, SNMP_POLLER); } } |
接下来就可以到cacti中操作了:
在data template中增加一个:
在data query中关联graph template以及 date template的地方:
然后修改graph template(其实应该没有必要这么加, 因为这个百分比相对于磁盘大小来说实在太小了, 在同一张图里面根本显示不出来, 只是我现在没研究透, 就全加了):
然后我们就可以添加threshold了.
============================================================
Cacti监控磁盘
2010-05-07 0:06
1 cacti 模板 snmpdiskio-0.94
2 修改/etc/snmp/snmpd.conf加入下面几行, 记得重启snmpd
exec .1.3.6.1.4.1.2021.54 hdNum /usr/local/bin/snmpdiskio hdNum
exec .1.3.6.1.4.1.2021.55 hdIndex /usr/local/bin/snmpdiskio hdIndex exec .1.3.6.1.4.1.2021.56 hdDescr /usr/local/bin/snmpdiskio hdDescr exec .1.3.6.1.4.1.2021.57 hdInBlocks /usr/local/bin/snmpdiskio hdInBlocks exec .1.3.6.1.4.1.2021.58 hdOutBlocks /usr/local/bin/snmpdiskio hdOutBlocks 3 将下载的snmpdisjio.tar.gz解开
tar zxvf snmpdiskio-0.9.4.tar.gz
4 将 cp snmpdiskio /usr/local/bin/.
cp partition.xml /cacti目录/resource/snmp_queries/.
5 进入cacti,导入模板
cacti-->console--->Import/Export--->Import Templates
"cacti_data_query_snmp_disk_statistics.xml
cacti_graph_template_disk_io_bytessec.xml"
6 进入cacti,建立一个新Graph From:http://blog.chinaunix.net/u/2914/showart_1981487.html |