Kategoria: Cacti

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)

Cacti 1.0.4 + Spine 1.0.4 na Ubuntu 16.04 LTS

Jakiś czas temu wydano Cacti 1.0. Poczekałem chwilę aby wszystkie bolączki wieku dziecięcego zostały usunięte i przystąpiłem do aktualizacji już posiadanych.

Każda aktualizacja wygląda inaczej dlatego przedstawię instalację nowego Cacti + kompilacja Spine.

Jest to instalacja manualna z racji, że cacti mamy 0.8.8f a spine 0.8.8b.

Potrzebne pakiety na nowej czystej instalacji Ubuntu 16.04 LTS:

apt install gcc apache2 libapache2-mod-php snmpd snmp snmp-mibs-downloader libsnmp-base libsnmp-dev libssl-dev libc-dev libc6-dev make php php-snmp php-xml php-gd php-common php-gmp php-ldap php-mbstring php-mysql mysql-server mysql-client libmysqlclient-dev help2man rrdtool git

Po instalacji php ustawiamy timezone

timedatectl set-timezone Europe/Warsaw
nano /etc/php/7.0/apache2/php.ini
date.timezone = Europe/Warsaw

Pobieramy Cacti z oficjalnej strony cacti.net i nadajemy uprawnienia dla serwera Apache

wget http://www.cacti.net/downloads/cacti-1.0.4.tar.gz
tar xvzf cacti-1.0.4.tar.gz
mv cacti-1.0.4 /var/www/html/cacti
chown -R www-data:www-data /var/www/html/cacti

Dodajemy konfigurację dla serwera www

nano /etc/apache2/conf-enabled/cacti.conf

Zawartość pliku:

Alias /cacti /var/www/html/cacti
<Directory /var/www/html/cacti>
        Options +FollowSymLinks
        AllowOverride None
        <IfVersion >= 2.3>
                Require all granted
        </IfVersion>
        <IfVersion < 2.3>
                Order Allow,Deny
                Allow from all
        </IfVersion>

        AddType application/x-httpd-php .php

        <IfModule mod_php.c>
                php_flag magic_quotes_gpc Off
                php_flag short_open_tag On
                php_flag register_globals Off
                php_flag register_argc_argv On
                php_flag track_vars On
                # this setting is necessary for some locales
                php_value mbstring.func_overload 0
                php_value include_path .
        </IfModule>

        DirectoryIndex index.php
</Directory>

Ustawiamy bazę mysql, użytkownika i hasło. Pierwszy krok to ustawienie hasła mysql dla root’a

mysqladmin password
cd /var/www/html/cacti
nano include/config.php
mysql -p

logujemy się ustawionym przed chwilą hasłem do serwera mysql i wydajemy polecenia

> CREATE DATABASE cacti
> grant all privileges on cacti.* to user@'localhost' identified by 'password';
> grant select on mysql.time_zone_name to user@'localhost' identified by 'password';

Edytujemy plik konfiguracyjny serwera mysql i dodajemy w sekcji [mysqld]

#
# Cacti Server
#

collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
max_heap_table_size = 256M
max_allowed_packet = 16777216
tmp_table_size = 64M
join_buffer_size = 64M
innodb_file_per_table = on
innodb_doublewrite = off
innodb_buffer_pool_size = 512M
innodb_flush_log_at_trx_commit = 2

Tworzymy strukturę bazy danych oraz dodajemy strefy czasowe do bazy danych

mysql -p cacti < cacti.sql
mysql_tzinfo_to_sql  /usr/share/zoneinfo | mysql -p mysql

Na koniec pobieramy i kompilujemy spine, kompilacja powinna potrwać chwilę.

wget http://www.cacti.net/downloads/spine/cacti-spine-1.0.4.tar.gz
tar xvzf cacti-spine-1.0.4.tar.gz
cd cacti-spine-1.0.4
./configure
make
make install

Teraz kończymy instalację przez przeglądarkę wchodząc na stronę http://adres.ip/cacti/ i akceptujemy warunki licencji, przechodzimy dalej, jeżeli brakuje nam wymienionych modułów dodajemy je poprzez apt.

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.