nordabiz/docs/zabbix_setup.md
Maciej Pienczyn 110d971dca
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates
Production moved from on-prem VM 249 (10.22.68.249) to OVH VPS
(57.128.200.27, inpi-vps-waw01). Updated ALL documentation, slash
commands, memory files, architecture docs, and deploy procedures.

Added |local_time Jinja filter (UTC→Europe/Warsaw) and converted
155 .strftime() calls across 71 templates so timestamps display
in Polish timezone regardless of server timezone.

Also includes: created_by_id tracking, abort import fix, ICS
calendar fix for missing end times, Pros Poland data cleanup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:41:53 +02:00

13 KiB

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:

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

# 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

# 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)

# 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

sudo nano /etc/zabbix/zabbix_agent2.conf

3.2 Ustawienia do zmiany

# === 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

# 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

sudo nano /etc/zabbix/zabbix_agent2.d/nordabiznes.conf

4.2 Zawartosc pliku

# ============================================
# 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

# 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

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

# 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

# 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:

# 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

# 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

# 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

# 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