Strona 1 z 2

SNMP i Cacti - Problem z własnym skryptem.

: 19 września 2014, 14:15
autor: R_Przemek
Witam

Mam problem z rysowaniem wykresów na podstawie własnego skryptu.

gdy skrypt ma postać:

Kod: Zaznacz cały

#!/bin/sh

echo "36.6";
wszystko jest w porządku i wyświetlana wartość rysuje się na wykresie. Ale gdy zrobię:

Kod: Zaznacz cały

#!/bin/sh

a=`cat plik_z_danymi.txt`;
echo "$a";
wykres umiera. (w pliku "plik_z_danymi.txt" jest oczywiście wartość 36.6 bez żadnych białych znaków, przynajmniej tak mi się wydaje.)

Skrypt jak i plik z bazą dla uproszczenia mają chmod 777 i chown snmp

Dane do kaktusa wkładam przez podanie odpowiedniego OID.

mój /etc/snmp/snmpd.conf

Kod: Zaznacz cały

smuxsocket 127.0.0.1
rocommunity setMeHere
com2sec local     localhost           public
group MyRWGroup v1         local
group MyRWGroup v2c        local
group MyRWGroup usm        local
view all    included  .1                               80
access MyRWGroup ""      any       noauth    exact  all    all    none
com2sec notConfigUser  default       mrtg
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    systemview    included  .1                               80
access  notConfigGroup ""      any       noauth    exact  systemview none none
syslocation Mumbai, IN (VSNL LB3)
syscontact Vivek Gite <[email protected]>

extend skrypt /etc/snmp/skrypt.sh

extend apcupsd /etc/snmp/sk/apcupsd-stats

Ciekawostkę jest to że:

Kod: Zaznacz cały

#!/bin/sh

a=`cat plik_z_danymi.txt`;

echo "55";
również powoduje umartwienie wykresu...

/var/log/cacti/cacti.log mówi tak:

Kod: Zaznacz cały

09/18/2014 02:40:06 AM - CMDPHP: Poller[0] WARNING: SNMP Get Timeout for Host:'127.0.0.1', and OID:'.1.3.6.1.4.1.8072.1.3.2.4.1.2.5.116.101.109.112.48.1'
jest to OID mojej zdefiniowanej wartości. Gdy wołam ją snmpget'em wypisuje ją wzorowo:

Kod: Zaznacz cały

#snmpget -v2c -c public localhost .1.3.6.1.4.1.8072.1.3.2.4.1.2.5.116.101.109.112.48.1
#NET-SNMP-EXTEND-MIB::nsExtendOutLine."skrypt".1 = STRING: 22.62

: 20 września 2014, 01:17
autor: kodama

Kod: Zaznacz cały

#!/bin/sh

a=`cat plik_z_danymi.txt`;
echo "$a";
Może wywal te ` ` przy $a, bo to w sumie jest oznaczenie wykonania polecenia tak jak masz powyżej. Według mnie to może mieszać.

: 22 września 2014, 07:18
autor: R_Przemek
Bez znaczników wszystko było tak samo, ale połowicznie pomogło podanie całej ścieżki pliku. To znaczy

Kod: Zaznacz cały

cat /etc/snmp/sk/plik_z_danymi.txt
Wtedy dane wpisane z palca zaczęły się wykreślać. Jeśli natomiast dane do pliku wkładam cronem na przykład przez:

Kod: Zaznacz cały

*/1 * * * * snmp digitemp_DS9097 -i -s /dev/ttyUSB0 -a -q | grep -w 'C:' | grep -w 'Sensor 0'| awk '{print $7}' > /etc/snmp/sk/base.txt
wtedy wykres z powrotem umiera.

: 22 września 2014, 08:39
autor: dedito
Źle inicjujesz zmienną. Powinieneś tak:

Kod: Zaznacz cały

[color=#333333]a=$(cat plik_z_danymi.txt)
[/color]

: 22 września 2014, 09:31
autor: R_Przemek
dedito pisze:Źle inicjujesz zmienną. Powinieneś tak:

Kod: Zaznacz cały

[color=#333333]a=$(cat plik_z_danymi.txt)[/color]
Już się poprawił :) Ale wpływu na całość problemu to nie miało.

: 22 września 2014, 10:57
autor: mariaczi
W tablicy crona podaj pełną ścieżkę do "snmp" i pozostałych użytych "grep" i "awk" albo całość włóż do skryptu a w cronie podaj ścieżkę do niego. Cron nie zawsze zna ścieżki do binarek.

: 22 września 2014, 17:35
autor: R_Przemek
Podawanie pełnych ścieżek oczywiście jest zasadne, jednak trochę się zamieszałem z tym SNMP'em i rozpiszę wszystko raz jeszcze.

Chcę na przykład czytać temperaturę. Więc robię sobie skrypt sh, który wygląda powiedzmy tak:

Kod: Zaznacz cały

#!/bin/bash

digitemp_DS9097 -i -s /dev/ttyUSB0 -a -q | grep -w 'C:' | grep -w 'Sensor 0'| awk '{print $7}'


W efekcie ./skrypt.sh podaje odczytaną wartość w postaci "13.44".
Teraz SNMP, robię:

Kod: Zaznacz cały

snmpget -v2c -c public localhost .1.3.6.1.4.1.8072.1.3.2.4.1.2.5.116.101.109.112.48.1
i moim oczom ukazuje się:

Kod: Zaznacz cały

NET-SNMP-EXTEND-MIB::nsExtendOutLine."temp0".1 = STRING: 13.44
przekonany że wszystko działa zapinam kaktusa a on milczy... Wywalam więc w skrypcie sh wiersz odpowiadający za digitemp'a a wpisuję echo "12:34".
Wtedy wykres ożywa i zaczyna rysować wartość.

Wiele się więc nie zastanawiając wpadłem na pomysł że skrypt będzie czytał wartość z pliku bo może snmp ma zbyt mały timeout (a na efekty digitemp trzeba poczekać około 2s). Robię więc jak powyżej z plikiem tekstowym i napotykam są samą sytuację. jak plik z wartością skrobię ręcznie wykres jest, gdy robi to digitemp pojawia się ciemność.

: 22 września 2014, 18:38
autor: kodama
A ten digitemp nie wstawia tam jakichś niedrukowalnych znaków albo coś i wtedy program głupieje? W terminalu:

Kod: Zaznacz cały

 od -c <plik>

: 22 września 2014, 20:02
autor: R_Przemek

Kod: Zaznacz cały

root@cacti:/etc/snmp/sk/digitemp# od -c base_s0.txt
0000000   1   2   .   0   0  \n
0000006
myślałem trochę nad tym czy digitemp nie wypluwa czegoś niemego, i starałem się to rozwiązać tak:

Kod: Zaznacz cały

#!/bin/sh


p=$(cat /etc/snmp/sk/digitemp/base_s0.txt | tail -n 1 | sed '/^$/d')

jeden=$(echo $p | awk -F . '{print $1}' | grep '[0-9]' | sed 's/^[[:blank:]]//' | sed 's/[[:blank:]]$//')
dwa=$(echo $p | awk -F . '{print $2}' | grep '[0-9]' | sed 's/^[[:blank:]]//' | sed 's/[[:blank:]]$//')


echo $jeden"."$dwa
Dla pewności:

Kod: Zaznacz cały

root@cacti:/etc/snmp/sk/digitemp# ls -l
total 24
-rwxrwxrwx 1 snmp root   6 Sep 22 20:03 base_s0.txt
-rwxrwxrwx 1 snmp root   6 Sep 18 07:20 base_s1.txt
-rwxrwxrwx 1 snmp root   6 Sep 18 07:19 base_s2.txt
-rwxrwxrwx 1 snmp root 411 Sep 22 19:12 temp0.sh
-rwxrwxrwx 1 snmp root 159 Sep 18 07:20 temp1.sh
-rwxrwxrwx 1 snmp root 159 Sep 18 07:20 temp2.sh

: 22 września 2014, 20:26
autor: kodama
A wyrzuć to ' \n ', może.

Kod: Zaznacz cały

tr -d '\n' < plik_wejsciowy > plik_wyjsciowy