Monitorowanie sprzętu i systemów przy pomocy Signomiksa

Signomix jest platformą dedykowaną dla Internetu Rzeczy (IoT). Platforma oferuje prosty, dostępny zarówno z komputerów jak i smartfonów  interfejs, dzięki czemu użytkownicy mają łatwy dostęp do swoich urządzeń i danych.

W artykule pokażemy jak łatwo można wykorzystać platformę Signomix również jako narzędzie do monitorowania stanu różnego rodzaju urządzeń sieciowych.

W tym celu przygotujemy skrypt dla Raspberry Pi, przy pomocy którego będziemy cyklicznie przesyłać dane dotyczące parametrów pracy systemu: ilość wolnego miejsca na dysku, rozmiar wolnej pamięci operacyjnej, obciążenie systemu i temperaturę procesora.

Przedstawione rozwiązanie wykorzystuje zestaw poleceń standardowo dostępnych w Linuksie, jednak nic nie stoi na przeszkodzie zbudowaniu programu, który będzie wysyłał inne dane: na przykład z podłączonych czujników. Jednocześnie jest to przykład sposobu podłączenia urządzeń typu GENERIC do platformy. Na jego podstawie można zaprojektować bardziej specjalizowane programy.

  1. Rejestracja Raspberry Pi w Signomiksie
  2. Polecenia odczytujące parametry pracy systemu
  3. Skrypt wysyłający dane
  4. Cykliczne zadanie w serwisie CRON
  5. Rozbudowa domyślnego pulpitu danych dla naszego Raspberry

Rejestracja Raspberry Pi w Signomiksie

Podczas rejestrowania naszego Raspberry będziemy potrzebowali czegoś, co można potraktować jako unikalny identyfikator urządzenia. Mamy przynajmniej dwie możliwości: podanie adresu MAC karty sieciowej lub numeru seryjnego procesora.
Jeśli zdecydujemy się na tę drugą opcję, to numer odczytamy poleceniem:

pi@raspberry:~ $ cat /proc/cpuinfo
processor	        : 0
model name	        : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS	        : 697.95
Features	                : half thumb fastmult vfp edsp java tls 
CPU implementer	: 0x41
CPU architecture     : 7
CPU variant	        : 0x0
CPU part	                : 0xb76
CPU revision	        : 7

Hardware	        : BCM2708
Revision	                : 000e
Serial		        : 00000000527bc5a3

# w celu uzyskania interesującej nas liczby wynik polecenia "cat /proc/cpuinfo" przetworzymy poleceniami sed i cut
# wybieramy tylko linię nr 13 z wyniku
# likwidujemy wielokrotne spacje
# wybieramy z linii wartość kolumny nr 3 (deklarując znak spacji jako separator kolumn)
pi@raspberry:~ $ cat /proc/cpuinfo | sed -n '13p' | sed -Ee 's@[[:space:]]+@ @g' | cut -d ' ' -f3
00000000527bc5a3


Znając unikalny identyfikator naszego Raspberry Pi, możemy przejść do procedury rejestrowania go w Signomiksie.

  1. Wybieramy z menu opcje "Profil użytkownika > Zarządzanie urządzeniami" i klikamy ikonę "+" aby dodać nowe urządzenie
  2. Jako linię produktów pozostawiamy "UNDEFINED"
  3. Jako typ urządzenia wybieramy GENERIC
  4. W polu EUI podajemy odczytany wcześniej numer procesora
  5. Wymyślamy poufny klucz (np. mysecretkey123), którm będziemy autoryzować requesty z danymi. Jeśli go nie podamy, zostanie automatycznie wygenerowany przy zapisie formularza.
  6. Podajemy listę kanałów danych. Nazwy kanałów, będą przez nas podawane jako nazwy danych w przesyłanym obiekcie JSON.

Polecenia odczytujące parametry pracy systemu

W celu odczytania parametrów pracy naszego Raspberry możemy napisać dedykowany program przy pomocy wybranego języka programowania. Możemy też, jak w poniższych przykładach wykorzystać do tego celu standardowe polecenia i aplikacje systemu Linux.

Ilość wolnego miejsca na dysku

# w celu uzyskania interesującej nas liczby wynik polecenia df przetworzymy poleceniami sed i cut
pi@raspberry:~ $ df -BM / | sed -n '2p' | sed -Ee 's@[[:space:]]+@ @g' | cut -d ' ' -f3 | cut -d 'M' -f1
3214

Rozmiar wolnej pamięci operacyjnej

# w celu uzyskania interesującej nas liczby wynik polecenia free przetworzymy poleceniami sed i cut
pi@raspberry:~ $ free -m | sed -n '2p' | sed -Ee 's@[[:space:]]+@ @g' | cut -d ' ' -f4
256

Obciążenie systemu

pi@raspberry:~ $ cat /proc/loadavg | cut -d ' ' -f3
0.15

Temperatura procesora

pi@raspberry:~ $ cat /sys/class/thermal/thermal_zone0/temp
49230

Skrypt wysyłający dane

Ponieważ chcemy monitorować nasz komputer, musimy zautomatyzować cały proces odczytywania i wysyłania danych. W tym celu przygotujemy skrypt powłoki, w którym:

  1. odczytamy parametry systemu przy użyciu podanych powyżej poleceń
  2. zapiszemy parametry do pliku w formacie JSON
  3. wyślemy request HTTP do Signomiksa z obiektem JSON pobranym z pliku
#!/bin/bash

# Device's authorization key
KEY=mysecretkey123
# Signomix integration API URL
URI=https://signomix.signocom.com/api/integration
# working directory of this script
WDIR=/home/pi

# calculate CPU temperature
cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))

# HDD free space
HDD=$(df -BM / | sed -n '2p' | sed -Ee 's@[[:space:]]+@ @g' | cut -d ' ' -f3 | cut -d 'M' -f1)

# RAM free
MEM=$(free -m | sed -n '2p' | sed -Ee 's@[[:space:]]+@ @g' | cut -d ' ' -f4)

# system load
LOAD=$(cat /proc/loadavg | cut -d ' ' -f3)

# unique identifier (for Raspberry it can be cpu serial number, otherwise we can use MAC address of the network interface)
EUI=$(cat /proc/cpuinfo | sed -n '13p' | sed -Ee 's@[[:space:]]+@ @g' | cut -d ' ' -f3)

# date and time
TS=$(date +%s%3N)

# create file with data to send formatted as JSON
cat > $WDIR/data.json<<END
{
    "dev_eui":"$EUI",
    "timestamp":"$TS",
    "payload_fields":[
        {"name":"cpuTemp","value":"$cpuTemp1.$cpuTempM"},
        {"name":"memory","value":"$MEM"},
        {"name":"disk","value":"$HDD"},
        {"name":"load","value":"$LOAD"}
    ]
}
END

# send data to Signomix
curl -k -H "Content-type: application/json" -H "Authorization: $KEY" --data "@$WDIR/data.json" $URI

Pozostaje nam jeszcze zmiana atrybutu wykonalności skryptu:

pi@raspberry:~ $ chmod +x signomix-client.sh

Cykliczne zadanie w serwisie CRON

Jeśli chcemy, żeby parametry naszego Raspberry były mierzone i wysyłane do Signomiksa w stałych odstępach czasu, to najprościej będzie wykorzystać do tego serwis CRON. W tym celu otwórzmy do edycji plik crontab:

pi@raspberry:~ $ sudo nano /etc/crontab

Do pliku dodajemy linię z wywołaniem, co np. 10 minut, utworzonego wcześniej skryptu:

*/10 *   * * *   root    /home/pi/signomix-client.sh >/dev/null 2>&1

Na koniec restartujemy serwis CRON i od tego momentu nasz skrypt będzie uruchamiany automatycznie.

pi@raspberry:~ $ sudo /etc/init.d/cron restart

Rozbudowa domyślnego pulpitu danych dla naszego Raspberry

W trakcie rejestrowania naszego Raspberry jako urządzenia IoT, Signomix automatycznie utworzył dla tego urządzenia nowy pulpit zawierający kontrolki dla kanałów danych, które zostały dla tego urządzenia zadeklarowane. Pulpit ten otrzymuje nazwę oraz tytuł identyczne jak EUI urządzenia.
Wybierając z menu opcję "Profil użytkownika > Zarządzanie pulpitami" możemy przejść do modyfikacji tego pulpitu i zmienić mu tytuł oraz zestaw kontrolek (np. dodać kontrolki z wykresami dla wybranych kanałów danych).


Zasoby

Signomix (demo) https://signomix.signocom.com

 

No Comments Yet.

Leave a comment

You must be Logged in to post a comment.