Сервер скрипт положить |cacti_path|/resourse/script-server/
juniper_cos_interfaces:
<interface>
<name>Get Interface Traffic Information</name>
<script_path>/var/cacti/scripts/query_juniper_cos.php</script_path>
<script_server>php</script_server>
<script_function>query_cos</script_function>
<arg_prepend>|host_hostname| |host_snmp_community|:|host_snmp_version|:|host_snmp_port|:|host_snmp_timeout|:|host_snmp_username|:|host_snmp_password|</arg_prepend>
<arg_index>index</arg_index>
<arg_query>query</arg_query>
<arg_get>get</arg_get>
<output_delimeter>!</output_delimeter>
<index_order>ifIndex</index_order>
<index_order_type>numeric</index_order_type>
<index_title_format>|chosen_order_field|</index_title_format>
<fields>
<ifIndex>
<name>Index</name>
<direction>input</direction>
<query_name>index</query_name>
</ifIndex>
<ifStatus>
<name>Status</name>
<direction>input</direction>
<query_name>ifStatus</query_name>
</ifStatus>
<ifDescription>
<name>Description</name>
<direction>input</direction>
<query_name>ifDescription</query_name>
</ifDescription>
<ifName>
<name>Name</name>
<direction>input</direction>
<query_name>ifName</query_name>
</ifName>
<ifAlias>
<name>Alias</name>
<direction>input</direction>
<query_name>ifAlias</query_name>
</ifAlias>
<ifType>
<name>Type</name>
<direction>input</direction>
<query_name>ifType</query_name>
</ifType>
<ifSpeed>
<name>Speed</name>
<direction>input</direction>
<query_name>ifSpeed</query_name>
</ifSpeed>
<queued.0>
<name>Queued packets Q nro 0</name>
<direction>input</direction>
<query_name>queued.0</query_name>
</queued.0>
<queued.1>
<name>Queued packets Q nro 1</name>
<direction>input</direction>
<query_name>queued.1</query_name>
</queued.1>
<queued.2>
<name>Queued packets Q nro 2</name>
<direction>input</direction>
<query_name>queued.2</query_name>
</queued.2>
<queued.3>
<name>Queued packets Q nro 3</name>
<direction>input</direction>
<query_name>queued.3</query_name>
</queued.3>
<queued.4>
<name>Queued packets Q nro 4</name>
<direction>input</direction>
<query_name>queued.4</query_name>
</queued.4>
<queued.5>
<name>Queued packets Q nro 5</name>
<direction>input</direction>
<query_name>queued.5</query_name>
</queued.5>
<queued.6>
<name>Queued packets Q nro 6</name>
<direction>input</direction>
<query_name>queued.6</query_name>
</queued.6>
<queued.7>
<name>Queued packets Q nro 7</name>
<direction>input</direction>
<query_name>queued.7</query_name>
</queued.7>
<dropped.0>
<name>Dropped packets Q nro 0</name>
<direction>input</direction>
<query_name>dropped.0</query_name>
</dropped.0>
<dropped.1>
<name>Dropped packets Q nro 1</name>
<direction>input</direction>
<query_name>dropped.1</query_name>
</dropped.1>
<dropped.2>
<name>Dropped packets Q nro 2</name>
<direction>input</direction>
<query_name>dropped.2</query_name>
</dropped.2>
<dropped.3>
<name>Dropped packets Q nro 3</name>
<direction>input</direction>
<query_name>dropped.3</query_name>
</dropped.3>
<dropped.4>
<name>Dropped packets Q nro 4</name>
<direction>input</direction>
<query_name>dropped.4</query_name>
</dropped.4>
<dropped.5>
<name>Dropped packets Q nro 5</name>
<direction>input</direction>
<query_name>dropped.5</query_name>
</dropped.5>
<dropped.6>
<name>Dropped packets Q nro 6</name>
<direction>input</direction>
<query_name>dropped.6</query_name>
</dropped.6>
<dropped.7>
<name>Dropped packets Q nro 7</name>
<direction>input</direction>
<query_name>dropped.7</query_name>
</dropped.7>
<queued.0>
<name>Queued packets Q nro 0</name>
<direction>output</direction>
<query_name>queued.0</query_name>
</queued.0>
<queued.1>
<name>Queued packets Q nro 1</name>
<direction>output</direction>
<query_name>queued.1</query_name>
</queued.1>
<queued.2>
<name>Queued packets Q nro 2</name>
<direction>output</direction>
<query_name>queued.2</query_name>
</queued.2>
<queued.3>
<name>Queued packets Q nro 3</name>
<direction>output</direction>
<query_name>queued.3</query_name>
</queued.3>
<queued.4>
<name>Queued packets Q nro 4</name>
<direction>output</direction>
<query_name>queued.4</query_name>
</queued.4>
<queued.5>
<name>Queued packets Q nro 5</name>
<direction>output</direction>
<query_name>queued.5</query_name>
</queued.5>
<queued.6>
<name>Queued packets Q nro 6</name>
<direction>output</direction>
<query_name>queued.6</query_name>
</queued.6>
<queued.7>
<name>Queued packets Q nro 7</name>
<direction>output</direction>
<query_name>queued.7</query_name>
</queued.7>
<dropped.0>
<name>Dropped packets Q nro 0</name>
<direction>output</direction>
<query_name>dropped.0</query_name>
</dropped.0>
<dropped.1>
<name>Dropped packets Q nro 1</name>
<direction>output</direction>
<query_name>dropped.1</query_name>
</dropped.1>
<dropped.2>
<name>Dropped packets Q nro 2</name>
<direction>output</direction>
<query_name>dropped.2</query_name>
</dropped.2>
<dropped.3>
<name>Dropped packets Q nro 3</name>
<direction>output</direction>
<query_name>dropped.3</query_name>
</dropped.3>
<dropped.4>
<name>Dropped packets Q nro 4</name>
<direction>output</direction>
<query_name>dropped.4</query_name>
</dropped.4>
<dropped.5>
<name>Dropped packets Q nro 5</name>
<direction>output</direction>
<query_name>dropped.5</query_name>
</dropped.5>
<dropped.6>
<name>Dropped packets Q nro 6</name>
<direction>output</direction>
<query_name>dropped.6</query_name>
</dropped.6>
<dropped.7>
<name>Dropped packets Q nro 7</name>
<direction>output</direction>
<query_name>dropped.7</query_name>
</dropped.7>
</fields>
</interface>
juniper_cos_interfaces:
<interface>
<name>Get Interface Traffic Information</name>
<script_path>/var/cacti/scripts/query_juniper_cos.php</script_path>
<script_server>php</script_server>
<script_function>query_cos</script_function>
<arg_prepend>|host_hostname| |host_snmp_community|:|host_snmp_version|:|host_snmp_port|:|host_snmp_timeout|:|host_snmp_username|:|host_snmp_password|</arg_prepend>
<arg_index>index</arg_index>
<arg_query>query</arg_query>
<arg_get>get</arg_get>
<output_delimeter>!</output_delimeter>
<index_order>ifIndex</index_order>
<index_order_type>numeric</index_order_type>
<index_title_format>|chosen_order_field|</index_title_format>
<fields>
<ifIndex>
<name>Index</name>
<direction>input</direction>
<query_name>index</query_name>
</ifIndex>
<ifStatus>
<name>Status</name>
<direction>input</direction>
<query_name>ifStatus</query_name>
</ifStatus>
<ifDescription>
<name>Description</name>
<direction>input</direction>
<query_name>ifDescription</query_name>
</ifDescription>
<ifName>
<name>Name</name>
<direction>input</direction>
<query_name>ifName</query_name>
</ifName>
<ifAlias>
<name>Alias</name>
<direction>input</direction>
<query_name>ifAlias</query_name>
</ifAlias>
<ifType>
<name>Type</name>
<direction>input</direction>
<query_name>ifType</query_name>
</ifType>
<ifSpeed>
<name>Speed</name>
<direction>input</direction>
<query_name>ifSpeed</query_name>
</ifSpeed>
<queued.0>
<name>Queued packets Q nro 0</name>
<direction>input</direction>
<query_name>queued.0</query_name>
</queued.0>
<queued.1>
<name>Queued packets Q nro 1</name>
<direction>input</direction>
<query_name>queued.1</query_name>
</queued.1>
<queued.2>
<name>Queued packets Q nro 2</name>
<direction>input</direction>
<query_name>queued.2</query_name>
</queued.2>
<queued.3>
<name>Queued packets Q nro 3</name>
<direction>input</direction>
<query_name>queued.3</query_name>
</queued.3>
<queued.4>
<name>Queued packets Q nro 4</name>
<direction>input</direction>
<query_name>queued.4</query_name>
</queued.4>
<queued.5>
<name>Queued packets Q nro 5</name>
<direction>input</direction>
<query_name>queued.5</query_name>
</queued.5>
<queued.6>
<name>Queued packets Q nro 6</name>
<direction>input</direction>
<query_name>queued.6</query_name>
</queued.6>
<queued.7>
<name>Queued packets Q nro 7</name>
<direction>input</direction>
<query_name>queued.7</query_name>
</queued.7>
<dropped.0>
<name>Dropped packets Q nro 0</name>
<direction>input</direction>
<query_name>dropped.0</query_name>
</dropped.0>
<dropped.1>
<name>Dropped packets Q nro 1</name>
<direction>input</direction>
<query_name>dropped.1</query_name>
</dropped.1>
<dropped.2>
<name>Dropped packets Q nro 2</name>
<direction>input</direction>
<query_name>dropped.2</query_name>
</dropped.2>
<dropped.3>
<name>Dropped packets Q nro 3</name>
<direction>input</direction>
<query_name>dropped.3</query_name>
</dropped.3>
<dropped.4>
<name>Dropped packets Q nro 4</name>
<direction>input</direction>
<query_name>dropped.4</query_name>
</dropped.4>
<dropped.5>
<name>Dropped packets Q nro 5</name>
<direction>input</direction>
<query_name>dropped.5</query_name>
</dropped.5>
<dropped.6>
<name>Dropped packets Q nro 6</name>
<direction>input</direction>
<query_name>dropped.6</query_name>
</dropped.6>
<dropped.7>
<name>Dropped packets Q nro 7</name>
<direction>input</direction>
<query_name>dropped.7</query_name>
</dropped.7>
<queued.0>
<name>Queued packets Q nro 0</name>
<direction>output</direction>
<query_name>queued.0</query_name>
</queued.0>
<queued.1>
<name>Queued packets Q nro 1</name>
<direction>output</direction>
<query_name>queued.1</query_name>
</queued.1>
<queued.2>
<name>Queued packets Q nro 2</name>
<direction>output</direction>
<query_name>queued.2</query_name>
</queued.2>
<queued.3>
<name>Queued packets Q nro 3</name>
<direction>output</direction>
<query_name>queued.3</query_name>
</queued.3>
<queued.4>
<name>Queued packets Q nro 4</name>
<direction>output</direction>
<query_name>queued.4</query_name>
</queued.4>
<queued.5>
<name>Queued packets Q nro 5</name>
<direction>output</direction>
<query_name>queued.5</query_name>
</queued.5>
<queued.6>
<name>Queued packets Q nro 6</name>
<direction>output</direction>
<query_name>queued.6</query_name>
</queued.6>
<queued.7>
<name>Queued packets Q nro 7</name>
<direction>output</direction>
<query_name>queued.7</query_name>
</queued.7>
<dropped.0>
<name>Dropped packets Q nro 0</name>
<direction>output</direction>
<query_name>dropped.0</query_name>
</dropped.0>
<dropped.1>
<name>Dropped packets Q nro 1</name>
<direction>output</direction>
<query_name>dropped.1</query_name>
</dropped.1>
<dropped.2>
<name>Dropped packets Q nro 2</name>
<direction>output</direction>
<query_name>dropped.2</query_name>
</dropped.2>
<dropped.3>
<name>Dropped packets Q nro 3</name>
<direction>output</direction>
<query_name>dropped.3</query_name>
</dropped.3>
<dropped.4>
<name>Dropped packets Q nro 4</name>
<direction>output</direction>
<query_name>dropped.4</query_name>
</dropped.4>
<dropped.5>
<name>Dropped packets Q nro 5</name>
<direction>output</direction>
<query_name>dropped.5</query_name>
</dropped.5>
<dropped.6>
<name>Dropped packets Q nro 6</name>
<direction>output</direction>
<query_name>dropped.6</query_name>
</dropped.6>
<dropped.7>
<name>Dropped packets Q nro 7</name>
<direction>output</direction>
<query_name>dropped.7</query_name>
</dropped.7>
</fields>
</interface>
Это положить в |cacti_path|/scripts/
#!/usr/bin/php
<?php
$debug=0;
ini_set('display_errors',0);
error_reporting(E_ALL);
# deactivate http headers
$no_http_headers = true;
# include some cacti files for ease of use
/* do NOT run this script through a web browser */
if (!isset($_SERVER["argv"][0]) || isset($_SERVER['REQUEST_METHOD']) || isset($_SERVER['REMOTE_ADDR'])) {
die("<br><strong>This script is only meant to run at the command line.</strong>");
}
$no_http_headers = true;
error_reporting(0);
//array_shift($_SERVER["argv"]);
include_once(dirname(__FILE__) . "/../include/global.php");
include_once(dirname(__FILE__) . "/../lib/snmp.php");
include_once(dirname(__FILE__) . "/../lib/ping.php");
writelog ("Start script**************************************\n"," ");
if (!isset($called_by_script_server))
{
include_once(dirname(__FILE__) . "/../include/global.php");
include_once(dirname(__FILE__) . "/../lib/snmp.php");
include_once(dirname(__FILE__) . "/../lib/ping.php");
writelog ("Called without script server\n"," ");
// array_shift($_SERVER["argv"]);
array_shift($_SERVER["argv"]);
while (count($_SERVER["argv"])<5)
{array_push($_SERVER["argv"],"");}
$result=call_user_func_array("query_cos", $_SERVER["argv"]);
// print ($result);
}
#
#
#
function query_cos($hostname,$snmp_auth,$cmd,$query_field,$query_index)
{
$snmp = explode(":", $snmp_auth);
$snmp_community = $snmp[0];
$snmp_version = $snmp[1];
$snmp_port = $snmp[2];
$snmp_timeout = $snmp[3];
$snmp_user = "";
$snmp_pw = "";
if ($snmp_version == 3)
{
$snmp_user = $snmp[4];
$snmp_pw = $snmp[5];
}
if (!isset($query_field)) {$query_field="";}
if (!isset($query_index)) {$query_index="";}
# define all OIDs we need for further processing
writelog("Getting data hostname=",$hostname);
writelog("Getting data snmp=",$snmp_auth);
writelog("Getting data cmd=",$cmd);
writelog("Getting data 1=",$query_field);
writelog("Getting data 2=",$query_index);
$oids = array(
"index" => ".1.3.6.1.2.1.2.2.1.1",
"ifStatus" => ".1.3.6.1.2.1.2.2.1.8",
"ifDescription" => ".1.3.6.1.2.1.2.2.1.2",
"ifName" => ".1.3.6.1.2.1.31.1.1.1.1",
"ifAlias" => ".1.3.6.1.2.1.31.1.1.1.18",
"ifType" => ".1.3.6.1.2.1.2.2.1.3",
"ifSpeed" => ".1.3.6.1.2.1.2.2.1.5",
"ifHWaddress" => ".1.3.6.1.2.1.2.2.1.6",
"ifInOctets" => ".1.3.6.1.2.1.2.2.1.10",
"ifOutOctets" => ".1.3.6.1.2.1.2.2.1.16",
"FcIdName" => ".1.3.6.1.4.1.2636.3.15.3.1.2",
"FabricPriority" => ".1.3.6.1.4.1.2636.3.15.3.1.3",
"jnxCosQstatTotalRedDropPkts" => ".1.3.6.1.4.1.2636.3.15.4.1.13",
"jnxCosQstatTailDropPkts" => ".1.3.6.1.4.1.2636.3.15.4.1.11",
"jnxCosQstatQedPkts" => ".1.3.6.1.4.1.2636.3.15.4.1.3",
"jnxCosQstatQedBytes" => ".1.3.6.1.4.1.2636.3.15.4.1.5",
"jnxCosQstatTxedPkts" => ".1.3.6.1.4.1.2636.3.15.4.1.7",
"jnxCosQstatTxedBytes" => ".1.3.6.1.4.1.2636.3.15.4.1.9",
"jnxCosQstatTotalRedDropBytes" => ".1.3.6.1.4.1.2636.3.15.4.1.23",
"ifJnxInQDrops" => ".1.3.6.1.4.1.2636.3.3.1.1.11",
);
$xml_delimiter = "!";
# ToDo:
# Separate queued and TX, Bytes & Pkts
# get number of snmp retries from global settings
$snmp_retries = read_config_option("snmp_retries");
ob_start();
if ($cmd == "index") {
# retrieve all indices from target
$return_arr = reindex(cacti_snmp_walk($hostname, $snmp_community, $oids["index"],
$snmp_version, $snmp_user, $snmp_pw, $snmp_port,
$snmp_timeout, $snmp_retries, ""));
# and print each index as a separate line
for ($i=0;($i<sizeof($return_arr));$i++)
{
if (cacti_snmp_get($hostname, $snmp_community, $oids["jnxCosQstatQedPkts"]. "." .$return_arr[$i].".0", $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "") != "" )
{
print ($return_arr[$i] . "\n");
$result="";
}
}
}
elseif ($cmd == "query")
{
$arr_index = reindex(cacti_snmp_walk($hostname, $snmp_community, $oids["index"],
$snmp_version, $snmp_user, $snmp_pw, $snmp_port,
$snmp_timeout, $snmp_retries, ""));
$arr_cosindex = array();
for ($i=0;($i<sizeof($arr_index));$i++)
{
if (cacti_snmp_get($hostname, $snmp_community, $oids["jnxCosQstatQedPkts"]. "." .$arr_index[$i].".0", $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "") != "")
{
array_push ($arr_cosindex, $arr_index[$i]);
}
}
if (strpos($query_field, "queued") !== false)
{
$cosqnro = strstr($query_field, ".");
for ($i=0;($i<sizeof($arr_cosindex));$i++)
{
$new = $oids["jnxCosQstatQedPkts"]. "." .$arr_cosindex[$i]. $cosqnro;
$data=$new;
writelog("Get oid ",$data);
echo "$arr_cosindex[$i]".$xml_delimiter;
$result=cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
echo $result."\n";
}
}
elseif (strpos($query_field, "dropped") !== false)
{
$cosqnro = strstr($query_field, ".");
for ($i=0;($i<sizeof($arr_cosindex));$i++)
{
$new = $oids["jnxCosQstatTotalRedDropPkts"]. "." .$arr_cosindex[$i]. $cosqnro;
$data=$new;
writelog("Get oid ",$data);
echo "\n$arr_cosindex[$i]".$xml_delimiter;
$red = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
$new = $oids["jnxCosQstatTailDropPkts"]. "." .$arr_cosindex[$i]. $cosqnro;
$data=$new;
writelog("Get oid ",$data);
$tail = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
$result=$red + $tail;
echo $result."\n";
}
}
else
{
for ($i=0;($i<sizeof($arr_cosindex));$i++)
{
print $arr_cosindex[$i] . $xml_delimiter;
$result=cacti_snmp_get($hostname, $snmp_community, $oids[$query_field]. "." .$arr_cosindex[$i], $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
echo $result."\n";
}
}
}
elseif ($cmd == "get")
{
writelog("Command = ",$cmd);
if (strpos($query_field, "queued") !== false){
$cosqnro = strstr($query_field, ".");
$new = $oids["jnxCosQstatQedPkts"]. "." .$query_index. $cosqnro;
$data=$new;
writelog("Get oid ",$data);
$result=print (cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, ""));
echo $result."\n";
}
elseif (strpos($query_field, "dropped") !== false)
{
writelog("query field = ",$query_field);
$cosqnro = strstr($query_field, ".");
$new = $oids["jnxCosQstatTotalRedDropPkts"]. "." .$query_index. $cosqnro;
$data=$new;
writelog("Get oid ",$data);
$red = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
writelog("Get red packets ",$red);
$new = $oids["jnxCosQstatTailDropPkts"]. "." .$query_index. $cosqnro;
$data=$new;
writelog("Get oid ",$data);
$tail = cacti_snmp_get($hostname, $snmp_community, $new, $snmp_version, $snmp_user, $snmp_pw, $snmp_port, $snmp_timeout, $snmp_retries, "");
writelog("Get tail packets ",$tail);
$result=$red + $tail;
writelog("red+tail packets ",$result);
echo $result."\n";
}
else
{
$result=cacti_snmp_get($hostname, $snmp_community, $oids[$query_field] .
".$query_index", $snmp_version, $snmp_user, $snmp_pw,
$snmp_port, $snmp_timeout, $snmp_retries, "");
echo $result."\n";
}
}
else
{
print "Invalid use of script query, required parameters:\n\n";
print " <hostname> <community> <version> <snmp_port> <timeout> <user> <pw> <cmd>\n";
}
$captured = ob_get_contents();
ob_end_clean();
echo trim($captured);
return $result;
}
function writelog ($message,$data)
{
global $debug;
if ($debug != 0)
{
$F = fopen("/var/cacti/log/query_juniper_if_cos.log", "a");
fputs($F,"$message $data\n");
fclose($F);
}
}
function reindex($arr) {
$return_arr = array();
for ($i=0;($i<sizeof($arr));$i++) {
$return_arr[$i] = $arr[$i]["value"];
}
return $return_arr;
}
?>
Комментариев нет:
Отправить комментарий