Linux – dowolny parametr systemu monitorowany przez SNMP

Dziś będzie długo i smutno 🙂 Mając urządzenie z systemem operacyjnym LINUX, możemy monitorować dowolny jego parametr przez protokół SNMP. Urządzeniem może być np. mikrokomputer Raspberry Pi, a parametrem – odczyt temperatury z podłączonego termometru. Ogranicza nas tu jedynie wyobraźnia. Warunkiem jest to, że na posiadanej wersji systemu operacyjnego LINUX musi dać się uruchomić snmpd.

Trochę teorii na początek. Każdą wartość w protokole SNMP możemy odczytać za pomocą OID (Object ID). Struktura (drzewo) OID jest określana przez organizację IANA (Internet Assigned Numbers Authority). Na potrzeby tego wpisu, będzie nas interesowała konkretna gałąź w drzewie OID a mianowicie: iso.org.dod.internet.private.enterprise.what-it.public-share czyli w zapisie cyframi to: 1.3.6.1.4.1.60955.100...

Poniższa grafika przedstawia ten numer na drzewie OID.

Nie musisz tego robić, ale ja zarejestrowałem w organizacji IANA swoją własną gałąź w Private Enterprise Numbers (PENs) o numerze 60955 Zauważ, że wszystkie numery OID w gałęzi 1.3.6.1.4.1.60955… należą do What-IT. To moja własna gałąź OID w przestrzeni „private enterprise” przyznana przez organizację IANA. Udostępniam publicznie część zarejestrowanej przeze mnie gałęzi (1.3.6.4.1.60955.100…) Możesz skorzystać z zarejestrowanej, przeze mnie gałęzi. Jeżeli będziesz używać OID z tej gałęzi, to będziesz miał pewność, że numery nie będą powodowały konfliktu z żadnym urządzeniem w Twoim systemie. Respektuj proszę rejestr IANA i nie nadużywaj numerów OID do innych celów niż zostały stworzone.

Jeżeli chcesz zarejestrować swoją własną przestrzeń „private enterprise”, to możesz to zrobić za pomocą tego formularza. IANA udostępnia również wyszukiwarkę podmiotów, które mają swoje własne PENs.

Tyle jeżeli chodzi o teorię, przejdźmy do praktyki. Na początek instalujemy na naszym linuxie snmpd. Na systemach z rodziny Debian można to zrobić za pomocą polecenia:

apt-get install snmpd

Następnie stwórzmy skrypt powłoki (może to być również skrypt w innym języku np. python), który będzie zwracał interesującą nas wartość. Na potrzeby tego wpisu zrobię skrypt, który zwraca wielkość katalogu /bin. kod skryptu poniżej:

du -s /bin | cut -f1

Pierwsze polecenie du -s /bin zwraca wielkość katalogu /bin w MB w postaci np. 12568 /bin. potem następuje przekierowanie | wyjścia tego polecenia do cut -f1, które „ucina” je po pierwszej spacji zwracając tylko 12568 – i ta wartość nas interesuje.

Przechodzę do katalogu bin cd /bin/ i otwieram edytor tekstu nano za pomocą polecenia sudo nano snmp1.sh i wpisuję w nim powyższy kod, a następnie zapisuję plik:

Teraz nadaję uprawnienia do wykonywania pliku snmp1.sh:

sudo chmod +x snmp1.sh
sudo chmod 777 snmp1.sh

Uruchamiamy nasz skrypt, żeby sprawdzić jaką wartość zwraca, w moim przypadku jest to 12572

Zajmiemy się teraz konfiguracją demona SNMP. Jest ona w pliku snmpd.conf. jeżeli nie wiesz, gdzie w Twojej dystrybucji systemu LINUX znajduje się ten plik, to możesz go znaleźć za pomocą polecenia:

sudo find / -name snmpd.conf

W moim przypadku jest on w katalogu /etc/snmp/snmpd.conf

Przejdźmy do tego katalogu za pomocą polecenia cd /etc/snmp/ oraz utwórzmy kopię oryginalnego pliku snmpd.conf wpisując sudo cp snmpd.conf snmpd.conf.bak

Usuniemy teraz plik snmp.conf poleceniem sudo rm snmpd.conf

Na potrzeby tego wpisu utworzymy swój własny, prosty plik konfiguracji snmpd.conf. Zachęcam jednak do zapoznania się z protokołem SNMP i opcjami zabezpieczeń tego protokołu. Nowy plik snmpd.conf tworzymy za pomocą polecenia sudo nano snmpd.conf wklejając w jego treść następujący kod:

agentAddress udp:localhost:161
view systemonly included .1.3.6.1.4.1
rocommunity public
#extend                                   name   prog      args
extend .1.3.6.1.4.1.60955.100.4.1.1.1.7.1 WhatIT /bin/bash /bin/snmp1.sh

Zauważ, że wartość parametru agentAddress jest ustawiona na localhost:161 możesz zmienić localhost na adres IP przypisany do karty sieciowej Twojego urządzenia. Ja pozostawię jednak localhost dlatego, że będę odpytywał naszego demona SNMP z lokalnego hosta. Jeżeli ma być odpytywany zdalnie, to należy ustawić adres IP. Na koniec uruchamiamy demona SNMP za pomocą polecenia:

sudo systemctl start snmpd

Możemy zweryfikować jego poprawne uruchomienie, za pomocą polecenia:

sudo systemctl status snmpd

Prawidłowe uruchomienie demona jest sygnalizowane przez status Active: active (running)

Instalujemy teraz pakiet snmp, aby mieć dostęp do programu snmpwalk:

sudo apt-get install snmp

Sprawdzamy, za pomocą programu snmpwalk, czy nasze urządzenie rozgłasza konkretny OID przez SNMP:

snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.60955

Zauważ, że w poleceniu podany jest adres hosta localhost, który wcześniej mogłeś zmienić na adres IP. Dodatkowo polecenie jest zawężone tylko do wyświetlenia OID z jednego private enterprise o nr 60955.

Wynik polecenia powinien prezentować wartość (wielkość) katalogu /bin w MB, którą spisywaliśmy wcześniej, czyli w moim przypadku 12572. Dodatkowo w tej linii zawarta jest informacja z numerem OID, który zapisujemy. W moim przypadku jest to:

1.3.6.1.4.1.60955.100.4.1.1.1.7.1.3.1.1.6.87.104.97.116.73.84

To tyle jeżeli chodzi o LINUX i SNMP. Dalsza część artykułu będzie dotyczyła narzędzia do monitorowania jakim jest MikroTik The Dude.


Przechodzimy teraz do The Dude i klikamy prawym przyciskiem myszy na mapie elementów wybierając opcję Add Device. W polu Address wpisujemy adres IP urządzenia z systemem Linux. Pozostałe pola takie jak User Name, Password, Secure Mode możemy pominąć, ponieważ dotyczą one urządzeń z systemem operacyjnym RouterOS. Klikamy przycisk Next.

Kolejny krok, to wykrycie usług uruchomionych na urządzeniu. Jeżeli wszystko skonfigurowaliśmy prawidłowo, to po kliknięciu przycisku Discover w górnej części okna, powinny się pojawić takie usługi jak cpu, disk, memory. Klikamy przycisk Next.

Teraz zajmiemy się wyszukaniem konkretnego OID, tego który skonfigurowaliśmy wcześniej w pliku snmpd.conf. Klikamy prawym klawiszem myszy na dodane urządzenie i wybieramy Tools/Snmpwalk.

W nowo otwartym oknie zaznaczamy opcję subtree, wpisujemy OID 1.3.6.1.4.1.60955.100 i klikamy Start. Wyszukiwanie powinno zwrócić wcześniej zanotowany OID 1.3.6.1.4.1.60955.100.4.1.1.1.7.1.3.1.1.6.87.104.97.116.73.84 – klikamy na niego prawym klawiszem i wybieramy Copy Oid. Zamykamy okno Snmp Walk.

Wklejamy sobie ten OID np. w notatnik. Powinien mieć postać:

.3.6.1.4.1.60955.100.4.1.1.1.7.1.3.1.1.6.87.104.97.116.73.84

Dodam teraz trochę kosmetyki. Skopiowany OID zaczyna się od kropki, a powinien od 1. Dodaję więc 1 na początku. Całość zamykam w cudzysłowach, na następnie w nawiasach. Przed nawiasami dodaję słowo oid i całość zamykam w nawiasach kwadratowych. Gotowy kod wygląda tak:

[oid("1.3.6.1.4.1.60955.100.4.1.1.1.7.1.3.1.1.6.87.104.97.116.73.84")]

Jednak wyświetli on tylko cyfrę. Dodam jeszcze z przodu napis /bin size= i na końcu MB. Całość wygląda teraz tak:

/bin size=[oid("1.3.6.1.4.1.60955.100.4.1.1.1.7.1.3.1.1.6.87.104.97.116.73.84")]MB

Teraz klikamy prawym klawiszem na nasze urządzenie i wybieramy opcję Apperance. Na zakładce General klikamy w polu Label i pod standardowymi etykietami wklejamy nasz kod. Wygląda to tak:

Po kliknięciu OK, na etykiecie naszego urządzenia powinna się pojawić informacja o wielkości katalogu /bin na naszym urządzeniu w czytelnej formie:

Jako ciekawostkę mogę dodać, że zwracaną wartość można podzielić, tak wynik by był prezentowany w GB oraz zaokrąglić. Przez co będzie jeszcze bardziej czytelna dla tego katalogu. Wygląda to tak:

Oraz kod:

/bin size=[round(oid("1.3.6.1.4.1.60955.100.4.1.1.1.7.1.3.1.1.6.87.104.97.116.73.84")/1024)]GB

Ciekawostka: Można zebrać rozmiar katalogów z kilku komputerów, serwerów, urządzeń IoT i zapisywać te wartości do wykresu (Charts). Można wtedy analizować dane historycznie. Można również ustawić powiadomienia e-mail czy sms o przekroczeniu danej wartości progowej rozmiaru katalogu.

Koniec 🙂

Jeżeli pomogłem to Postaw mi kawę na buycoffee.to ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *