Kategoria: Linux

CactiEZ 0.7 i worek przygód

Do monitorowania sieci używam od dawien dawna oprogramowania Cacti. Na początku stawianego ręcznie na Debianie. Było to czasochłonne i wiązało się z powielaniem czynności. Na dodatek przy kolejnych wersjach Debiana instalacja różniła się w detalach. Zmieniały się wersje MySQL czy PHP.

Potem przyszedł z pomocą użytkownik cigamit z forums.cacti.net i stworzył CD z systemem CentOS 6 i skryptami instalującymi i konfigurującymi całość. Finalnie otrzymujemy gotową instalację z Cacti na pokładzie i kilkoma dodatkami, działającą od razu.

Niestety jak każdy „produkt” posiada większe i mniejsze błędy, ostatnia wersja to 0.7 czyli już po numerze widać, że nie jest to wersja stabilna, finalna itp. Nowszej już niestety nie było ale dla 99% instalacji jakie wykonałem Cacti 0.8.8b w zupełności wystarcza.

Procesu instalacji nie będę relacjonował bo jest ich kilka w sieci, nie ma co powielać treści. Jednak sposobu z jakiego sam korzystam nie widziałem nigdzie. CactiEZ domyślnie instaluje się na wybranym dysku podczas instalacji. Wybieramy jeden dysk i na nim kreator instalacji tworzy automatycznie partycje / i /home oraz partycję swap, rozmiar dobiera procentowo do pojemności dysku.

W instalacji CactiEZ katalog /home miałem praktycznie zawsze pusty, za to / zapełniał się szybko poprzez dodawanie urządzeń do monitorowania i tworzenia nowych plików .rra, które tworzą się od razu w przewidzianej w ustawieniach wielkości. Przeszukując instrukcję od CentOSa doszukałem się informacji, że w trybie tekstowym narzędzia do dysków są w okrojonej wersji i nie pozwalają na bardziej zaawansowane modyfikacje i ustawienia np. Software RAID ale instalując system poprzez VNC mamy dostęp do graficznego interfejsu i tym samym zaawansowanych narzędzi.

Aby zacząć instalację poprzez VNC podczas startu gdy pojawi się ekran CactiEZ Install screen wpisujemy w linii poleceń:

linux vnc

Dalej poprzez kilka pytań o ustawienia sieci przechodzimy dalej i pojawi się nam linijka na dole monitora:

13:14:47 Please manually connect your VNC viewer to 192.168.100.131:5901 to begin the install.

Oczywiście IP i port będzie inny, ale mamy podane dane do połączenia, za pomocą klienta VNC łączymy się do maszyny i postępujemy dalej z instalacją. Tworzymy macierze na dyskach i ustawiamy punkty montowania wg. potrzeb i kończymy instalację. Wydawałoby się, że to tak prosto ale jednak nie jest.

W pliku z listą pakietów do instalacji nie ma mdadm, bo standardowo instalacja wykonywana jest na jednym dysku z LVM i pakiet nie jest nam potrzebny po instalacji. Jeżeli mamy potrzebę utworzyć macierze za pomocą mdadm to instalujemy go po instalacji systemu i tworzymy macierze. Ale przecież my zainstalowaliśmy system na macierzy utworzonej przez mdadm ale nie mamy go w systemie. I podczas startu otrzymamy Kernel Panic. Nie wyciągamy CD z napędu tylko uruchamiamy instalator jeszcze raz, ale tym razem zamiast

linux vnc

wpisujemy

linux rescue

Uruchamiamy system z płyty, nasz system dyskowy zostanie podmontowany w katalogu

/mnt/sysimage

Należy wykonać polecenie

chroot /mnt/sysimage

I tym samym przełączyć się na naszą świerzą instalację tak jak byśmy byli w normalnie uruchomionym systemie. Teraz należy usunąć plik z repozytorium cactiez, które już niestety nie istnieje, potem zaktualizować listę pakietów ale nie uaktualniać ich na tą chwilę tylko wpisać N. Zainstalować pakiet mdadm i po tej operacji zaktualizować wszystkie pakiety.

rm /etc/yum.repos.d/cactiez.repo
yum update
yum install mdadm
yum upgrade

Dlatego w tej kolejności bo przy uaktualnieniu pakietów zostanie zainstalowany nowszy kernel linuksa, i tym samym zostanie wygenerowany nowy obraz initramfs już z obsługą mdadm i tym samym pozwoli już normalnie nam uruchomić system. Po tej operacji mamy gotowy system do pracy, zaktualizowany do CentOS 6.10 działający na SoftwareRAID.

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      255988 blocks super 1.0 [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
      30718908 blocks super 1.1 [2/2] [UU]
      bitmap: 1/1 pages [4KB], 65536KB chunk

md2 : active raid1 sda3[0] sdb3[1]
      2145272 blocks super 1.1 [2/2] [UU]

[root@localhost ~]# mount
/dev/md1 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/md0 on /boot type ext2 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

OpenWrt 18.06.1 + TP-Link WR841N = Czujnik temperatury cz.3

Jak pisałem w części 2 ostatnim krokiem będzie skonfigurowanie usługi SNMP na naszym czujniku abyśmy mogli monitorować temperaturę poprzez sieć.

Zaczynamy od konfiguracji SNMP. Edytujemy plik /etc/config/snmpd, interesuje nas sekcja

root@OpenWrt:~# nano /etc/config/snmpd
~
config system
        option sysLocation      'Monitorowana szafka' # Pole Location opisujące lokalizację czujnika
        option sysContact       'nasz@adres.email' # Pole Contact opisujące adres email, numer telefonu itp.
        option sysName          'OpenWrt_Temp' # Pole Name opisujęce nazwę urządzenia odczytywaną po SNMP
#       option sysServices      72
        option sysDescr         'OpenWrt Temperatura' # Pole Descryption z opisem urządzenia odczytywanym po SNMP
#       option sysObjectID      '1.2.3.4'
config exec
        option name     Temperatura
        option prog     /bin/cat
        option args     /etc/config/temp.txt
#       option miboid   1.2.3.4
~

Pod Windowsem korzystam z programu SNMPWalk od SolarWinds, jest to mały program pozwalający wykonać polecenie snmpwalk na urządzeniu i wynik zapisać do pliku tekstowego.snmpwalkJeżeli już wszystko ustawiliśmy wg. swoich danych zapisujemy i zamykamy edytor. Usługę snmpd uruchamiamy podobnie do usługi cron poleceniami:

root@OpenWrt:~# /etc/init.d/snmpd start
root@OpenWrt:~# /etc/init.d/snmpd enable

Po tych zabiegach możemy przetestować działanie naszego czujnika temperatury. Możemy przeskanować cały zakres OIDów lub tylko gałąź 1.3.6.1.4.1.2021.8.1, która zawiera dane odnośnie temperatury.

.1.3.6.1.4.1.2021.8.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.2021.8.1.2.1 = STRING: "Temperatura"
.1.3.6.1.4.1.2021.8.1.3.1 = STRING: "/bin/cat /etc/config/temp.txt"
.1.3.6.1.4.1.2021.8.1.100.1 = INTEGER: 0
.1.3.6.1.4.1.2021.8.1.101.1 = STRING: "28"
.1.3.6.1.4.1.2021.8.1.102.1 = INTEGER: 0
.1.3.6.1.4.1.2021.8.1.103.1 = STRING: ""

Dalej możemy już dowolnie takimi danymi zarządzać, przetwarzać itp. U siebie mam dodaną taką czujkę jako urządzenie w Cacti, dodatkowo stworzony template odczytujący dany OID. Utworzony również template w pluginie Thold, monitorujący i alarmujący jeżeli temperatura wychodzi poza górny lub dolny zakres.

Cacti Tempratura SNMP

Cacti Tempratura SNMP

OpenWrt 18.06.1 + TP-Link WR841N = Czujnik temperatury cz.2

Witam w części drugiej, w niej zajmiemy się modyfikacją sprzętową. Dodamy jeden czujnik na jednej z dostępnych linii GPIO. Dostępne linie GPIO sprawdzimy poleceniem:

root@OpenWrt:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/ath79-gpio, ath79-gpio:
 gpio-3   (                    |tp-link:green:qss   ) out hi
 gpio-4   (                    |tp-link:green:wan   ) out hi
 gpio-11  (                    |tp-link:green:lan4  ) out hi
 gpio-12  (                    |Reset button        ) in  hi
 gpio-13  (                    |tp-link:green:wlan  ) out hi
 gpio-14  (                    |tp-link:green:lan3  ) out hi
 gpio-15  (                    |tp-link:green:lan2  ) out hi
 gpio-16  (                    |tp-link:green:lan1  ) out hi
 gpio-17  (                    |WIFI button         ) in  hi

gpiochip1: GPIOs 494-511, parent: platform/qca953x_wmac, ath9k-phy0:
 gpio-495 (                    |ath9k-phy0          ) in  lo

Sprawdzone i dostępne linie to 11,13,14,15,16. Testowałem linię GPIO3 ale router nie uruchamia się wcale. Innych jeszcze nie miałem czasu przetestować, choć planuję to w najbliższej przyszłości.

Ale wracamy do czujnika temperatury. Potrzebujemy czujnik temperatury DS18B20, zamieszczam kartę produktu: https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf. Do tego rezystor 3.3k przewlekany oraz kilka przewodów do podłączenia.

WR841N_V9 Top

WR841N_V9 Top

WR841N_V9 Bottom

WR841N_V9 Bottom

Wykorzystamy GPIO13 od diody WLAN, jest to druga dioda od lewej patrząc od dołu PCB. Na początek musimy usunąć diodę, można pomóc sobie małą ilością nowej cyny. Potrzebne są też trzy przewody o odpowiedniej długości, które cynujemy po obu stronach. Wszystko łączymy jak na zdjęciu poniżej:

WR841N_V9 DB18B20Jeżeli wszystko mamy przylutowane możemy złożyć router. Podpinamy zasilanie oraz łączymy się z naszym routerem po SSH. Teraz kilka poleceń aby odzyskać linie GPIO używane przez system i wykorzystać je do własnych celów.

Na początek dodajemy zawartość do pliku /etc/rc.local który jest uruchamiany przy starcie:

root@OpenWrt:~# cat /etc/rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
/bin/sh /etc/config/leds.sh
exit 0

Tworzymy plik /etc/config/leds.sh i wklejamy do niego zawartość oraz nadajemy mu bit wykonywalności:

root@OpenWrt:~# touch /etc/config/leds.sh
root@OpenWrt:~# cat /etc/config/leds.sh
/bin/echo "leds-gpio" > /sys/bus/platform/drivers/leds-gpio/unbind
/bin/sleep 5
/sbin/insmod w1-gpio-custom bus0=0,13,0
root@OpenWrt:~# chmod +x /etc/config/leds.sh

Plik ten będzie uruchamiany przy starcie systemu. Restartujemy nasz router. Jeżeli wszystko poszło ok to w katalogu /sys/bus/w1/drivers/w1_slave_driver/ powinien pojawić się katalog o nazwie XX-YYYYYYYYYY w moim przypadku jest to:

root@OpenWrt:~# ls -l /sys/bus/w1/drivers/w1_slave_driver/
lrwxrwxrwx    1 root     root             0 Sep 30 12:51 28-00ff984302e5 -> ../../../../devices/w1_bus_master1/28-00ff984302e5
--w-------    1 root     root          4096 Sep 30 13:11 bind
--w-------    1 root     root          4096 Sep 30 13:11 uevent
--w-------    1 root     root          4096 Sep 30 13:11 unbind

Temperaturę odczytujemy drugim skryptem, dodatkowo skrypt tworzy plik tekstowy temp.txt z aktualną temperaturą. Skrypt ten dodany został do crona i jest uruchamiany co pięć minut, częstotliwość można zmienić wg. własnego upodobania.

root@OpenWrt:~# touch /etc/config/temp.sh
root@OpenWrt:~# cat /etc/config/temp.sh
awk -F= '/t=/ {printf "%.0f\n", $2/1000}' /sys/bus/w1/drivers/w1_slave_driver/28-00ff984302e5/w1_slave > /etc/config/temp.txt
root@OpenWrt:~# chmod +x /etc/config/temp.sh

root@OpenWrt:~# touch /etc/crontabs/root
root@OpenWrt:~# cat /etc/crontabs/root
*/5 * * * * /etc/config/temp.sh
root@OpenWrt:~# /etc/init.d/cron start
root@OpenWrt:~# /etc/init.d/cron enable

W tym momencie możemy sprawdzić poprawność skryptów. Możemy uruchomić skrypt ręcznie lub poczekać pięć minut i sprawdzić czy pojawił się plik /etc/config/temp.txt i poleceniem cat /etc/config/temp.txt sprawdzić jego zawartość.

root@OpenWrt:~# cat /etc/config/temp.txt
28

W tym momencie kończymy drugą część, trzecia część będzie już krótka i opisywać będzie uruchomienie usługi SNMP. Konfiguracja i sprawdzenie poleceniem snmpwalk poprawności ustawień.

OpenWrt 18.06.1 + TP-Link WR841N = Czujnik temperatury cz.1

Ostatnio wpadł mi pomysł do głowy na monitorowanie kilku lokalizacji. Chodziło głównie o temperaturę w pomieszczeniu, szafie serwerowej czy wewnątrz skrzyni powieszonej na ścianie czy maszcie. Przeglądając internet i szukając trafiłem na sondy temperatury odczytywanej po SNMP, jednak koszt 300zł był dla mnie mało atrakcyjny. Ilość jakiej potrzebowałem to kilkanaście sztuk, może i więcej. Zainteresowałem się tematem, zmalałem wiele opisów takich sond opartych o routery z wgranym OpenWrt i podpiętym pod USB konwerterem na RS232 i do tego czujnik DS18B20 1-wire. Gra warta świeczki bo koszt takiej czujki spadł nam już w okolice 100zł. Jest o co walczyć, w cenie jednej sondy mamy trzy. Ale dalej wgłębiałem się w temat. OpenWrt jest projektem o wielu możliwościach, może być nie tylko routerem ale też dyskiem sieciowym czy kontrolerem z podpiętymi przekaźnikami na liniach GPIO. Zgłębiając dalej temat znalazłem informację, że na linii GPIO mogę również podłączyć czujnik 1-wire. Zapaliła się lampka w mojej głowie, mam jeden wolny router w szufladzie, jest to wspomniany w temacie WR841N.

Pierwszą sprawą było przygotowanie sobie obrazu OpenWrt dla tego modelu routera. Można skorzystać z gotowego obrazu, jednak nie ma on w standardzie paczek 1-wire a ilość wolnego miejsca jest bardzo skromna. Router jaki posiadam to v9.1, 550MHz, 4MB FLASH oraz 32MB RAM.

Do stworzenia takiego obrazu potrzebujemy środowiska Linuksowego x64. Czy jest to fizyczna maszyna czy wirtualna nie ma znaczenia. Jak zapewnić sobie takie środowisko odsyłam do źródła: Image Builder

Przechodzimy do katalogu ze źródłami. Do budowania obrazów OpenWrt posiłkuję się skryptem:

make -j2 image PROFILE=tl-wr841-v9 PACKAGES="kmod-w1 kmod-w1-master-gpio kmod-w1-gpio-custom kmod-w1-slave-therm terminfo libnetsnmp snmpd libncurses nano base-files busybox dnsmasq dropbear -firewall fstools -ip6tables -iptables kernel kmod-ath9k kmod-gpio-button-hotplug libc libgcc logd mtd netifd -odhcp6c -odhcpd-ipv6only opkg -ppp -ppp-mod-pppoe swconfig uboot-envtools uci uclient-fetch wpad-mini"

Krótkie wyjaśnienie parametrów w skrypcie:

  • -j2 oznacza kompilowanie w dwóch wątkach jednocześnie, w zależności od ilości rdzeni/procesorów na maszynie gdzie budujemy obrazy
  • image PROFILE=tl-wr841-v9 oznacza pod jaki router budujemy obraz, bez tego parametru będziemy budować obrazy dla każdego rodzaju routera co znacząco wydłuży czas budowy i będzie marnotrawieniem czasu
  • lista PACKAGES zawiera jakie pakiety będą dodane lub usunięte (te z – na początku nazwy) z budowanego obrazu

W katalogu bin/targets/ar71xx/tiny/ znajdują się nasze obrazy:

marcin@openwrt:~/openwrt1806_wr841n$ ls -l bin/targets/ar71xx/tiny/
razem 22012
-rw-r--r-- 1 marcin users    1678 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-device-tl-wr841-v9.manifest
-rw-r--r-- 1 marcin users 2490368 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-root.squashfs
-rw-r--r-- 1 marcin users 3932160 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-tl-wr841-v9-squashfs-factory.bin
-rw-r--r-- 1 marcin users 3538948 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-tl-wr841-v9-squashfs-sysupgrade.bin
-rw-r--r-- 1 marcin users 1348203 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-uImage-lzma.bin
-rwxr-xr-x 1 marcin users 4234996 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux.bin
-rwxr-xr-x 1 marcin users 4240120 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux.elf
-rw-r--r-- 1 marcin users 1376256 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux.lzma
-rwxr-xr-x 1 marcin users 1358324 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux-lzma.elf
-rw-r--r-- 1 marcin users    1027 wrz 28 14:31 sha256sums

Jeżeli mamy router z fabrycznym oprogramowaniem to wybieramy obraz *-factory.bin, jeżeli mamy już wgranego OpenWrt to wybieramy obraz *-sysupgrade.bin. W nowych fabrycznych firmware jest ograniczenie ilości znaków w nazwie wgrywanego obrazu, przed wybraniem go trzeba sobie skrócić jego nazwę. Jeżeli dodajemy jakieś paczki do budowanego obrazu to przed wgrywaniem go na router należy sprawdzić jego rozmiar, powinien być zawsze 3932160, jeżeli jest więcej to przesadziliśmy z ilością pakietów i taki obraz nie wgra się poprawnie.

Jeżeli wszystko poszło ok to router rozdziela adresy IP na portach LAN, na porcie WAN jest klient DHCP czekający na adres. Po instalacji router ma aktywny telnet. Należy za jego pomocą zalogować się jako root do routera, nie ma hasła, i ustawić hasło poleceniem passwd. Jeżeli ustawimy hasło, serwer telnet zostanie wyłączony i zarządzamy naszym routerem poprzez klienta SSH.

Dla ww. wersji użycie pamięci FLASH ma się jak poniżej:

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 2.0M      2.0M         0 100% /rom
tmpfs                    13.6M     60.0K     13.6M   0% /tmp
/dev/mtdblock3          512.0K    240.0K    272.0K  47% /overlay
overlayfs:/overlay      512.0K    240.0K    272.0K  47% /
tmpfs                   512.0K         0    512.0K   0% /dev

Mamy przygotowany system do pracy z sensorami na 1-wire, w tym czujnikiem temperatury DS18B20. W części drugiej będzie o tym jak podłączyć czujnik pod jedną diodę LED routera i wykorzystać GPIO do odczytu temperatury z czujnika.

Debian 9.0 oraz AirControl 2.1 Beta6

Ostatnio miałem potrzebę przenieść instalację AC2 z jednej maszyny na drugą. Dodatkowo zrobić uaktualnienie do najnowszej wersji beta.

Potrzebujemy maszynę z zainstalowanym podstawowym systemem Debian 9.0, jest to najnowsze stabilne wydanie na obecną chwilę.

Logujemy się na konto root i wydajemy polecenie zainstalowania potrzebnych zależności:

apt-get install default-jdk iperf

W drugim kroku pobieramy binarny pakiet AirControl2.

wget https://fw-download.ubnt.com/data/airControl/680a-unix64-v2.1.0-beta6-7a3591a4c8f646988255f12caa6dac58.bin
mv 680a-unix64-v2.1.0-beta6-7a3591a4c8f646988255f12caa6dac58.bin aircontrol2.1-beta6.bin
chmod +x aircontrol2.1-beta6.bin

Uruchamiamy binarkę i przystępujemy do instalacji serwera AirControl2.

./aircontrol2.1-beta6.bin

Na większość pytań odpowiadamy w domyślnych ustawieniach, instalujemy załączoną bazę danych Postgresql, podajemy hasło dla bazy danych oraz nazwę użytkownika i hasło.

Aby przenieść kopię zapasową ze starej instalacji na nową, na starym serwerze z poziomu klienta AC2 wykonujemy kopię zapasową. Znajduje się ona w folderze

/opt/Ubiquiti/AirControl2/lib/db/

Przenosimy ją za pomocą scp na drugą maszynę i kopiujemy do takiego samego katalogu. Ustawiamy prawa dla pliku aby AC2 ją widział.

chown root:root /opt/Ubiquiti/AirControl2/lib/db/dbbackups/v2.1.0.BETA6_*.pgdmp

Łączymy się za pomocą klienta do nowego serwera i przywracamy za jego pomocą przesłaną kopię zapasową. Serwer AC2 uruchomi się ponownie z przywróconymi danymi.

Backup Cacti cz.2

Część druga to kopia zapasowa bazy danych.

#!/bin/bash
# Database credentials
 user="cacti"
 password="password"
 host="127.0.0.1"
 db_name="cacti"
# Other options
 DESDIR="/home/marcin/cacti"
 TIME=$(date +"%d-%m-%Y")
# Wait 20s for cacti pooling
echo "Wait 20s for cacti pooling"
sleep 20s
# Dump database into SQL file
echo "Dump database into SQL file"
mysqldump --user=$user --password=$password --host=$host $db_name > $DESDIR/$db_name-$TIME.sql
sleep 1s
# gzip database
echo "gzip database"
gzip $DESDIR/$db_name-$TIME.sql
# SCP file to backup server
echo "SCP file to backup server"
scp $DESDIR/$db_name-$TIME.sql.gz cacti@10.0.0.10:/mnt/cacti/$db_name-$TIME.sql.gz
# Log to syslog
logger MySQL Backup Complete

Zapis w crontabie:

0 0 * * * /home/marcin/cactidb.sh

Ścieżkę DESDIR zmienić sobie wg własnego uznania, tak samo jak wysyłanie przez scp i kluczy SSH na serwer w sieci czy internecie. Tak samo jak dane user,password oraz ip hosta gdzie stoi baza danych MySQL.

Backup Cacti cz.1

Backup najlepszym przyjacielem admina. Pierwszym krokiem jest kopia zapasowa plików Cacti. Często dodanie nowych funkcji czy poprawienie istniejących wiąże się z edycją plików w katalogu programu.

Skrypt dodany do crona uruchamia się co dobę, jednak częstotliwość zależna jest od częstotliwości zmian jakie dokonujemy w systemie.

#!/bin/bash
#START
TIME=$(date +"%d-%m-%Y")            # This Command will add date in Backup File Name.
FILENAME=files-$TIME.tar.gz         # Here i define Backup file name format.
SRCDIR=/usr/share/cacti/site/       # Location of Important Data Directory (Source of backup).
DESDIR=/home/marcin/cacti           # Destination of backup file.
# Wait 10s for cacti pooling
echo "Wait 10s for cacti pooling"
sleep 10
# Tar cacti folder
echo "Tar cacti folder"
tar -hcpzf $DESDIR/$FILENAME $SRCDIR
# SCP File to backup server
echo "SCP File to backup server"
scp $DESDIR/$FILENAME cacti@10.0.0.10:/mnt/cacti/$FILENAME
# Log to syslog
logger Cacti Backup Complete
#END

Zapis w crontabie:

0 0 * * * /home/marcin/cacti.sh

Ścieżkę DESDIR zmienić sobie wg własnego uznania, tak samo jak wysyłanie przez scp i kluczy SSH na serwer w sieci czy internecie.

Cacti Dlink oraz MacTrack

Monitoring to podstawa, tak samo jak backup. Każdy chwali swoje narzędzia, to ja pochwalę swoje. Do monitoringu urządzeń, sieci i wszystkiego innego nie znam lepszego narzędzia od Cacti. Wolnego i darmowego oprogramowania tworzonego przez ludzi z zamiłowania a nie dla pieniędzy. Z jednej strony prostota a z drugiej nieograniczone możliwości. Ale nie o tym tak naprawdę ten wpis.

Dodając do Cacti plugin MacTrack do śledzenia maców, ip, i wszystkiego co można wyciągnąć z przełączników czy routerów w sieci natrafiłem na problem. W jednej z sieci mam switche L3 Dlinka, niestety ale po dodaniu Device Type i poprawnym zdefiniowaniu urządzenia na zakładce mactrack -> Interfaces nie otrzymywałem żadnych danych. Problemem okazał się plik /usr/share/cacti/site/plugins/mactrack/lib/mactrack_dlink.php gdzie trzeba dopisać jedną linijkę.

marcin@cacti:~$ diff -c /usr/share/cacti/site/plugins/mactrack/lib/mactrack_dlink.php.bak /usr/share/cacti/site/plugins/mactrack/lib/mactrack_dlink.php
*** /usr/share/cacti/site/plugins/mactrack/lib/mactrack_dlink.php.bak   2016-08-18 09:34:23.106459397 +0200
--- /usr/share/cacti/site/plugins/mactrack/lib/mactrack_dlink.php       2016-08-18 09:38:37.534464556 +0200
***************
*** 55,60 ****
--- 55,61 ----
                $ifInterfaces[$ifIndex]["ifType"] = $ifTypes[$ifIndex];
                $ifInterfaces[$ifIndex]["linkPort"] = @$link_ports[$ifIndex];
        }
+       $if2 = build_InterfacesTable($device, $ifIndexes, TRUE, TRUE);
        mactrack_debug("ifInterfaces assembly complete.");

        get_dlink_l2_dot1dTpFdbEntry_ports($site, $device, $ifInterfaces, "", TRUE, $lowPort, $highPort);

Wrzucam diffa między oryginałem  a zmienionym plikiem.

Po tej małej zmianie zakładka Interfaces wypełniła się trzema tysiącami pozycji.

Okres wakacyjny nie sprzyja poświęcaniu czasu przy komputerze, kilka nowych wpisów o Cacti się pojawi, jak tylko pogoda się popsuje.

Kolejne wyzwanie, bash i snmpwalk w roli głównej

Ostatnio naszła mnie potrzeba sprawdzić jaki firmware posiadają urządzenia sieciowe w sieci. Prosta sprawa, można zalogować się na każde i sprawdzić, jednak przy ilości idącej w dziesiątki urządzeń nie napawa to optymizmem. Raczej nudnym klikaniem po klawiaturze męczącym bardziej niż praca w budowlance. Do pomocy przychodzi nam prosty skrypt, nawet totalny laik poświęci mniej czasu na naukę i napisanie go niż przeklikanie kilkudziesięciu urządzeń.

Potrzebujemy dwa pliki, jeden z IP urządzeń w formie:

192.168.1.1
...
192.168.10.1
192.168.12.1
192.168.13.1
...

Drugi to skrypt bash, który wykona odpowiednie polecenie pobierając sobie IP z podanego pliku:

#!/bin/bash
SNMPWALK="/usr/bin/snmpwalk"
OID1="iso.3.6.1.2.1.16.19.2.0"
OID2="iso.3.6.1.2.1.1.6.0"
LIST=`cat $HOME/ip.list`
COMMUNITY="public"
SNMPVERSION="1"
echo FIRMWARE
for ip in $LIST
do
 echo $ip
 $SNMPGET -c $COMMUNITY -v$SNMPVERSION $ip $OID1
 $SNMPGET -c $COMMUNITY -v$SNMPVERSION $ip $OID2
done

Zmienne są zmienne i można ustawić swoje, OIDy można zmienić, dodać bardzo łatwo idąc schematem przedstawionym w skrypcie. Pozdrawiam