URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83242
[ Назад ]

Исходное сообщение
"Cacti: Partial Result"

Отправлено tamias , 07-Дек-08 19:51 
Добрый день!
Написан скрипт для кактуса о состоянии памяти в 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...
Спасибо заранее!


Содержание
  • Cacti: Partial Result,Felixz, 21:08 , 07-Дек-08
    • Cacti: Partial Result,tamias, 04:03 , 08-Дек-08
      • Cacti: Partial Result,Felixz, 08:42 , 08-Дек-08
        • Cacti: Partial Result,tamias, 12:46 , 08-Дек-08
          • Cacti: Partial Result,Felixz, 14:05 , 08-Дек-08
            • Cacti: Partial Result,Felixz, 14:07 , 08-Дек-08
            • Cacti: Partial Result,tamias, 19:21 , 08-Дек-08
              • Cacti: Partial Result,Felixz, 08:26 , 09-Дек-08
                • Cacti: Partial Result,tamias, 17:51 , 09-Дек-08
                  • Cacti: Partial Result,Felixz, 08:35 , 10-Дек-08
                    • Cacti: Partial Result,tamias, 12:36 , 10-Дек-08
                      • Cacti: Partial Result,Felixz, 16:28 , 10-Дек-08
                        • Cacti: Partial Result,Felixz, 16:30 , 10-Дек-08
                          • Cacti: Partial Result,tamias, 14:27 , 11-Дек-08
                • Cacti: Partial Result,tamias, 17:58 , 09-Дек-08
      • Cacti: Partial Result,Felixz, 08:51 , 08-Дек-08
        • Cacti: Partial Result,tamias, 11:26 , 08-Дек-08
        • Cacti: Partial Result,tamias, 13:28 , 08-Дек-08

Сообщения в этом обсуждении
"Cacti: Partial Result"
Отправлено Felixz , 07-Дек-08 21:08 
>[оверквотинг удален]
>
>Т е выводит
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>

Возможно дело именно в этом.


"Cacti: Partial Result"
Отправлено tamias , 08-Дек-08 04:03 
> попробуйте убрать пробелы в именах полей вывода скрипта.
>Возможно дело именно в этом.

Да дело оказывается в этом, спасибо! Либо оставить только второе слово в имени.
Но вот теперь надо исправить скрипт он вот:

#!/usr/bin/perl

open (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)


"Cacti: Partial Result"
Отправлено Felixz , 08-Дек-08 08:42 
>
vm_stat | perl -ne 's/\s/_/g; print "$1:$2 " if(/^\W*(.+?)\W*:\D*(\d+).*$/);'

"Cacti: Partial Result"
Отправлено tamias , 08-Дек-08 12:46 
>>
vm_stat | perl -ne 's/\s/_/g; print "$1:$2 " if(/^\W*(.+?)\W*:\D*(\d+).*$/);'

Felixz!
График начал строится но   в  Pages  , а нужны байты.
В этом скрипте нужно еще каждое значение *4096.



"Cacti: Partial Result"
Отправлено Felixz , 08-Дек-08 14:05 
>[оверквотинг удален]
>
>Felixz!
>График начал строится но   в  Pages  , а
>нужны байты.
>В этом скрипте нужно еще каждое значение *4096.
>
>
>
>
>

perl -ne 's/\s/_/g; $ps = $1 if (/page.size.*?(\d+)/); print "$1:".$3*$ps."\n" if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);'


"Cacti: Partial Result"
Отправлено Felixz , 08-Дек-08 14:07 
>[оверквотинг удален]
>>График начал строится но   в  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+).*$/);'


"Cacti: Partial Result"
Отправлено tamias , 08-Дек-08 19:21 
>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!

"Cacti: Partial Result"
Отправлено Felixz , 09-Дек-08 08:26 
>
$ 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/ (но это долго).

А вот это правильно =)



"Cacti: Partial Result"
Отправлено tamias , 09-Дек-08 17:51 
:>Наверное, но всё таки лучше с буквы:

Замечательно!
Скрипт работает и вот уже построл на нем график:
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...

Спасибо!


"Cacti: Partial Result"
Отправлено Felixz , 10-Дек-08 08:35 

/usr/bin/perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d*\.*\d+).*$/);'


"Cacti: Partial Result"
Отправлено tamias , 10-Дек-08 12:36 
>
 
>/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


"Cacti: Partial Result"
Отправлено Felixz , 10-Дек-08 16:28 
>[оверквотинг удален]
>
>Спасибо! Сработало . Окончательный вариант получился таким:
>
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+).*$/);


"Cacti: Partial Result"
Отправлено Felixz , 10-Дек-08 16:30 
только перевод каретки уберите:
>
 
>/usr/bin/perl -ne 's/\s/_/g; print "$1:$3 \n" ...
>

"Cacti: Partial Result"
Отправлено tamias , 11-Дек-08 14:27 
>только перевод каретки уберите:
>>
 
>>/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

По моему, такой способ будет универсален в какти. Много функций , которые выдают значения после двоеточий.


"Cacti: Partial Result"
Отправлено tamias , 09-Дек-08 17:58 
PS:   Изв. за опечатки. Жму "Правка" на своем комменте и вижу
Редактированию не подлежит, т.к. не Ваше!  :)

"Cacti: Partial Result"
Отправлено Felixz , 08-Дек-08 08:51 
точнее даже вот так:

  perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);  



"Cacti: Partial Result"
Отправлено tamias , 08-Дек-08 11:26 
>точнее даже вот так:
>
 
>  perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);
>

Спасибо! Felixz.
Первый скрипт работает! Теперь попытаюсь построить график.


"Cacti: Partial Result"
Отправлено tamias , 08-Дек-08 13:28 
>точнее даже вот так:
>
 
>  perl -ne 's/\s/_/g; print "$1:$3 " if(/^\W*(.+?)\W*:(\s|_)*(\d+).*$/);
>

Да и этот тоже работает!