Tag: Cacti

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.