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
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>
459 lines
13 KiB
Markdown
459 lines
13 KiB
Markdown
# 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 |
|
|
|