jimi-ul mi psal PM s prosbou o lehke nakopnuti spravnym smerem, tak pridavam nestihn reseni, tedy prosim nekamenovat, je to sepsane behem slabe ctvrt hodky u kavy ... 8) :
Jo a otereticky by sel pouzit misto "velkeho Cacti" Criket ...
http://cricket.sourceforge.net/
... nasleduje vlastne citace e-mailu/PMka ...
Sice je k tomu vse v anglictine, ale pripadne Google translator poradi ...
V principu jde o toto:
- v Mikrotiku kde jsou elementy na odecitani (FW pravidla ci shapping) povolit SNMP a zvolit si svoji komunitu (heslo pro komunikaci = nepouzivat publicú
- na serveru si pomoci snmpwalk -v2c -c komunita ip-adresa OID vypises co treba ...
- snmpwalk -v2c -c KOmunita ap-test06 .1.3.6.1.4.1.14988.1.1.2.1.1 - to je seznam SimpleQueue se vsemi parametry
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.2.1 = STRING: "Test1"
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.3.1 = IpAddress: 192.168.1.0
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.4.1 = IpAddress: 255.255.255.0
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.5.1 = IpAddress: 0.0.0.0
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.6.1 = IpAddress: 0.0.0.0
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.7.1 = INTEGER: 0
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.8.1 = Counter64: 0 <- bajty (octety) IN
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.9.1 = Counter64: 9388 <- bajty (octety) OUT
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.10.1 = Counter32: 0 <- pakety IN
SNMPv2-SMI::enterprises.14988.1.1.2.1.1.11.1 = Counter32: 98 <- packety OUT
Tedy pak staci se kazdych 5 minut v cronu pres skript ptat na prosle bajty a pocitat si to z toho co DB ci RRD souboru ...
snmpwalk -v2c -c KOmunita ap-test06 .1.3.6.1.4.1.14988.1.1.2.1.1.9.1 | awk '{ print "prvni_moula:"$4 }'
... toto vraci ...
prvni_moula:21490
To si nasledne v PHP rozparsujes na data (redas to skriptu):
./php -f php-skript.php prvni_moula:21490
<?php
$aARG = explode(":", $argv[1]);
$pSql = MySQL_PConnect("db_server", "username", "password");
MySQL_Query("USE DATABAZE_PRENESENYCH_DAT;");
// najdeme zda uz nemame zaznam pro daneho klienta v dany den (tedy nejmensi podrobnosti, ktery by to takto umelo by byl obejm dat za den)
$sSQL = "SELECT id, preneseno_bajtu FROM tabulka_hodnot WHERE jmeno_klienta = '".$aARG["0"]."' AND datum = CURDATE() LIMIT 1";
$pData = MySQL_Query($sSql);
$aData = MySQL_Fetch_Array($pData);
// pokud mame nalezeny zaznam - provedeme UPDATE, jinak INSERT
if (MySQL_Num_Rows($pData))
{
$iNoveBajty = (int) $aData["preneseno_bajtu"]+$aARG["1"];
$sSQL = "UPDATE tabulka_hodnot SET preneseno_bajtu = ".$iNoveBajty." WHERE id = ".$aData["id"].")";
MySQL_Query($sSql);
}
else
{
// v tabulce je auto_increment ID, autoupdate sloupec datum pro orientaci k cemu se data vztahuji
$sSQL = "INSERT INTO tabulka_hodnot (jmeno_klienta, preneseno_bajtu) VALUES (".$aARG["0"].", ".$aARG["1"].")";
MySQL_Query($sSql);
}
?>
Nejaka ta dokumentace:
http://forums.cacti.net/viewtopic.php?t=25349
(v tom archivu soubor s OID pro jednoduchost ... mikrotik-20090210\resource\snmp_queries\mikrotik_queue_simple.xml)
http://dev.mysql.com/doc/refman/5.5/en/insert.html
http://dev.mysql.com/doc/refman/5.5/en/ ... rrent-date
Je to jen nastin, nakopnuti, cele je to vhodne (nutne pri vetsim poctu lidi) zasmyckovat a spoustet proceduru, jenz si dle tabulky SQ ci QT v Mikrotiku najde zaznamy k precteni (muzou mit nejaky priznak treba), nasledne precte data a ty pak najednou pridat/updatuje do DB ...