# Zabbix Monitoring Setup - OVH VPS (inpi-vps-waw01) ## Informacje o serwerze | Parametr | Wartosc | |----------|---------| | **Nazwa hosta** | inpi-vps-waw01 | | **IP** | 57.128.200.27 | | **OS** | Ubuntu 22.04 LTS | | **Aplikacja** | Flask (NordaBiznes Partner) | | **Baza danych** | PostgreSQL 15 (localhost:5432) | | **Sciezka aplikacji** | /var/www/nordabiznes | ## Serwer Zabbix | Parametr | Wartosc | |----------|---------| | **Nazwa** | zabbix4norda | | **VM ID** | 135 | | **IP** | 10.22.68.126 | | **Web UI** | http://10.22.68.126/zabbix | | **Wersja** | Zabbix 7.0 LTS | --- ## 1. Sprawdzenie statusu Zabbix Agent Polacz sie z serwerem i sprawdz czy agent jest zainstalowany: ```bash ssh maciejpi@57.128.200.27 # Sprawdz status agenta (Zabbix Agent 2 - nowsza wersja) systemctl status zabbix-agent2 # Lub starszej wersji systemctl status zabbix-agent # Sprawdz czy port jest otwarty ss -tlnp | grep 10050 ``` --- ## 2. Instalacja Zabbix Agent 2 (jesli brak) ### 2.1 Dodanie repozytorium Zabbix ```bash # Pobierz pakiet repozytorium dla Ubuntu 22.04 wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu22.04_all.deb # Zainstaluj repozytorium sudo dpkg -i zabbix-release_7.0-2+ubuntu22.04_all.deb # Zaktualizuj liste pakietow sudo apt update ``` ### 2.2 Instalacja agenta ```bash # Zainstaluj Zabbix Agent 2 sudo apt install -y zabbix-agent2 zabbix-agent2-plugin-* # Opcjonalnie: plugin do PostgreSQL sudo apt install -y zabbix-agent2-plugin-postgresql ``` ### 2.3 Konfiguracja firewall (jesli aktywny) ```bash # Sprawdz status UFW sudo ufw status # Jesli aktywny, dodaj regule dla Zabbix sudo ufw allow from 10.22.68.126 to any port 10050 proto tcp comment "Zabbix Server" ``` --- ## 3. Konfiguracja Zabbix Agent 2 ### 3.1 Edycja glownego pliku konfiguracyjnego ```bash sudo nano /etc/zabbix/zabbix_agent2.conf ``` ### 3.2 Ustawienia do zmiany ```ini # === PODSTAWOWA KONFIGURACJA === # Adres serwera Zabbix (pasywne sprawdzenia) Server=10.22.68.126 # Adres serwera dla aktywnych sprawdzen ServerActive=10.22.68.126 # Nazwa hosta - MUSI byc identyczna jak w Zabbix Server Hostname=inpi-vps-waw01 # Port nasluchiwania (domyslny) ListenPort=10050 # Katalog na skrypty i pliki konfiguracyjne Include=/etc/zabbix/zabbix_agent2.d/*.conf # Poziom logowania (3 = Warning, 4 = Debug) DebugLevel=3 # Plik logow LogFile=/var/log/zabbix/zabbix_agent2.log LogFileSize=10 # Timeout dla sprawdzen (sekundy) Timeout=30 # === BEZPIECZENSTWO === # Wylacz zdalne komendy (bezpieczenstwo) EnableRemoteCommands=0 # Dozwolone adresy IP serwera AllowKey=system.run[*] DenyKey=system.run[*] # === BUFFERY === # Bufor dla aktywnych sprawdzen BufferSend=5 BufferSize=100 ``` ### 3.3 Restart i wlaczenie autostartu ```bash # Uruchom agenta sudo systemctl start zabbix-agent2 # Wlacz autostart sudo systemctl enable zabbix-agent2 # Sprawdz status sudo systemctl status zabbix-agent2 # Sprawdz logi sudo tail -f /var/log/zabbix/zabbix_agent2.log ``` --- ## 4. UserParameters dla NordaBiznes ### 4.1 Utworzenie pliku konfiguracyjnego ```bash sudo nano /etc/zabbix/zabbix_agent2.d/nordabiznes.conf ``` ### 4.2 Zawartosc pliku ```ini # ============================================ # NordaBiznes Partner - Custom Zabbix Monitoring # Server: OVH VPS inpi-vps-waw01 (57.128.200.27) # ============================================ # --- FLASK APPLICATION --- # Health check - sprawdza czy aplikacja odpowiada # Zwraca: 1 (OK) lub 0 (FAIL) UserParameter=nordabiznes.health,curl -s -o /dev/null -w "%%{http_code}" http://localhost:5000/health 2>/dev/null | grep -q "200" && echo 1 || echo 0 # Health check z czasem odpowiedzi (ms) UserParameter=nordabiznes.response_time,curl -s -o /dev/null -w "%%{time_total}" http://localhost:5000/health 2>/dev/null | awk '{printf "%.0f", $1*1000}' # Liczba aktywnych workerow Gunicorn UserParameter=nordabiznes.workers,pgrep -f "gunicorn.*nordabiznes" | wc -l # Status uslugi systemd # Zwraca: 1 (running) lub 0 (stopped/failed) UserParameter=nordabiznes.service_status,systemctl is-active nordabiznes >/dev/null 2>&1 && echo 1 || echo 0 # Uzycie pamieci przez aplikacje (MB) UserParameter=nordabiznes.memory_mb,ps aux | grep -E "gunicorn.*nordabiznes|python.*app.py" | grep -v grep | awk '{sum+=$6} END {printf "%.0f", sum/1024}' # --- POSTGRESQL DATABASE --- # Sprawdz czy PostgreSQL dziala UserParameter=postgresql.status,pg_isready -h localhost -p 5432 >/dev/null 2>&1 && echo 1 || echo 0 # Liczba aktywnych polaczen do bazy nordabiznes UserParameter=postgresql.connections,sudo -u postgres psql -t -c "SELECT count(*) FROM pg_stat_activity WHERE datname='nordabiznes'" 2>/dev/null | tr -d ' ' # Rozmiar bazy danych (MB) UserParameter=postgresql.db_size_mb,sudo -u postgres psql -t -c "SELECT pg_database_size('nordabiznes')/1024/1024" 2>/dev/null | tr -d ' ' # Najdluzsze aktywne zapytanie (sekundy) UserParameter=postgresql.longest_query_sec,sudo -u postgres psql -t -c "SELECT EXTRACT(EPOCH FROM (now() - query_start))::int FROM pg_stat_activity WHERE datname='nordabiznes' AND state='active' ORDER BY query_start LIMIT 1" 2>/dev/null | tr -d ' ' || echo 0 # --- DISK USAGE --- # Uzycie dysku /var/www/nordabiznes (MB) UserParameter=nordabiznes.disk_usage_mb,du -sm /var/www/nordabiznes 2>/dev/null | cut -f1 # Uzycie dysku /var/www/nordabiznes (%) UserParameter=nordabiznes.disk_percent,df /var/www/nordabiznes 2>/dev/null | tail -1 | awk '{print $5}' | tr -d '%' # Liczba plikow w katalogu aplikacji UserParameter=nordabiznes.file_count,find /var/www/nordabiznes -type f 2>/dev/null | wc -l # Rozmiar logow aplikacji (MB) UserParameter=nordabiznes.logs_size_mb,du -sm /var/log/nordabiznes* 2>/dev/null | awk '{sum+=$1} END {print sum}' || echo 0 # --- SYSTEM RESOURCES --- # Load average (1 min) UserParameter=system.load1,cat /proc/loadavg | cut -d' ' -f1 # Uzycie pamieci systemowej (%) UserParameter=system.memory_percent,free | grep Mem | awk '{printf "%.1f", $3/$2 * 100}' # Uzycie swap (%) UserParameter=system.swap_percent,free | grep Swap | awk '{if($2>0) printf "%.1f", $3/$2 * 100; else print 0}' # Uptime systemu (sekundy) UserParameter=system.uptime_sec,cat /proc/uptime | cut -d' ' -f1 | cut -d'.' -f1 # --- AI CHAT METRICS --- # Liczba wiadomosci czatu dzisiaj (wymaga dostepu do bazy) UserParameter=nordabiznes.chat_messages_today,sudo -u postgres psql -t -d nordabiznes -c "SELECT COUNT(*) FROM ai_chat_messages WHERE created_at >= CURRENT_DATE" 2>/dev/null | tr -d ' ' || echo 0 # Liczba aktywnych konwersacji (ostatnie 24h) UserParameter=nordabiznes.active_conversations,sudo -u postgres psql -t -d nordabiznes -c "SELECT COUNT(DISTINCT conversation_id) FROM ai_chat_messages WHERE created_at >= NOW() - INTERVAL '24 hours'" 2>/dev/null | tr -d ' ' || echo 0 ``` ### 4.3 Ustawienie uprawnien ```bash # Uprawnienia do pliku konfiguracyjnego sudo chown root:zabbix /etc/zabbix/zabbix_agent2.d/nordabiznes.conf sudo chmod 640 /etc/zabbix/zabbix_agent2.d/nordabiznes.conf # Zabbix user musi miec dostep do niektorych komend # Dodaj do sudoers (bez hasla dla okreslonych komend) sudo visudo -f /etc/sudoers.d/zabbix ``` ### 4.4 Zawartosc /etc/sudoers.d/zabbix ``` # Zabbix agent permissions for NordaBiznes monitoring zabbix ALL=(postgres) NOPASSWD: /usr/bin/psql zabbix ALL=(ALL) NOPASSWD: /usr/bin/du -sm /var/www/nordabiznes* zabbix ALL=(ALL) NOPASSWD: /usr/bin/du -sm /var/log/nordabiznes* ``` ### 4.5 Restart agenta po zmianach ```bash sudo systemctl restart zabbix-agent2 # Test UserParameters lokalnie zabbix_agent2 -t nordabiznes.health zabbix_agent2 -t nordabiznes.service_status zabbix_agent2 -t postgresql.status zabbix_agent2 -t nordabiznes.disk_usage_mb ``` --- ## 5. Konfiguracja na serwerze Zabbix ### 5.1 Dodanie hosta w Zabbix UI 1. Zaloguj sie do Zabbix: http://10.22.68.126/zabbix 2. Idz do: **Data collection** -> **Hosts** -> **Create host** 3. Wypelnij formularz: | Pole | Wartosc | |------|---------| | Host name | inpi-vps-waw01 | | Visible name | NordaBiznes Partner (57.128.200.27) | | Templates | Linux by Zabbix agent, PostgreSQL by Zabbix agent 2 | | Host groups | Linux servers, Web servers, Databases | | Interfaces | Agent: 57.128.200.27:10050 | ### 5.2 Utworzenie dedykowanego template'u Utworz nowy template dla NordaBiznes: **Configuration** -> **Templates** -> **Create template** | Pole | Wartosc | |------|---------| | Template name | Template App NordaBiznes | | Groups | Templates/Applications | ### 5.3 Items do dodania w template | Name | Key | Type | Update interval | |------|-----|------|-----------------| | Flask App Health | nordabiznes.health | Zabbix agent | 1m | | Flask Response Time | nordabiznes.response_time | Zabbix agent | 1m | | Gunicorn Workers | nordabiznes.workers | Zabbix agent | 5m | | Service Status | nordabiznes.service_status | Zabbix agent | 1m | | App Memory Usage | nordabiznes.memory_mb | Zabbix agent | 5m | | PostgreSQL Status | postgresql.status | Zabbix agent | 1m | | DB Connections | postgresql.connections | Zabbix agent | 2m | | DB Size (MB) | postgresql.db_size_mb | Zabbix agent | 1h | | App Disk Usage | nordabiznes.disk_usage_mb | Zabbix agent | 1h | | Chat Messages Today | nordabiznes.chat_messages_today | Zabbix agent | 15m | ### 5.4 Triggers (alarmy) | Name | Expression | Severity | |------|------------|----------| | NordaBiznes app is down | last(/inpi-vps-waw01/nordabiznes.health)=0 | High | | NordaBiznes service stopped | last(/inpi-vps-waw01/nordabiznes.service_status)=0 | High | | PostgreSQL is down | last(/inpi-vps-waw01/postgresql.status)=0 | Disaster | | High response time (>2s) | last(/inpi-vps-waw01/nordabiznes.response_time)>2000 | Warning | | Low Gunicorn workers | last(/inpi-vps-waw01/nordabiznes.workers)<2 | Warning | | High DB connections (>80) | last(/inpi-vps-waw01/postgresql.connections)>80 | Warning | | High memory usage (>500MB) | last(/inpi-vps-waw01/nordabiznes.memory_mb)>500 | Warning | | Disk usage >5GB | last(/inpi-vps-waw01/nordabiznes.disk_usage_mb)>5120 | Warning | --- ## 6. Testowanie polaczenia ### 6.1 Test z serwera Zabbix ```bash # Na serwerze Zabbix (10.22.68.126) zabbix_get -s 57.128.200.27 -k agent.ping # Oczekiwany wynik: 1 zabbix_get -s 57.128.200.27 -k nordabiznes.health # Oczekiwany wynik: 1 zabbix_get -s 57.128.200.27 -k postgresql.status # Oczekiwany wynik: 1 ``` ### 6.2 Test lokalnie na inpi-vps-waw01 ```bash # Na serwerze inpi-vps-waw01 zabbix_agent2 -t agent.ping zabbix_agent2 -t nordabiznes.health zabbix_agent2 -t nordabiznes.service_status zabbix_agent2 -t postgresql.status zabbix_agent2 -t nordabiznes.disk_usage_mb ``` --- ## 7. Monitorowanie SSL/TLS (opcjonalnie) ### 7.1 Sprawdzenie certyfikatu z zewnatrz Dodaj na serwerze Zabbix (nie na agencie) monitoring zewnetrzny: ```bash # External check - waznosc certyfikatu (dni) UserParameter=ssl.days_until_expiry[*],echo | openssl s_client -servername $1 -connect $1:443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2 | xargs -I {} date -d {} +%s | awk -v now=$(date +%s) '{print int(($1-now)/86400)}' ``` Uzycie: `ssl.days_until_expiry[nordabiznes.pl]` --- ## 8. Dashboard ### Zalecane widgety dla dashboardu NordaBiznes: 1. **Gauge: Flask Health** - nordabiznes.health (0-1) 2. **Gauge: PostgreSQL Status** - postgresql.status (0-1) 3. **Graph: Response Time** - nordabiznes.response_time (trend) 4. **Graph: Memory Usage** - nordabiznes.memory_mb (trend) 5. **Graph: DB Connections** - postgresql.connections (trend) 6. **Counter: Chat Messages Today** - nordabiznes.chat_messages_today 7. **Top Hosts: Active Problems** - filtry dla inpi-vps-waw01 --- ## 9. Troubleshooting ### Agent nie laczy sie z serwerem ```bash # Sprawdz czy agent nasluchuje ss -tlnp | grep 10050 # Sprawdz firewall sudo ufw status sudo iptables -L -n | grep 10050 # Sprawdz logi agenta sudo tail -100 /var/log/zabbix/zabbix_agent2.log # Test polaczenia TCP nc -zv 10.22.68.126 10051 ``` ### UserParameter nie zwraca danych ```bash # Testuj lokalnie zabbix_agent2 -t nordabiznes.health # Sprawdz uprawnienia ls -la /etc/zabbix/zabbix_agent2.d/ # Sprawdz skladnie zabbix_agent2 -p | grep nordabiznes ``` ### PostgreSQL metrics nie dzialaja ```bash # Sprawdz czy postgres jest dostepny pg_isready -h localhost -p 5432 # Sprawdz uprawnienia zabbix do sudo sudo -u zabbix sudo -u postgres psql -c "SELECT 1" # Sprawdz sudoers sudo cat /etc/sudoers.d/zabbix ``` --- ## 10. Checklist wdrozenia - [ ] Zainstalowano Zabbix Agent 2 - [ ] Skonfigurowano /etc/zabbix/zabbix_agent2.conf - [ ] Utworzono /etc/zabbix/zabbix_agent2.d/nordabiznes.conf - [ ] Skonfigurowano /etc/sudoers.d/zabbix - [ ] Uruchomiono i wlaczono autostart agenta - [ ] Przetestowano UserParameters lokalnie - [ ] Dodano hosta w Zabbix UI - [ ] Przypisano template'y - [ ] Przetestowano polaczenie z serwera Zabbix - [ ] Skonfigurowano triggery i alerty - [ ] Utworzono dashboard --- ## Historia zmian | Data | Autor | Opis | |------|-------|------| | 2025-12-29 | Claude | Utworzenie dokumentacji |