Добрый день!
Написан скрипт для кактуса о состоянии памяти в Mac OSX:$ /opt/local/share/cacti/scripts/mem_osx/memory_mac.sh
Pages free:181850 Pages active:453350 Pages inactive:257121 Pages wired down:155101 "Translation faults":699811301 Pages copy-on-write:49594178 Pages zero filled:347579828 Pages reactivated:64825 Pageins:288058 Pageouts:84946 Object cache:1833
Скрипт работает правильно и выводит в том формате, какой требуется для cacti. ( Если не так ,то как должно?)
Но график на основе этого скрипта пустой , т к в cacti этот скрипт почему то выдает не то, что надо.12/07/2008 10:45:03 PM - CMDPHP: Poller[0] Host[1] Description[Localhost] DS[278] Graphs['Memory Mac Usage'] CMD: /opt/local/share/cacti/scripts/mem_osx/memory_mac.sh, output: U
12/07/2008 10:45:03 PM - CMDPHP: Poller[0] Host[1] Description[Localhost] DS[278] Graphs['Memory Mac Usage'] WARNING: Result from CMD not valid. Partial Result: Pages free:155151 Pa
Т е выводитPages free:155151 Paи все.Где может находится ошибка? В Data Input Method ? Data Templates? ну конечно не Graph Templates!
Вот мои Data Input Method
http://content.screencast.com/users/sibtamias/folders/Jing/m...
Data Templates
http://content.screencast.com/users/sibtamias/folders/Jing/m...
Спасибо заранее!
>[оверквотинг удален]
>
>Т е выводитPages free:155151 Paи все.
>
>Где может находится ошибка? В Data Input Method ? Data Templates? ну
>конечно не Graph Templates!
>Вот мои Data Input Method
>http://content.screencast.com/users/sibtamias/folders/Jing/m...
> Data Templates
>http://content.screencast.com/users/sibtamias/folders/Jing/m...
>Спасибо заранее!К сожалению сейчас нет кактуса под руками, но первое, что приходит в голову - попробуйте убрать пробелы в именах полей вывода скрипта. Есть ограничение накладываемое на имена полей:
Data Input Fields - Field/Field Name
Either select or type in the name of the field you want to define. No spaces or other non-alphanumeric characters (except '-' or '_') should be used in this field.Также в примере из документации пробелы присутствуют только в качестве разделителя полей:
Example 11-1. Example script output using 1 field
Data input methods with more than one output field are handled a bit differently when writing scripts. Scripts that output more than one value should be formatted like the following:
<fieldname_1>:<value_1> <fieldname_2>:<value_2> ... <fieldname_n>:<value_n>
Возможно дело именно в этом.
> попробуйте убрать пробелы в именах полей вывода скрипта.
>Возможно дело именно в этом.Да дело оказывается в этом, спасибо! Либо оставить только второе слово в имени.
Но вот теперь надо исправить скрипт он вот:#!/usr/bin/perlopen (IN, 'vm_stat |') && print join ' ', grep !/^$/, map {$_ if s/\s+(\d+)\.\n*/$1/} <IN>;
либо этот
vm_stat | perl -ne 'print "$1:$2 " if(/^\s*(.+)\s*:\s*(\d+).*$/)'Сам не очень разбираюсь в этом. Если есть возможность исправить, буду благодарен.
Сама функция vm_stat :$ vm_stat
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 178160.
Pages active: 512409.
Pages inactive: 205453.
Pages wired down: 151442.
"Translation faults": 749681429.
Pages copy-on-write: 51793476.
Pages zero filled: 373924754.
Pages reactivated: 94235.
Pageins: 306545.
Pageouts: 103907.
Object cache: 20571606 hits of 21764133 lookups (94% hit rate)
>vm_stat | perl -ne 's/\s/_/g; print "$1:$2 " if(/^\W*(.+?)\W*:\D*(\d+).*$/);'
>>vm_stat | perl -ne 's/\s/_/g; print "$1:$2 " if(/^\W*(.+?)\W*:\D*(\d+).*$/);'Felixz!
График начал строится но в Pages , а нужны байты.
В этом скрипте нужно еще каждое значение *4096.
>[оверквотинг удален]
>
>Felixz!
>График начал строится но в Pages , а
>нужны байты.
>В этом скрипте нужно еще каждое значение *4096.
>
>
>
>
>perl -ne 's/\s/_/g; $ps = $1 if (/page.size.*?(\d+)/); print "$1:".$3*$ps."\n" if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'
>[оверквотинг удален]
>>График начал строится но в Pages , а
>>нужны байты.
>>В этом скрипте нужно еще каждое значение *4096.
>>
>>
>>
>>
>>
>
>perl -ne 's/\s/_/g; $ps = $1 if (/page.size.*?(\d+)/); print "$1:".$3*$ps."\n" if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'промахнулся
perl -ne 's/\s/_/g; $ps = $1 if (/page.size.*?(\d+)/); print "$1:".$3*$ps." " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'
>perl -ne 's/\s/_/g; $ps = $1 if (/page.size.*?(\d+)/); print "$1:".$3*$ps."\n" if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'Круто! Он еще и сам вставляет значение "page size" ! Все , график стоится как надо!
Кстати скрипт оказался универсальным.
Например есть Hardware Monitor http://www.bresink.com/osx/216202/download.html
Копируем hwmonitor (Hardware Monitor.app/Contents/Resources/hwmonitor)
в /opt/local/sbin/
теперь:$ hwmonitor
Software is not registered. Only temperature sensors will be displayed.CPU Core 1: 49 C
CPU Core 2: 57 C
SMART Disk WDC WD7500AAKS-00RBA0 (WD-WCAPT0503959): 59 C
SMC AMBIENT AIR: 26 C
SMC CPU A HEAT SINK: 45 C
SMC DRIVE BAY 1: 56 C
SMC GPU 1 CHIP: 55 C
SMC GPU 1 HEAT SINK: 56 C
SMC GPU DIODE: 58 C
SMC MEMORY CONTROLLER: 49 C
SMC OPTICAL DRIVE: 44 C
SMC POWER SUPPLY POSITION 1: 67 C
SMC WLAN CARD: 54 C
Применяем скрипт:
$ hwmonitor | perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'
Software is not registered. Only temperature sensors will be displayed.CPU_Core_1:49 CPU_Core_2:54 SMART_Disk_WDC_WD7500AAKS-00RBA0_(WD-WCAPT0503959:59 SMC_AMBIENT_AIR:26 SMC_CPU_A_HEAT_SINK:45 SMC_DRIVE_BAY_1:56 SMC_GPU_1_CHIP:55 SMC_GPU_1_HEAT_SINK:56 SMC_GPU_DIODE:57 SMC_MEMORY_CONTROLLER:49 SMC_OPTICAL_DRIVE:44 SMC_POWER_SUPPLY_POSITION_1:67 SMC_WLAN_CARD:53
Все выводит! Но мешает первая надпись. И скрипт пока не применим. (Или можно обойти надпись?). Если купить лицензию ( наверное куплю) , то надпись исчезнет и еще добавятся сенсоры вентиляторов. И можно строить графики температур и скорости .
Вот так я его создал агрегатный график из отдельных скриптов для каждой температуры:
http://content.screencast.com/users/sibtamias/folders/Jing/m...
Но это не рационально , нужен один скрипт для всех параметров.
Есть и бесплатный вариант, только для температур:
скачиваем TemperatureMonitor ( http://www.bresink.com/osx/0TemperatureMonitor/download.html )
и копируем tempmonitor (Temperature Monitor.app/Contents/Resources/tempmonitor)
в /opt/local/sbin/
теперь:$ tempmonitor -a
49 C
56 C
59 C
26 C
45 C
56 C
56 C
56 C
58 C
49 C
44 C
66 C
53 C
Остается написать скрипт чтоббы было например так:1:49 2:56 3:59 4:26 5:45 6:56 7:56 8:56 9:58 10:49 11:44 12:66 13:53
Числа наверное разрешены в качестве имен?
Ну а где какая температура , узнаем из hwmonitor.
Если есть время и интерес, напишите.
Уже сам стал изучать perl по hhttp://www.intuit.ru/department/pl/perl/1/ (но это долго).
Еще раз спасибо , Felixz!
>$ hwmonitor
>Software is not registered. Only temperature sensors will be displayed.
>Этот вывод, вероятно, происходит через stderr. Не уверен, но возможно его получится придавить, написав в конце 2>/dev/null:
hwmonitor | perl -ne '....' 2>/dev/null>Остается написать скрипт чтоббы было например так:
>1:49 2:56 3:59 4:26 5:45 6:56 7:56 8:56 9:58 10:49 11:44 12:66
>13:53
>Числа наверное разрешены в качестве имен?Наверное, но всё таки лучше с буквы:
perl -ne 'print "C".$i++.":$1 " if(/^\D*?(\d+)/);'
>Ну а где какая температура , узнаем из hwmonitor.
>Если есть время и интерес, напишите.
>Уже сам стал изучать perl по hhttp://www.intuit.ru/department/pl/perl/1/ (но это долго).А вот это правильно =)
:>Наверное, но всё таки лучше с буквы:Замечательно!
Скрипт работает и вот уже построл на нем график:
http://content.screencast.com/users/sibtamias/folders/Jing/m...Попробовал полную версию hwmonitor, информации стало больше и нет той строки:
$ hwmonitor
CPU Core 1: 48 C
CPU Core 2: 51 C
SMART Disk WDC WD7500AAKS-00RBA0 (WD-WCAPT0503959): 59 C
SMC AMBIENT AIR: 26 C
SMC CPU A HEAT SINK: 43 C
SMC DRIVE BAY 1: 55 C
SMC GPU 1 CHIP: 54 C
SMC GPU 1 HEAT SINK: 54 C
SMC GPU DIODE: 56 C
SMC MEMORY CONTROLLER: 47 C
SMC OPTICAL DRIVE: 43 C
SMC POWER SUPPLY POSITION 1: 64 C
SMC WLAN CARD: 53 C
SMC CPU A: 0.961792 V
SMC CPU A: 3.68359 A
SMC CPU A: 3.58594 W
SMC FAN CPU: 1199 RPM
SMC FAN HDD: 1198 RPM
SMC FAN ODD: 700 RPM
SMC AMBIENT LIGHT 1: 479
GPU: 2 %
CPU Clock Frequency: 2400 MHzСкрипт такой
#!/bin/sh
/opt/local/sbin/hwmonitor | /usr/bin/perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'
Выдает:$ /opt/local/share/cacti/scripts/hwmonitor/hwmonitor.sh
CPU_Core_1:48 CPU_Core_2:52 SMART_Disk_WDC_WD7500AAKS-00RBA0_(WD-WCAPT0503959:59 SMC_AMBIENT_AIR:26 SMC_CPU_A_HEAT_SINK:43 SMC_DRIVE_BAY_1:56 SMC_GPU_1_CHIP:54 SMC_GPU_1_HEAT_SINK:54 SMC_GPU_DIODE:56 SMC_MEMORY_CONTROLLER:47 SMC_OPTICAL_DRIVE:43 SMC_POWER_SUPPLY_POSITION_1:64 SMC_WLAN_CARD:53 SMC_CPU_A:0 SMC_CPU_A:5 SMC_CPU_A:5 SMC_FAN_CPU:1198 SMC_FAN_HDD:1198 SMC_FAN_ODD:698 SMC_AMBIENT_LIGHT_1:477 GPU:0 CPU_Clock_Frequency:2400Выловить убается все параметры , кроме
SMC CPU A: 0.961792 V
SMC CPU A: 3.68359 A
SMC CPU A: 3.58594 W
Срипт выдетSMC_CPU_A:0 SMC_CPU_A:5 SMC_CPU_A:5
Есть выход?
Инфомация эта диномична и стоит , чтобы вывести ее на график.
А вот SMC FAN ( скорость вентиляторов ) по графику пока не заметил, чтобы менялись значения, даже в режиме "Sleep".
А "SMC AMBIENT LIGHT" - такого датчика в новом iMac - е нет, и что он выдает не понятно, обман.Ну а со скриптом :
#!/bin/sh
vm_stat | perl -ne 's/\s/_/g; $ps = $1 if (/page.size.*?(\d+)/); print "$1:".$3*$ps." " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'
http://content.screencast.com/users/sibtamias/folders/Jing/m...Спасибо!
/usr/bin/perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d*\.*\d+).*$/);'
>
>/usr/bin/perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d*\.*\d+).*$/);'
>Спасибо! Сработало . Окончательный вариант получился таким:
hwmonitor | perl -ne '$n=21; s/\s/_/g; if(/^\W*(.+?)\W*:(\s|_)*(\d*\.*\d+).*$/){ $np = substr($1,0,$n); print "$np:$3 "; }'Ввел параметр n для ограничения символов в названиях, т.к. этот
SMART_Disk_WDC_WD7500AAKS-00RBA0_(WD-WCAPT0503959:57
кактус не понимает.
ТеперьSMART_Disk_WDC_WD7500:58
>[оверквотинг удален]
>
>Спасибо! Сработало . Окончательный вариант получился таким:
>hwmonitor | perl -ne '$n=21; s/\s/_/g; if(/^\W*(.+?)\W*:(\s|_)*(\d*\.*\d+).*$/){ $np = substr($1,0,$n);
>print "$np:$3 "; }'
>
>Ввел параметр n для ограничения символов в названиях, т.к. этот
>SMART_Disk_WDC_WD7500AAKS-00RBA0_(WD-WCAPT0503959:57
>кактус не понимает.
>Теперь
>SMART_Disk_WDC_WD7500:58можно попроще
/usr/bin/perl -ne 's/\s/_/g; print "$1:$3 \n" if(/^\W*(.{1,21}).*?\W*:(\s|_)*(\d+\.*\d+).*$/);
только перевод каретки уберите:
>
>/usr/bin/perl -ne 's/\s/_/g; print "$1:$3 \n" ...
>
>только перевод каретки уберите:
>>
>>/usr/bin/perl -ne 's/\s/_/g; print "$1:$3 \n" ...
>>Спасибо!
#!/bin/sh
hwmonitor | perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.{1,25}).*?\W*:(\s|_)*(\d+\.*\d+).*$/);'
работает и уже строит.
Вот еще уже от себя и от Wolong (#perl)hwmonitor | perl -ne 'while(/:\s+(\d+\.*\d+)/g){print "C",++$i,":$1 "}'
это по принципу :C1:52 C2:55 C3:58 C4:26 C5:45 C6:55 C7:54 C8:54 C9:56 C10:48 C11:43 C12:64 C13:44 C14:1.00513 C15:5.71973 C16:5.94141 C17:1200 C18:1199 C19:699 C20:479 C21:2400По моему, такой способ будет универсален в какти. Много функций , которые выдают значения после двоеточий.
PS: Изв. за опечатки. Жму "Правка" на своем комменте и вижу
Редактированию не подлежит, т.к. не Ваше! :)
точнее даже вот так:
perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);
>точнее даже вот так:
>
> perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);
>Спасибо! Felixz.
Первый скрипт работает! Теперь попытаюсь построить график.
>точнее даже вот так:
>
> perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);
>Да и этот тоже работает!