SNMP i Cacti - Problem z w

Konfiguracja serwerów, usług, itp.
R_Przemek
Posty: 54
Rejestracja: 12 lipca 2008, 16:02

SNMP i Cacti - Problem z własnym skryptem.

Post 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
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post 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ć.
R_Przemek
Posty: 54
Rejestracja: 12 lipca 2008, 16:02

Post 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.
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Źle inicjujesz zmienną. Powinieneś tak:

Kod: Zaznacz cały

[color=#333333]a=$(cat plik_z_danymi.txt)
[/color]
R_Przemek
Posty: 54
Rejestracja: 12 lipca 2008, 16:02

Post 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.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post 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.
R_Przemek
Posty: 54
Rejestracja: 12 lipca 2008, 16:02

Post 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ść.
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post 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>
R_Przemek
Posty: 54
Rejestracja: 12 lipca 2008, 16:02

Post 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
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

A wyrzuć to ' \n ', może.

Kod: Zaznacz cały

tr -d '\n' < plik_wejsciowy > plik_wyjsciowy
ODPOWIEDZ