Инструменты пользователя

Инструменты сайта


watchdog

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
watchdog [2019/12/11 12:54]
nightfly [Использование One-Punch скриптов]
watchdog [2020/10/03 13:42] (текущий)
nightfly
Строка 268: Строка 268:
 </​file>​ </​file>​
  
-==== Мониторинг померших свитчей ==== 
- 
-<file php siwtchmon>​ 
-#​!/​usr/​local/​bin/​php 
-<?php 
- 
-///////////////////////////////////////​ 
-//                                   // 
-//    CONFIG SECTION ​                // 
-//                                   // 
-/////////////////////////////////////// ​         ​ 
- 
-//mysql settings 
-$db_host='​127.0.0.1';​ 
-$db_database='​stg';​ 
-$db_login='​root';​ 
-$db_password='​yourmysqlpassword';​ 
-$db_config['​character'​]='​utf8';​ 
- 
-//////////////​ Main code section /////////// 
- 
- 
-//parse all online users speed data 
- 
-function simple_queryall($query) { 
-    global $db_host, $db_database,​ $db_login, $db_password;​ 
-    $result=array();​ 
-    $dblink=mysqli_connect($db_host,​ $db_login, $db_password,​$db_database);​ 
-    mysqli_query ($dblink,"​set character_set_client='​utf8'"​); ​ 
- mysqli_query ($dblink,"​set character_set_results='​utf8'"​); ​ 
- mysqli_query ($dblink,"​set collation_connection='​utf8_general_ci'"​);​ 
-    $queried = mysqli_query($dblink,​$query);​ 
-    while($row = mysqli_fetch_assoc($queried)) { 
-    $result[]= $row; 
-    } 
-    mysqli_close($dblink);​ 
-    return($result);​ 
-} 
- 
-function ispos($string,​$search) { 
-if (strpos($string,​$search)===false) { 
-return(false);​ 
-} else { 
-return(true);​ 
-} 
-} 
- 
-if ($argc>​=2) { 
-$option=$argv[1];​ 
-$alldead=simple_queryall("​SELECT `value` from `ubstorage` WHERE `key`='​SWDEAD'"​);​ 
- 
-//All dead switches 
-if ($option=='​all'​) { 
-if (!empty($alldead)) { 
-    $count=0; 
- foreach ($alldead as $io=>​$each) { 
- $dead=unserialize($each['​value'​]);​ 
- if (!empty($dead)) { 
- print('​Ой,​ тут якісь свічі здехли:'​."​\n"​);​ 
- foreach($dead as $ip=>​$eachdead) { 
- print($ip.'​ - '​.$eachdead.'​ '​."​\n"​);​ 
-                $count++; 
- } 
-        print("​\n\n"​);​ 
-        print('​Всього '​.$count.'​ штук скопитилось :​('​); ​   ​ 
- } else { 
- print('​Всьо зі всіма свічами добре - гарантую'​);​ 
- } 
-  
- } 
-} 
-} 
- 
-//Z labeled switches 
-if ($option=='​z'​) ​ { 
-    //only Z devices 
-    if (!empty($alldead)) { 
-    $zdeadcount=0;​ 
-    $zydead='';​ 
-    foreach ($alldead as $io=>​$each) { 
-        $dead=unserialize($each['​value'​]);​ 
-        if (!empty($dead)) { 
-            foreach($dead as $ip=>​$eachdead) { 
-                if (ispos($eachdead,'​z'​)) { 
-                $zydead.=$eachdead.'​ '; 
-                $zdeadcount++;​ 
-                } 
-            } 
-            if ($zdeadcount==0) { 
-                print('​Всьо зі всіма зухелями добре'​);​ 
-            } else { 
-                print('​здохли:​ '​.$zydead);​ 
- 
-            } 
-        } else { 
-            print('​Всьо зі всіма зухелями добре'​);​ 
-        } 
-        ​ 
-    } 
-} 
-} 
- 
-//human readable counters 
-if ($option=='​count'​) { 
-if (!empty($alldead)) { 
-    $count=0; 
-    foreach ($alldead as $io=>​$each) { 
-        $dead=unserialize($each['​value'​]);​ 
-        if (!empty($dead)) { 
-            foreach($dead as $ip=>​$eachdead) { 
-                $count++; 
-            } 
-        print('​Всього '​.$count.'​ штук скопитилось :​('​); ​   ​ 
-        } else { 
-            print('​Всьо зі всіма свічами добре - гарантую'​);​ 
-        } 
-        ​ 
-    } 
-} 
-} 
- 
-//counters 
-if ($option=='​countraw'​) { 
-if (!empty($alldead)) { 
-    $count=0; 
-    foreach ($alldead as $io=>​$each) { 
-        $dead=unserialize($each['​value'​]);​ 
-        if (!empty($dead)) { 
-            foreach($dead as $ip=>​$eachdead) { 
-                $count++; 
-            } 
-        print($count); ​   ​ 
-        } else { 
-            print('​0'​);​ 
-        } 
-        ​ 
-    } 
-} 
-} 
- 
- 
-} else { 
-    print('​Usage:​ switchmon [option]'​."​\n"​);​ 
-    print('​Available options: count/​z/​all/​countraw'​."​\n"​);​ 
-} 
- 
- 
-?> 
-</​file>​ 
  
 ==== Утилизация CPU Linux хоста ==== ==== Утилизация CPU Linux хоста ====
Строка 464: Строка 315:
  
 ===== Использование One-Punch скриптов ===== ===== Использование One-Punch скриптов =====
 +
 +Еще более предпочтительным,​ является использование [[onepunch|One-Punch скриптов]] вместо просто скриптов лежащих где-то на вашей ФС. Используя их, вы получаете сразу два главных преимущества:​
 +
 +1. Они храняться в вашей БД и переезжают всегда вместе с ней
 +2. Они выполняются внутри Ubilling и имеют прямой доступ ко всему его функционалу
 +
 +===== Как это работает?​ =====
  
 Допустим берем и создаем [[onepunch|One-Punch]] скрипт следующего вида: Допустим берем и создаем [[onepunch|One-Punch]] скрипт следующего вида:
Строка 483: Строка 341:
 Надеюсь очевидно,​ что собака-наблюдака будет воспринимать как результат выполнения только данные находящиеся в переменной **$watchdogCallbackResult**?​ Надеюсь очевидно,​ что собака-наблюдака будет воспринимать как результат выполнения только данные находящиеся в переменной **$watchdogCallbackResult**?​
 \\ \\
-Также есть еще одно небольшое ограничение относящееся не только к данным возвращаемым One-Punch скриптами,​ а также и к таким типам проверокscript и httpget. Ограничение заключается в том, что операторы changed и notchanged не работают адекватно если объем возвращаемых этими проверками данных составляет более 255 байт. Поэтому если вы собираетесь использовать эти операторы для контроля измений в данных возвращаемых вышеуказанными типами проверок,​ вам следует это учитывать при разработке ваших скриптов.+Также есть еще одно небольшое ограничение относящееся не только к данным возвращаемым One-Punch скриптами,​ а также и к таким типам проверок ​как ​script и httpget. Ограничение заключается в том, что операторы changed и notchanged не работают адекватно если объем возвращаемых этими проверками данных составляет более 255 байт. Поэтому если вы собираетесь использовать эти операторы для контроля измений в данных возвращаемых вышеуказанными типами проверок,​ вам следует это учитывать при разработке ваших скриптов. ​Для проверок типа like или скажем notempty это не важно. 
 + 
 +==== Трафик с порта ==== 
 + 
 + 
 +Вот например то же самое снятие данных о трафике с порта, но в виде One-Punch скрипта:​ 
 + 
 +<code php> 
 +//config section 
 +$port='​8';​ 
 +$oid='​.1.3.6.1.2.1.31.1.1.1.6';​ 
 +$ip='​192.168.18.234';​ 
 +$community='​changeme';​ 
 +//end of config 
 + 
 +$cmd='/​usr/​local/​bin/​snmpwalk -v2c -On  -c '​.$community.'​ '​.$ip.'​ '​.$oid.'​.'​.$port;​ 
 +$raw=shell_exec($cmd);​ 
 +$newTime=time();​ 
 +if (!empty($raw)) { 
 +$raw=explode('​Counter64:',​$raw);​ 
 +$raw=trim($raw[1]);​ 
 +if (!empty($raw)) { 
 + $cacheName='​content/​documents/​myscripts/​octets_'​.$ip.'​_'​.$port;​ 
 + if (file_exists($cacheName)) { 
 + $oldTime=filemtime($cacheName);​ 
 + $oldOctets=file_get_contents($cacheName);​ 
 + $traffDiff=$raw-$oldOctets;​ 
 + $timeDiff=$newTime-$oldTime;​ 
 + if ($timeDiff!=0) { 
 + $speed=($traffDiff*8*100)/​($timeDiff*10000);​ 
 + $watchdogCallbackResult=round($speed/​10000);​ 
 + } else { 
 + $watchdogCallbackResult='​-1';​ 
 +
 +     file_put_contents($cacheName,​$raw);​ 
 + } else { 
 + file_put_contents($cacheName,​$raw);​ 
 + $watchdogCallbackResult='​0';​ 
 +
 +
 + 
 +
 + 
 +</​code>​ 
 + 
 + 
 +==== Свободное место на диске ==== 
 + 
 +<code php> 
 +$result=disk_free_space("/"​);​ 
 +$result=$result/​1024/​1024/​1024;​ 
 +$watchdogCallbackResult=round($result,​2);​ 
 +</​code>​ 
 + 
 +==== Load Average удаленного Linux хоста ==== 
 + 
 +<code php> 
 +$oid = '​.1.3.6.1.4.1.2021.10.1.3.3';​ 
 +$ip = '​192.168.0.70';​ 
 +$community = '​yoursnmpcommunity';​ 
 + 
 + 
 +$cmd = '/​usr/​local/​bin/​snmpwalk -v2c -On  -c ' . $community . ' ' . $ip . ' ' . $oid; 
 +$raw = shell_exec($cmd);​ 
 +$watchdogCallbackResult = '';​ 
 +if (!empty($raw)) { 
 +    $raw = explode('​STRING:',​ $raw); 
 +    $raw = trim($raw[1]);​ 
 +    if (!empty($raw)) { 
 +        $watchdogCallbackResult .= $raw; 
 +    } 
 +
 +</​code>​ 
 + 
 +==== Мониторинг isc-dhcpd ==== 
 + 
 +<code php> 
 +$command='​ps aux | grep dhcpd | grep -v grep';​ 
 +$result=shell_exec($command);​ 
 +if (!empty($result)) { 
 +  $watchdogCallbackResult='​запущено';​ 
 +} else { 
 +  $watchdogCallbackResult='​впав нахрін';​ 
 +
 +</​code>​ 
 + 
 + 
watchdog.1576061698.txt.gz · Последние изменения: 2019/12/11 12:54 — nightfly